{"id":15008511,"url":"https://github.com/frezyx/talker","last_synced_at":"2026-01-26T19:27:52.393Z","repository":{"id":38338942,"uuid":"444156244","full_name":"Frezyx/talker","owner":"Frezyx","description":"☎️ Advanced error handler and logger for dart and flutter apps","archived":false,"fork":false,"pushed_at":"2025-03-24T19:46:37.000Z","size":90314,"stargazers_count":622,"open_issues_count":73,"forks_count":85,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-13T13:57:50.688Z","etag":null,"topics":["crash-reporting","dart","dart-library","dart-package","dartlang","error-handling","exception-handling","flutter","flutter-examples","flutter-library","flutter-package","logger","logger-dashboard","logging","monitoring","package"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/talker","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Frezyx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":"https://boosty.to/frezycode/single-payment/donation/651684/target?share=target_link"}},"created_at":"2022-01-03T18:09:08.000Z","updated_at":"2025-04-13T07:58:42.000Z","dependencies_parsed_at":"2023-10-12T01:10:01.836Z","dependency_job_id":"cf157000-f1c5-4efc-9a31-94e421fdb0e3","html_url":"https://github.com/Frezyx/talker","commit_stats":{"total_commits":1257,"total_committers":40,"mean_commits":31.425,"dds":"0.10739856801909309","last_synced_commit":"5e879af829a351c54a23232d09f0e922b2e0de98"},"previous_names":[],"tags_count":110,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frezyx%2Ftalker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frezyx%2Ftalker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frezyx%2Ftalker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frezyx%2Ftalker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Frezyx","download_url":"https://codeload.github.com/Frezyx/talker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248724585,"owners_count":21151559,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crash-reporting","dart","dart-library","dart-package","dartlang","error-handling","exception-handling","flutter","flutter-examples","flutter-library","flutter-package","logger","logger-dashboard","logging","monitoring","package"],"created_at":"2024-09-24T19:19:11.245Z","updated_at":"2026-01-26T19:27:52.383Z","avatar_url":"https://github.com/Frezyx.png","language":"Dart","readme":"\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/Frezyx/talker\" align=\"center\"\u003e\n        \u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/logo/full_logo.png?raw=true\" width=\"250px\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\u003c!-- \u003ch1 align=\"center\"\u003eTalker\u003c/h1\u003e --\u003e\n\u003ch2 align=\"center\"\u003e Advanced error handler and logger for dart and flutter apps\u003c/h2\u003e\n\n\u003cp align=\"center\"\u003e\n    Log your app actions, catch and handle exceptions and errors, show alerts and share log reports\n   \u003cbr\u003e\n   \u003cspan style=\"font-size: 0.9em\"\u003e Show some ❤️ and \u003ca href=\"https://github.com/Frezyx/talker\"\u003estar the repo\u003c/a\u003e to support the project! \u003c/span\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/Frezyx/talker\" align=\"center\"\u003e\n        \u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/v3/talker_flutter/talker.jpg?raw=true\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://codecov.io/gh/Frezyx/talker\"\u003e\u003cimg src=\"https://codecov.io/gh/Frezyx/talker/branch/master/graph/badge.svg\" alt=\"codecov\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/Frezyx/talker\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/Frezyx/talker?style=social\" alt=\"GitHub\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pub.dev/packages/talker\"\u003e\u003cimg src=\"https://pubstats.dev/badges/packages/talker/popularity.svg\" alt=\"PubStats Popularity\"\u003e\u003c/a\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://github.com/Frezyx/talker/actions\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/workflows/talker/badge.svg\" alt=\"talker\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Frezyx/talker_flutter/actions\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/workflows/talker_flutter/badge.svg\" alt=\"talker_flutter\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Frezyx/talker_logger/actions\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/workflows/talker_logger/badge.svg\" alt=\"talker_logger\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eFor better understanding how it works check \u003ca href=\"https://frezyx.github.io/talker\"\u003e\nWeb Demo\u003c/a\u003e page\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://frezyx.github.io/talker\"\u003e\n  \u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/check_web_demo.png?raw=true\" width=\"250px\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n\n## Motivation\n🚀 \u0026nbsp;The main goal of the project is provide ability to understand where the error occurs in a shortest possible time \u003cbr\u003e\n✅ \u0026nbsp;Compatible with any state managements \u003cbr\u003e\n✅ \u0026nbsp;Works with any crash reporting tool (Firebase Crashlytics, Sentry, custom tools, etc.) \u003cbr\u003e\n✅ \u0026nbsp;Logs UI output of Flutter app on the screen \u003cbr\u003e\n✅ \u0026nbsp;Allows sharing and saving logs history and error crash reports \u003cbr\u003e\n✅ \u0026nbsp;Displays alerts for UI exceptions. \u003cbr\u003e\n✅ \u0026nbsp;Built-in support for dio [HTTP logs](#talker-dio-logger) \u003cbr\u003e\n✅ \u0026nbsp;Built-in support for [http logs](#talker-http-logger) \u003cbr\u003e\n✅ \u0026nbsp;Built-in support for [BLoC logs](#talker-bloc-logger) \u003cbr\u003e\n✅ \u0026nbsp;Built-in support for [Riverpod logs](#talker-riverpod-logger) \u003cbr\u003e\n✅ \u0026nbsp;Built-in support for [Chopper HTTP logs](#talker-chopper-logger) \u003cbr\u003e\n✅ \u0026nbsp;Built-in support for [GRPC calls](#talker-grpc-logger) \u003cbr\u003e\n✅ \u0026nbsp;[Check all features](#features-list)\n\n## Packages\nTalker is designed for any level of customization. \u003cbr\u003e\n\n| Package                                                                                                | Version                                                                                                                              | Description                                                                                                                                                      | \n|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [talker](https://github.com/Frezyx/talker/tree/master/packages/talker)                                 | [![Pub](https://img.shields.io/pub/v/talker.svg?style=flat-square)](https://pub.dev/packages/talker)                                 | Main dart package for logging and error handling                                                                                                                 |\n| [talker_flutter](https://github.com/Frezyx/talker/tree/master/packages/talker_flutter)                 | [![Pub](https://img.shields.io/pub/v/talker_flutter.svg?style=flat-square)](https://pub.dev/packages/talker_flutter)                 | Flutter extensions for talker \u003cbr\u003eColored Flutter app logs (iOS and Android), logs list screen, showing error messages at UI out of the box, route observer, etc |\n| [talker_logger](https://github.com/Frezyx/talker/tree/master/packages/talker_logger)                   | [![Pub](https://img.shields.io/pub/v/talker_logger.svg?style=flat-square)](https://pub.dev/packages/talker_logger)                   | Customizable pretty logger for dart/flutter apps                                                                                                                 |\n| [talker_dio_logger](https://github.com/Frezyx/talker/tree/master/packages/talker_dio_logger)           | [![Pub](https://img.shields.io/pub/v/talker_dio_logger.svg?style=flat-square)](https://pub.dev/packages/talker_dio_logger)           | Best logger for [dio](https://pub.dev/packages/dio) http calls                                                                                                   |                                                                                           |\n| [talker_bloc_logger](https://github.com/Frezyx/talker/tree/master/packages/talker_bloc_logger)         | [![Pub](https://img.shields.io/pub/v/talker_bloc_logger.svg?style=flat-square)](https://pub.dev/packages/talker_bloc_logger)         | Best logger for [BLoC](https://pub.dev/packages/bloc) state management library                                                                                   |\n| [talker_riverpod_logger](https://github.com/Frezyx/talker/tree/master/packages/talker_riverpod_logger) | [![Pub](https://img.shields.io/pub/v/talker_riverpod_logger.svg?style=flat-square)](https://pub.dev/packages/talker_riverpod_logger) | Best logger for [Riverpod](https://pub.dev/packages/riverpod) state management library\n| [talker_chopper_logger](https://github.com/Frezyx/talker/tree/master/packages/talker_chopper_logger)   | [![Pub](https://img.shields.io/pub/v/talker_chopper_logger.svg?style=flat-square)](https://pub.dev/packages/talker_chopper_logger)   | Best logger for [Chopper](https://pub.dev/packages/chopper) http calls                                                                           |\n| [talker_http_logger](https://github.com/Frezyx/talker/tree/master/packages/talker_http_logger)         | [![Pub](https://img.shields.io/pub/v/talker_http_logger.svg?style=flat-square)](https://pub.dev/packages/talker_http_logger)         | Best logger for [http](https://pub.dev/packages/http) package                                                                                                    |\n| [talker_grpc_logger](https://github.com/Frezyx/talker/tree/master/packages/talker_grpc_logger)         | [![Pub](https://img.shields.io/pub/v/talker_grpc_logger.svg?style=flat-square)](https://pub.dev/packages/talker_grpc_logger)         | Best logger for [grpc](https://pub.dev/packages/grpc) package                                                                                                    |\n\n## Table of contents\n\n- [Motivation](#motivation)\n- [Packages](#packages)\n- [Talker](#talker)\n  - [Get Started](#get-started)\n  - [Customization](#⚙️-customization)\n    - [Custom logs](#custom-logs)\n    - [Change log colors](#change-log-colors)\n    - [Change log titles](#change-log-titles)\n  - [TalkerObserver](#talkerobserver)\n- [Talker Flutter](#talker-flutter)\n  - [Get Started](#get-started-flutter)\n  - [TalkerScreen](#talkerscreen)\n  - [Customization](#customization)\n    - [How to set custom color?](#how-to-set-custom-colors)\n    - [TalkerScreenTheme](#talkerscreentheme)\n  - [TalkerRouteObserver](#talkerrouteobserver)\n    - [Navigator](#navigator)\n    - [auto_route](#auto_route)\n    - [auto_route v7](#auto_route-v7)\n    - [go_router](#go_router)\n  - [TalkerMonitor](#talkermonitor)\n  - [TalkerWrapper](#talkerwrapper)\n  - [More Features And Examples](#more-features-and-examples)\n- [Integrations](#integrations)\n- [Talker Dio Logger](#talker-dio-logger)\n  - [Getting Started](#getting-started)\n  - [Customization](#customization-dio)\n    - [Off/On http request or reposnse logs](#offon-http-request-or-reposnse-logs-dio)\n    - [Change http logs colors](#change-http-log-colors-dio)\n    - [Filter http logs](#filter-http-logs-dio)\n  - [Using with Talker](#using-with-talker-dio)\n- [Talker BLoC Logger](#talker-bloc-logger)\n  - [Getting Started](#getting-started-1)\n  - [Customization](#customization-2)\n    - [Off/on events, transitions, changes, creation, close](#offon-events-transitions-changes-creation-close)\n    - [Full/truncated state and event data](#fulltruncated-state-and-event-data)\n    - [Filter bloc logs](#filter-bloc-logs)\n  - [Using with Talker](#using-with-talker-1)\n- [Talker Riverpod Logger](#talker-riverpod-logger)\n  - [Getting Started](#getting-started-2)\n  - [Customization](#customization-3)\n    - [Off/on events, add, update, dispose, fail](#offon-events-add-update-dispose-fail)\n    - [Full/truncated state data](#fulltruncated-state-data)\n    - [Filter riverpod logs](#filter-riverpod-logs)\n  - [Using with Talker](#using-with-talker-2)\n- [Talker Chopper Logger](#talker-chopper-logger)\n  - [Getting Started](#getting-started-3)\n  - [Customization](#customization-chopper)\n    - [Enable or disable HTTP request or response logs](#change-http-log-colors-chopper)\n    - [Print HTTP request curl command](#print-http-request-curl-command-chopper)\n    - [Hide sensitive HTTP request headers](#hide-sensitive-http-request-headers-chopper)\n    - [Change HTTP logs colors](#change-http-log-colors-chopper)\n    - [Filter HTTP logs](#filter-http-logs-chopper)\n    - [Using with existing Talker instance](#using-with-existing-talker-instance-chopper)\n- [Talker GRPC Logger](#talker-grpc-logger)\n  - [Getting Started](#getting-started-4)\n  - [Using with Talker](#using-with-talker-3)\n  - [Token obfuscation](#token-obfuscation)\n- [Crashlytics integration](#crashlytics-integration)\n- [Features list](#features-list)\n- [Coverage](#coverage)\n- [Additional information](#additional-information)\n- [Contributors](#contributors)\n\n\n# Talker\n\n## Get Started\n\u003c!-- See all documentation at [talker web site](https://frezyx.github.io/talker/guide/get-started.html#instalation) or --\u003e\nFollow these steps to the coolest experience in error handling\n\n### Add dependency\n```yaml\ndependencies:\n  talker: ^5.1.13\n```\n\n### Easy to use\nYou can use Talker instance everywhere in your app \u003cbr\u003e\nSimple and concise syntax will help you with this\n\n```dart\n  import 'package:talker/talker.dart';\n\n  final talker = Talker();\n\n  /// Just logs\n  talker.warning('The pizza is over 😥');\n  talker.debug('Thinking about order new one 🤔');\n\n  // Handling Exception's and Error's\n  try {\n    throw Exception('The restaurant is closed ❌');\n  } catch (e, st) {\n    talker.handle(e, st);\n  }\n\n  /// Just logs\n  talker.info('Ordering from other restaurant...');\n  talker.info('Payment started...');\n  talker.good('Payment completed. Waiting for pizza 🍕');\n```\nMore examples you can get [there](https://github.com/Frezyx/talker/blob/master/packages/talker/example/talker_example.dart)\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/v3/talker/console.jpg?raw=true\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n## ⚙️ Customization\nConfigure the error handler and logger for yourself\n```dart\nfinal talker = Talker(\n    settings: const TalkerSettings(\n      /// You can enable/disable all talker processes with this field\n      enabled: true,\n      /// You can enable/disable saving logs data in history\n      useHistory: true,\n      /// Length of history that saving logs data\n      maxHistoryItems: 100,\n      /// You can enable/disable console logs\n      useConsoleLogs: true,\n    ),\n    /// Setup your implementation of logger\n    logger: TalkerLogger(),\n    ///etc...\n  );\n```\nMore examples you can get [here](https://github.com/Frezyx/talker/blob/master/packages/talker/example/talker_example.dart)\n\n### Custom logs\n\nWith Talker you can create your custom log message types.\u003cbr\u003e\nAnd you have **full customization control** over them!\n\n```dart\nclass YourCustomLog extends TalkerLog { \n    YourCustomLog(String super.message); \n\n    /// Log title \n    static get getTitle =\u003e 'Custom';\n\n    /// Log key \n    static get getKey =\u003e 'custom_log_key';\n\n    /// Log color \n    static get getPen =\u003e AnsiPen()..yellow(); \n\n    /// The following overrides are required because the base class expects instance getters,\n    /// but we use static getters to allow for easy customization and reuse of colors, titles, and keys.\n    /// This approach works around limitations in the base class API, which does not support passing custom values\n    /// directly to the constructor or as parameters, so we override the instance getters to return the static values.\n    @override \n    String get title =\u003e getTitle; \n\n    @override \n    String get key =\u003e getKey; \n\n    @override \n    AnsiPen get pen =\u003e getPen; \n } \n\nfinal talker = Talker();\ntalker.logCustom(YourCustomLog('Something like your own service message'));\n```\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/logger/custom_log.png?raw=true\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n### Change log colors\n\nStarting from version 4.0.0, you have the ability to fully customize all logs colors. You can set **your own color for any type of logs**. For example, you can choose red for HTTP responses and green for errors—whatever suits your preference 😁\n\nThe map is now structured as `{String: AnsiPen}`.\n\n### String Key\nThe `String` key serves as an identifier for a specific log type (e.g., HTTP, error, info, etc.). \n- Default log types are accessible via the `key` field in the `TalkerLogType` enum.\n- Developers can also define **custom log pen** by providing their own string keys, like `'custom_log_key'`.\n\n```dart\nfinal talker = Talker(\n  settings: TalkerSettings(\n    colors: {\n      // Colors for default log types can be defined with AnsiPen\n      TalkerLogType.httpResponse.key: AnsiPen()..red(),\n      TalkerLogType.error.key: AnsiPen()..green(),\n      TalkerLogType.info.key: AnsiPen()..blue(),\n\n      // Custom Logs can be defined\n\n      // ... from the custom log's key name\n      'custom_log_key': AnsiPen()..yellow(),\n\n      // ... or from the variable\n      YourCustomLog.getKey: AnsiPen()..yellow(),\n\n      // ... or using the variable and the previously defined custom color for conformity\n      YourCustomLog.getKey: YourCustomLog.getPen\n    },\n  ),\n);\n```\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/logger/custom_logs_colors.jpg?raw=true\"\u003e\u003c/a\u003e\u003c/p\u003e\n\nTalker have default color scheme. You can check it in [TalkerSettings](https://github.com/Frezyx/talker/blob/master/packages/talker/lib/src/settings.dart) class\n\n### Change log titles\n\nStarting from version 4.0.0, you have the ability to fully customize all logs titles. You can set **your own title for any type of logs**.\n\nThe map is now structured as `{String: AnsiPen}`.\n\n### String Key\nThe `String` key serves as an identifier for a specific log type (e.g., HTTP, error, info, etc.). \n- Default log types are accessible via the `getKey` field in the `TalkerLogType` enum.\n- Developers can also define **custom log title** by providing their own string keys, like `'custom_log_key'`.\n\n```dart\nfinal talker = Talker(\n  settings: TalkerSettings(\n    titles: {\n      // Titles for default log types can be defined with strings\n      TalkerLogType.exception.key: 'Whatever you want',\n      TalkerLogType.error.key: 'E',\n      TalkerLogType.info.key: 'i',\n\n      // Custom Logs can be defined\n\n      // ... from the custom log's key name\n      'custom_log_key': \"new custom title!\",\n\n      // ... or from the variable\n      YourCustomLog.getKey: \"new custom title!\",\n\n      // ... or using the variable and the previously defined custom title for conformity\n      YourCustomLog.getKey: YourCustomLog.getTitle      \n    },\n  ),\n);\n```\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/logger/custom_log_titles.png?raw=true\"\u003e\u003c/a\u003e\u003c/p\u003e\n\nTalker have default titles scheme. You can check it in [TalkerSettings](https://github.com/Frezyx/talker/blob/master/packages/talker/lib/src/settings.dart) class\n\n## TalkerObserver\n\nTalkerObserver is a mechanism that allows observing what is happening inside Talker from the outside.\n\n```dart\nimport 'package:talker/talker.dart';\n\nclass ExampleTalkerObserver extends TalkerObserver {\n  ExampleTalkerObserver();\n\n  @override\n  void onError(TalkerError err) {\n    /// Send data to your error tracking system like Sentry or backend\n    super.onError(err);\n  }\n\n  @override\n  void onException(TalkerException exception) {\n    /// Send Exception to your error tracking system like Sentry or backend\n    super.onException(exception);\n  }\n\n  @override\n  void onLog(TalkerDataInterface log) {\n    /// Send log message to Grafana or backend\n    super.onLog(log);\n  }\n}\n\nfinal observer = ExampleTalkerObserver();\nfinal talker = Talker(observer: observer);\n```\n\nYou can use it to transmit data about logs to external sources such as **[Crashlytics](#crashlytics-integration)**, **Sentry**, **Grafana**, or your own analytics service, etc.\n\n# Talker Flutter\n\n## Get Started Flutter\n\nTalker Flutter is an extension for the Dart Talker package that adds extra functionality to make it easier for you to handle logs, errors, and exceptions in your Flutter applications.\n\n### Add dependency\n```yaml\ndependencies:\n  talker_flutter: ^5.1.13\n```\n\n### Setup\n\n```dart\nimport 'package:talker_flutter/talker_flutter.dart';\n\nfinal talker = TalkerFlutter.init();\n\n// Handle exceptions and errors\ntry {\n  // your code...\n} catch (e, st) {\n    talker.handle(e, st, 'Exception with');\n}\n\n// Log your app info\ntalker.info('App is started');\ntalker.critical('❌ Houston, we have a problem!');\ntalker.error('🚨 The service is not available');\n```\n\n### ❗️ Log messages integrity\nMost of flutter logging packages either cut messages in the console, or cant dope colored messages in the iOS console. But Talker is not one of them...\n\nTalker uses the optimal method for logging depending on the Operating system on which it runs\n\nBut to do this, you need to use the initialization given in the example. Only with TalkerFlutter.init() \n\nAs result of this method you will get the same instance of Talker as when creating it through the Talker() constructor but with logging default initialization\n\n## TalkerScreen \nOften you need to check what happening in the application when there is no console at hand. \u003cbr\u003e\nThere is a TalkerScreen widget from [talker_flutter](https://pub.dev/packages/talker_flutter) package for this situations.\u003cbr\u003e\n\nFor better understanding how it works check [Web Demo](https://frezyx.github.io/talker) page\n\n| \u003cp align=\"left\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/v3/talker_flutter/start.png?raw=true\" width=\"250px\"\u003e\u003c/a\u003e\u003c/p\u003e | \u003cp align=\"left\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/v3/talker_flutter/filter.png?raw=true\" width=\"250px\"\u003e\u003c/a\u003e\u003c/p\u003e | \u003cp align=\"left\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/v3/talker_flutter/actions.png?raw=true\" width=\"250px\"\u003e\u003c/a\u003e\u003c/p\u003e | \u003cp align=\"left\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/v3/talker_flutter/settings.png?raw=true\" width=\"250px\"\u003e\u003c/a\u003e\u003c/p\u003e |\n| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |\n| TalkerScreen | TalkerFilter | TalkerActions | TalkerSettings |\n\n### Easy to use\nYou can use TalkerScreen everywhere in your app\u003cbr\u003e\nAt Screen, BottomSheet, ModalDialog, etc...\n\n```dart\nimport 'package:talker_flutter/talker_flutter.dart';\n\nfinal talker = TalkerFlutter.init();\n\nNavigator.of(context).push(\n  MaterialPageRoute(\n    builder: (context) =\u003e TalkerScreen(talker: talker),\n  )\n);\n```\nSee more in TalkerScreen [usage example](https://github.com/Frezyx/talker/blob/master/packages/talker_flutter/example/lib/main.dart)\n\n## Customization\n\nStarting from version 4.0.0, you have the ability to fully customize your TalkerScreen display. You can set **your own color for any type of logs**. For example, you can choose red for HTTP responses and green for errors—whatever suits your preference 😁\n\n| \u003cp align=\"left\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/customization/custom_logs4.png?raw=true\" width=\"250px\"\u003e\u003c/a\u003e\u003c/p\u003e | \u003cp align=\"left\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/customization/custom_logs1.png\" width=\"250px\"\u003e\u003c/a\u003e\u003c/p\u003e | \u003cp align=\"left\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/customization/custom_logs2.png?raw=true\" width=\"250px\"\u003e\u003c/a\u003e\u003c/p\u003e | \u003cp align=\"left\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/customization/custom_logs3.png?raw=true\" width=\"250px\"\u003e\u003c/a\u003e\u003c/p\u003e |\n| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |\n\n### How to set custom colors ?\n\nTo set your custom colors, you need to pass a TalkerScreenTheme object to the TalkerScreen constructor, with a Map containing the desired colors. \n\nThe Map is structured as **{log type: color}**. **TalkerLogType** is an identifier for a specific log type (e.g., HTTP, error, info, etc.), and each log type in Talker has its own field in the enum.\n\n```dart\nimport 'package:talker_flutter/talker_flutter.dart';\n\nfinal talker = TalkerFlutter.init();\n\nTalkerScreen(\n  talker: talker,\n  theme: const TalkerScreenTheme(\n    logColors: {\n\n      // Default log type colors can be overridden from the color object\n      TalkerLogType.httpResponse.key: Color(0xFF26FF3C),\n      // ... or from flutter material colors\n      TalkerLogType.error.key: Colors.redAccent,\n      // ... or from ARGB values\n      TalkerLogType.info.key: Color.fromARGB(255, 0, 255, 247),\n\n      // Custom logs can override their terminal colors \n      \n      // ... using the key string\n      'custom_log_key': Colors.green,\n      \n      // ... or from the variable\n      YourCustomLog.getKey: Colors.green,\n\n      // ... but they cannot use the previously defined color from the custom log object,\n      // ... because flutter doesn't display ansi colors in widgets.\n      // ... However, you can use material colors, the color object, or ARGB values for them\n      YourCustomLog.getKey: Color(0xFF26FF3C)\n    },\n  )\n)\n```\n\n### TalkerScreenTheme\n\nYou can set custom backagroud, card and text colors for  TalkerScreen with TalkerScreenTheme\n\n```dart\nTalkerScreenTheme(\n  cardColor: Colors.grey[700]!,\n  backgroundColor: Colors.grey[800]!,\n  textColor: Colors.white,\n  logColors: {\n    /// Your logs colors...\n  },\n)\n```\n\n## TalkerRouteObserver\nObserver for a navigator.\u003cbr\u003e\nIf you want to keep a record of page transitions in your application, you've found what you're looking for.\n\nYou can use TalkerRouteObserver with **any routing package**\u003cbr\u003e\nFrom auto_route to basic Flutter Navigator\n\n### Navigator\n\n```dart\nfinal talker = Talker();\n\nMaterialApp(\n  navigatorObservers: [\n    TalkerRouteObserver(talker),\n  ],\n)\n```\n\n### auto_route\n\n```dart\nfinal talker = Talker();\n\nMaterialApp.router(\n  routerDelegate: AutoRouterDelegate(\n    appRouter,\n    navigatorObservers: () =\u003e [\n      TalkerRouteObserver(talker),\n    ],\n  ),\n),\n```\n\n### auto_route v7\n\n```dart\nfinal talker = Talker();\n\nMaterialApp.router(\n  routerConfig: _appRouter.config(\n    navigatorObservers: () =\u003e [\n      TalkerRouteObserver(talker),\n    ],\n  ),\n),\n```\n\n### go_router\n\n```dart\nfinal talker = Talker();\n\nGoRouter(\n  observers: [TalkerRouteObserver(talker)],\n)\n```\n\n\n## TalkerMonitor \nIf you want to check the status of your application in a short time\u003cbr\u003e \n**TalkerMonitor** will be the best solution for you \n\nMonitor is a filtered quick information about http requests, exceptions, errors, warnings, etc... count\n\nYou will find Monitor at the TalkerScreen page\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/v3/talker_flutter/monitor.jpg?raw=true\"\u003e\u003c/a\u003e\u003c/p\u003e\n\nFor better understanding how it works check [Web Demo](https://frezyx.github.io/talker) page\n\n## TalkerWrapper\nIn addition \ntalker_flutter is able to show default and custom error messages and another status messages via TalkerWrapper\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://frezyx.github.io/talker\" align=\"center\"\u003e\u003cimg src=\"https://github.com/Frezyx/talker/blob/dev/docs/assets/v3/talker_flutter/wrapper.jpg?raw=true\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n```dart\nimport 'package:talker_flutter/talker_flutter.dart';\n\nfinal talker = TalkerFlutter.init();\n\nTalkerWrapper(\n  talker: talker,\n  options: const TalkerWrapperOptions(\n    enableErrorAlerts: true,\n  ),\n  child: /// Application or the screen where you need to show messages\n),\n```\n\n## More Features And Examples\n\n### Custom UI error messages\n\nIn order to understand in more details - you can check this article [\"Showing Flutter custom error messages\"](https://dev.to/frezyx/showing-flutter-custom-error-messages-109o)\n\nTalkerWrapper [usage example](https://github.com/Frezyx/talker/blob/master/packages/talker_flutter/example/lib/talker_wrapper_example/talker_wrapper_example.dart)\n\n### ShopApp example\nSee full application example with BLoC and navigation [here](https://github.com/Frezyx/talker/blob/master/examples/shop_app_example)\n\nThe talker_flutter package have a lot of another widgets like TalkerBuilder, TalkerListener, etc. You can find all of them in code documentation.\n\n## Integrations\n\nIn addition to the basic functionality, talker was conceived as a tool for creating lightweight loggers for the main activities of your application\n\nYou can use ready out of the box packages like [talker_dio_logger](https://pub.dev/packages/talker_dio_logger), [talker_bloc_logger](https://pub.dev/packages/talker_bloc_logger) and [talker_riverpod_logger](https://pub.dev/packages/talker_riverpod_logger) or create your own packages.\n\n## Talker Dio Logger\n\nLightweight, simple and pretty solution for logging if your app use [dio](https://pub.dev/packages/dio) as http-client \n\nThis is how the logs of your http requests will look in the console\n![](https://github.com/Frezyx/talker/blob/dev/docs/assets/talker_dio_logger/preview_new.png?raw=true)\n\n### Getting started\nFollow these steps to use this package\n\n### Add dependency\n```yaml\ndependencies:\n  talker_dio_logger: ^5.1.13\n```\n\n### Usage\nJust add **TalkerDioLogger** to your dio instance and it will work\n\n```dart\nfinal dio = Dio();\ndio.interceptors.add(\n    TalkerDioLogger(\n        settings: const TalkerDioLoggerSettings(\n          printRequestHeaders: true,\n          printResponseHeaders: true,\n          printResponseMessage: true,\n        ),\n    ),\n);\n```\n\n\u003ca id=\"customization-dio\"\u003e\u003c/a\u003e\n## Customization\n\nTo provide hight usage exp here are a lot of settings and customization fields in TalkerDioLoggerSettings. You can setup all wat you want. For example: \n\n\u003ca id=\"offon-http-request-or-reposnse-logs-dio\"\u003e\u003c/a\u003e\n### Off/on http request or reposnse logs\n\nYou can toggle reponse / request printing and headers including\n\n```dart\nfinal dio = Dio();\ndio.interceptors.add(\n    TalkerDioLogger(\n        settings: const TalkerDioLoggerSettings(\n          // All http responses enabled for console logging\n          printResponseData: true,\n          // All http requests disabled for console logging\n          printRequestData: false,\n          // Reposnse logs including http - headers\n          printResponseHeaders: true,\n          // Request logs without http - headersa\n          printRequestHeaders: false,\n        ),\n    ),\n);\n```\n\n\u003ca id=\"change-http-log-colors-dio\"\u003e\u003c/a\u003e\n### Change http logs colors\n\nSetup your custom http-log colors. You can set color for requests, responses and errors in TalkerDioLoggerSettings\n\n```dart\nTalkerDioLoggerSettings(\n  // Blue http requests logs in console\n  requestPen: AnsiPen()..blue(),\n  // Green http responses logs in console\n  responsePen: AnsiPen()..green(),\n  // Error http logs in console\n  errorPen: AnsiPen()..red(),\n);\n```\n\n\u003ca id=\"filter-http-logs-dio\"\u003e\u003c/a\u003e\n### Filter http logs\n\nFor example if your app has a private functionality and you don't need to store this functionality logs in talker - you can use filters\n\n```dart\nTalkerDioLoggerSettings(\n  // All http request without \"/secure\" in path will be printed in console \n  requestFilter: (RequestOptions options) =\u003e !options.path.contains('/secure'),\n  // All http responses with status codes different than 301 will be printed in console \n  responseFilter: (response) =\u003e response.statusCode != 301,\n)\n```\n\n\u003ca id=\"using-with-talker-dio\"\u003e\u003c/a\u003e\n## Using with Talker\nYou can add your talker instance for TalkerDioLogger if your app already uses Talker.\nIn this case, all logs and errors will fall into your unified tracking system\n\n```dart\nfinal talker = Talker();\nfinal dio = Dio();\ndio.interceptors.add(TalkerDioLogger(talker: talker));\n```\n\n## Talker BLoC Logger\n\nLightweight, simple and pretty solution for logging if your app use [BLoC](https://pub.dev/packages/bloc) as state management\n\nThis is how the logs of your BLoC's event calling and state emits will look in the console\n![](https://github.com/Frezyx/talker/blob/dev/docs/assets/talker_bloc_logger/preview.png?raw=true)\n\n### Getting started\nFollow these steps to use this package\n\n### Add dependency\n```yaml\ndependencies:\n  talker_bloc_logger: ^5.1.13\n```\n\n### Usage\nJust set **TalkerBlocObserver** as Bloc.observer field and it will work\n\n```dart\nimport 'package:talker_bloc_observer/talker_bloc_observer.dart';\n\nBloc.observer = TalkerBlocObserver();\n```\n\n## Customization\n\nTo provide hight usage exp here are a lot of settings and customization fields in TalkerBlocLoggerSettings. You can setup all wat you want. For example:\n\n### Off/on events, transitions, changes, creation, close\n\nYou can toggle all bloc event types printing\n\n```dart\nBloc.observer = TalkerBlocObserver(\n    settings: TalkerBlocLoggerSettings(\n      enabled: true,\n      printChanges: true,\n      printClosings: true,\n      printCreations: true,\n      printEvents: true,\n      printTransitions: true,\n    ),\n  );\n```\n\n### Full/truncated state and event data\n\nYou can choose to have the logs of events and states in the BLoC displayed in the console in either full or truncated form\n\n```dart\nBloc.observer = TalkerBlocObserver(\n    settings: TalkerBlocLoggerSettings(\n      printEventFullData: false,\n      printStateFullData: false,\n    ),\n  );\n```\n\n### Filter bloc logs\n\nYou can output logs to the console for specific events and states only, using a filter\n\n```dart\nBloc.observer = TalkerBlocObserver(\n    settings: TalkerBlocLoggerSettings(\n      // If you want log only AuthBloc transitions\n      transitionFilter: (bloc, transition) =\u003e\n          bloc.runtimeType.toString() == 'AuthBloc',\n      // If you want log only AuthBloc events\n      eventFilter: (bloc, event) =\u003e bloc.runtimeType.toString() == 'AuthBloc',\n    ),\n  );\n```\n\n## Using with Talker!\nYou can add your talker instance for TalkerBlocLogger if your Appication already uses Talker.\n\nIn this case, all logs and errors will fall into your unified tracking system\n\n```dart\nimport 'package:talker_bloc_observer/talker_bloc_observer.dart';\nimport 'package:talker/talker.dart';\n\nfinal talker = Talker();\nBloc.observer = TalkerBlocObserver(talker: talker);\n```\n\n## Talker Riverpod Logger\n\nLightweight, simple and pretty solution for logging if your app use [Riverpod](https://pub.dev/packages/riverpod) as state management\n\nThis is how the logs of your Riverpod's event calling and state emits will look in the console\n![](https://github.com/Frezyx/talker/blob/dev/docs/assets/talker_riverpod_logger/preview.png?raw=true)\n\n### Getting started\nFollow these steps to use this package\n\n### Add dependency\n```yaml\ndependencies:\n  talker_riverpod_logger: ^5.1.13\n```\n\n### Usage\nJust pass **TalkerRiverpodObserver** to either `ProviderScope` or `ProviderContainer` and it will work\n\n```dart\nimport 'package:talker_riverpod_observer/talker_riverpod_observer.dart';\n\nrunApp(\n  ProviderScope(\n    observers: [\n      TalkerRiverpodObserver(),\n    ],\n    child: MyApp(),\n  )\n);\n```\n\nor\n\n```dart\nimport 'package:talker_riverpod_observer/talker_riverpod_observer.dart';\n\nfinal container = ProviderContainer(\n  observers: [\n    TalkerRiverpodObserver(),\n  ],\n);\n```\n\n## Customization\n\nTo provide hight usage exp here are a lot of settings and customization fields in TalkerRiverpodLoggerSettings. You can setup all wat you want. For example:\n\n### Off/on events, add, update, dispose, fail\n\nYou can toggle all riverpod event types printing\n\n```dart\nTalkerRiverpodObserver(\n  settings: TalkerRiverpodLoggerSettings(\n    enabled: true,\n    printProviderAdded: true,\n    printProviderUpdated: true,\n    printProviderDisposed: true,\n    printProviderFailed: true,\n  ),\n)\n```\n\n### Full/truncated state data\n\nYou can choose to have the logs of states in the Riverpod displayed in the console in either full or truncated form\n\n```dart\nTalkerRiverpodObserver(\n  settings: TalkerRiverpodLoggerSettings(\n    printStateFullData: false,\n  ),\n)\n```\n\n### Filter Riverpod logs\n\nYou can output logs to the console for specific events only, using a filter\n\n```dart\nTalkerRiverpodObserver(\n  settings: TalkerRiverpodLoggerSettings(\n    // If you want log only AuthProvider events\n      eventFilter: (provider) =\u003e provider.runtimeType == 'AuthProvider\u003cUser\u003e',\n  ),\n)\n```\n\n## Using with Talker!\nYou can add your talker instance for TalkerRiverpodLogger if your Appication already uses Talker.\n\nIn this case, all logs and errors will fall into your unified tracking system\n\n```dart\nimport 'package:talker_riverpod_observer/talker_riverpod_observer.dart';\nimport 'package:talker/talker.dart';\n\nfinal talker = Talker();\n\nrunApp(\n  ProviderScope(\n    observers: [\n      TalkerRiverpodObserver(\n        talker: talker,\n      ),\n    ],\n    child: MyApp(),\n  )\n);\n```\n\nor\n\n```dart\nimport 'package:talker_riverpod_observer/talker_riverpod_observer.dart';\nimport 'package:talker/talker.dart';\n\nfinal talker = Talker();\n\nfinal container = ProviderContainer(\n  observers: [\n    TalkerRiverpodObserver(\n      talker: talker,\n    ),\n  ],\n);\n```\n\n# Talker Chopper Logger\n\nA lightweight, straightforward, and visually appealing logging solution for apps that use \n[Chopper](https://pub.dev/packages/chopper) as an HTTP client.\n\nThis is how the logs of your http requests will look in the console\n![](docs/assets/talker_chopper_logger/preview.png?raw=true)\n\n### Getting Started\nFollow these steps to use this package\n\n### Add dependency\n```yaml\ndependencies:\n  talker_chopper_logger: ^5.1.13\n```\n\n### Usage\nSimply include the **TalkerChopperLogger** in your Chopper client’s interceptors list to enable it.\n\n```dart\nfinal client = ChopperClient(\n  /// ... other chopper settings\n  interceptors: [\n    TalkerChopperLogger(\n      settings: const TalkerChopperLoggerSettings(\n        printRequestHeaders: true,\n        printResponseHeaders: true,\n        printResponseMessage: true,\n      ),\n    ),\n  ],\n);\n```\n\n\u003ca id=\"customization-chopper\"\u003e\u003c/a\u003e\n## Customization\n\nTo offer extensive functionality, [TalkerChopperLoggerSettings](packages/talker_chopper_logger/lib/talker_chopper_logger_settings.dart) provides \nnumerous configuration settings and customization options. You can adjust everything to suit your needs. For example:\n\n### Enable or disable HTTP request or response logs\n\nYou can toggle response / request printing and headers including\n\n```dart\nfinal client = ChopperClient(\n  /// ... other chopper settings\n  interceptors: [\n    TalkerChopperLogger(\n      talker: _talker,\n      settings: const TalkerChopperLoggerSettings(\n        // All HTTP responses enabled for console logging\n        printResponseData: true,\n        // All HTTP requests disabled for console logging\n        printRequestData: false,\n        // Response logs including HTTP - headers\n        printResponseHeaders: true,\n        // Request logs without HTTP - headers\n        printRequestHeaders: false,\n      ),\n    ),\n  ],\n);\n```\n\n\u003ca id=\"print-http-request-curl-command-chopper\"\u003e\u003c/a\u003e\n### Print HTTP request curl command\n\nYou can print the curl command for the HTTP request in the console.\nThis is useful for debugging and testing purposes.\n\n```dart\nfinal client = ChopperClient(\n  /// ... other chopper settings\n  interceptors: [\n    TalkerChopperLogger(\n      talker: _talker,\n      settings: const TalkerChopperLoggerSettings(\n        // Print curl command for HTTP request\n        printRequestCurl: true,\n      ),\n    ),\n  ],\n);\n```\n\n\u003ca id=\"hide-sensitive-http-request-headers-chopper\"\u003e\u003c/a\u003e\n### Hiding sensitive HTTP request headers\n\nYou can hide sensitive HTTP request headers such as `Authorization` or `Cookie` in the console logs.\nThis is useful for security purposes.\n\n```dart\nfinal client = ChopperClient(\n  /// ... other chopper settings\n  interceptors: [\n    TalkerChopperLogger(\n      talker: _talker,\n      settings: const TalkerChopperLoggerSettings(\n        printRequestHeaders: true,\n        printResponseHeaders: true,\n        // Hide sensitive HTTP request headers\n        hiddenHeaders: {\n          'authorization',\n          'cookie',\n        },\n      ),\n    ),\n  ],\n);\n```\n\n\u003ca id=\"change-http-log-colors-chopper\"\u003e\u003c/a\u003e\n### Change HTTP logs colors\n\nCustomize your HTTP log colors by defining specific colors for requests, responses, and errors in \n[TalkerChopperLoggerSettings](packages/talker_chopper_logger/lib/talker_chopper_logger_settings.dart)\n\n```dart\nTalkerChopperLoggerSettings(\n  // Blue HTTP requests logs in console\n  requestPen: AnsiPen()..blue(),\n  // Green HTTP responses logs in console\n  responsePen: AnsiPen()..green(),\n  // Error HTTP logs in console\n  errorPen: AnsiPen()..red(),\n);\n```\n\n\u003ca id=\"filter-http-logs-chopper\"\u003e\u003c/a\u003e\n### Filter HTTP logs\n\nFor instance, if your app includes private functionality that you prefer not to log with talker, you can apply filters.\n\n```dart\nTalkerChopperLoggerSettings(\n  // All http request without \"/secure\" in path will be printed in console \n  requestFilter: (Request request) =\u003e !request.url.path.contains('/secure'),\n  // All http responses with status codes different than 301 will be printed in console \n  responseFilter: (Response response) =\u003e response.statusCode != 301,\n)\n```\n\n\u003ca id=\"using-with-existing-talker-instance-chopper\"\u003e\u003c/a\u003e\n## Using with existing Talker instance\n\nIf your application already uses Talker, simply inject your Talker instance into TalkerChopperLogger so that all logs \nand errors integrate into your centralized tracking system.\n\n```dart\nfinal talker = Talker();\nfinal client = ChopperClient(\n  /// ... other chopper settings\n  interceptors: [\n    TalkerChopperLogger(\n      talker: talker,\n      settings: const TalkerChopperLoggerSettings(\n        printRequestHeaders: true,\n        printResponseHeaders: true,\n        printResponseMessage: true,\n      ),\n    ),\n  ],\n);\n```\n\n## Talker GRPC Logger\n\n### Getting started\nFollow these steps to use this package\n\n### Add dependency\n```yaml\ndependencies:\n  talker_grpc_logger: ^5.1.13\n```\n\n### Usage\n\nCreate an interceptor and instrument your RPC client:\n\n```dart\nimport 'package:grpc/grpc.dart';\nimport 'package:talker_grpc_logger/talker_grpc_logger.dart';\n\nvoid main() {\n  late final channel = GrpcOrGrpcWebClientChannel.toSingleEndpoint(\n      host: 'localhost',\n      port: 50051,\n  );\n\n  // Generate your RPC client as usual, and use the interceptor to log the requests and responses.\n  late final rpcClient = YourRPCClient(channel, interceptors: [\n    TalkerGrpcLogger()\n  ]);\n}\n```\n\n\n### Using with Talker\n\nVery similar to the section above, just pass a Talker instance to the interceptor:\n\n```dart\nimport 'package:grpc/grpc.dart';\nimport 'package:talker_flutter/talker_flutter.dart';\nimport 'package:talker_grpc_logger/talker_grpc_logger.dart';\n\nvoid main() {\n  // Not mandatory, but useful to see the grpc logs in the Talker screen\n  final talker = TalkerFlutter.init();\n\n  // Define port and host as you see fit\n  var host = 'localhost';\n  var port = 50051;\n\n  // transportSecure needs to be true when talking to a server through TLS.\n  // This can be disabled for local development.\n  // GrpcOrGrpcWebClientChannel is a channel type compatible with web and native. There\n  // are other channel types available for each platform.\n  late final channel = GrpcOrGrpcWebClientChannel.toSingleEndpoint(\n      host: host,\n      port: port,\n      transportSecure: host == 'localhost' ? false : true);\n\n\n  final List\u003cClientInterceptor\u003e interceptors = [\n    TalkerGrpcLogger(talker: talker)\n  ];\n\n  // Generate your RPC client as usual, and use the interceptor to log the requests and responses.\n  late final rpcClient = YourRPCClient(channel, interceptors: interceptors);\n}\n```\n\n\n### Token obfuscation\n\n`TalkerGrpcLogger` will obfuscate bearer tokens by default. It'll look at the\nmetadata of the request and obfuscate the `authorization` header. It'll look\nlike `Bearer [obfuscated]` in the logs. It is highly recommended to keep this\noption enabled. If you want to disable it, you can pass `obfuscateToken:\nfalse`:\n\n```dart\nTalkerGrpcLogger(talker: talker, obfuscateToken: true)\n```\n\n## Crashlytics integration\n\nIf you add CrashlyticsTalkerObserver to your application, you will receive notifications about all application errors in the Crashlytics dashboard. \u003cbr\u003e\n\nAdditionally, you can **configure it to send only specific errors** to Crashlytics from within TalkerObserver.\n\n```dart\nimport 'package:firebase_crashlytics/firebase_crashlytics.dart';\nimport 'package:talker/talker.dart';\n\nclass CrashlyticsTalkerObserver extends TalkerObserver {\n  CrashlyticsTalkerObserver();\n\n  @override\n  void onError(err) {\n      FirebaseCrashlytics.instance.recordError(\n        err.error,\n        err.stackTrace,\n        reason: err.message,\n      );\n  }\n\n  @override\n  void onException(err) {\n      FirebaseCrashlytics.instance.recordError(\n        err.exception,\n        err.stackTrace,\n        reason: err.message,\n      );\n  }\n}\n\nfinal crashlyticsTalkerObserver = CrashlyticsTalkerObserver();\nfinal talker = Talker(observer: crashlyticsTalkerObserver);\n```\n\n## Features list\n\n✅ Logging\n- ✅ Filtering\n\n- ✅ Formatting\n- ✅ Color logs\n- ✅ LogLevels (info, verbose, warning, debug, error, critical, fine, good) \n- ✅ Customization for filtering, formatting and colors\n- 🚧 Separation from system's and another flutter logs\n- 🚧 Collapsible feature for huge logs\n- 🚧 Logs grouping\n\n✅ Errors handling\n- ✅ Errors and Exceptions identification\n- ✅ StackTrace\n- 🚧 Error level identification \n\n✅ Flutter\n- ✅ Application logs sharing\n\n- ✅ HTTP cals logging\n- ✅ TalkerScreen - Showing logs list in Flutter app UI\n- ✅ TalkerMonitor - A short summary of your application status. How much errors, how much warnings in Flutter app UI\n- ✅ TalkerRouteObserver - router logging (which screen is opened, which is closed)\n- ✅ TalkerWrapper - Showing errors and exceptions messages at UI\n- ✅ TalkerListener - Listen logs data at application UI\n- ✅ TalkerBuilder - UI builder to Logs List showing custom UI\n- ✅ Android/Windows/Web application logs colors\n- ✅ iOS/MacOS application logs colors\n- ✅ Talker configuration chnages from TalkerFlutter \n\n✅ Logs and errors history saving\n\n✅ TalkerObserver - handle all logs, errors, exceptions for integrations (Sentry, Crashlytics)\n\n\n## Coverage\nError handling is a very important task \u003cbr\u003e\nYou need to choose carefully if you want to use a package for exceptions handling solution \u003cbr\u003e\nTherefore, the project is 100% covered by tests\n\n[![](https://codecov.io/gh/Frezyx/talker/branch/master/graphs/sunburst.svg)](https://codecov.io/gh/Frezyx/talker/branch/master)\n\n## Additional information\nThe project is under development and ready for your pull-requests and issues 👍\u003cbr\u003e\nThank you for support ❤️\n\n## Contributors\n\n\u003cbr\u003e\n\u003cdiv align=\"center\" \u003e\n  \u003cp\u003eThanks to all contributors of this package\u003c/p\u003e\n  \u003ca href=\"https://github.com/Frezyx/talker/graphs/contributors\"\u003e\n    \u003cimg src=\"https://contrib.rocks/image?repo=Frezyx/talker\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\nFor help getting started with 😍 Flutter, view\n[online documentation](https://flutter.dev/docs), which offers tutorials, \nsamples, guidance on mobile development, and a full API reference. \n","funding_links":["https://boosty.to/frezycode/single-payment/donation/651684/target?share=target_link"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrezyx%2Ftalker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrezyx%2Ftalker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrezyx%2Ftalker/lists"}