Viewing version 5.1.20. Open the latest package page.

talker_flutter

5.1.20

Advanced error handler and logger package for flutter and dart. App monitoring, logs history, report sharing, custom logs, and etc.

Download archive

Readme

Motivation

🚀  The main goal of the project is provide ability to understand where the error occurs in a shortest possible time ✅  Compatible with any state managements ✅  Works with any crash reporting tool (Firebase Crashlytics, Sentry, custom tools, etc.) ✅  Logs UI output of Flutter app on the screen ✅  Allows sharing and saving logs history and error crash reports ✅  Displays alerts for UI exceptions. ✅  Built-in support for dio HTTP logs ✅  Built-in support for http logs ✅  Built-in support for BLoC logs ✅  Built-in support for Riverpod logs ✅  Built-in support for Chopper HTTP logs ✅  Built-in support for GRPC calls ✅  Check all features

Packages

Talker is designed for any level of customization.

Package Version Description
talker Pub Main dart package for logging and error handling
talker_flutter Pub Flutter extensions for talker Colored Flutter app logs (iOS and Android), logs list screen, showing error messages at UI out of the box, route observer, etc
talker_logger Pub Customizable pretty logger for dart/flutter apps
talker_dio_logger Pub Best logger for dio http calls
talker_bloc_logger Pub Best logger for BLoC state management library
talker_riverpod_logger Pub Best logger for Riverpod state management library
talker_chopper_logger Pub Best logger for Chopper http calls
talker_http_logger Pub Best logger for http package
talker_grpc_logger Pub Best logger for grpc package

Table of contents

Talker

Get Started

Follow these steps to the coolest experience in error handling

Add dependency

dependencies:
  talker: ^5.1.20

Easy to use

You can use Talker instance everywhere in your app Simple and concise syntax will help you with this

  import 'package:talker/talker.dart';

  final talker = Talker();

  /// Just logs
  talker.warning('The pizza is over 😥');
  talker.debug('Thinking about order new one 🤔');

  // Handling Exception's and Error's
  try {
    throw Exception('The restaurant is closed ❌');
  } catch (e, st) {
    talker.handle(e, st);
  }

  /// Just logs
  talker.info('Ordering from other restaurant...');
  talker.info('Payment started...');
  talker.good('Payment completed. Waiting for pizza 🍕');

More examples you can get there

⚙️ Customization

Configure the error handler and logger for yourself

final talker = Talker(
    settings: const TalkerSettings(
      /// You can enable/disable all talker processes with this field
      enabled: true,
      /// You can enable/disable saving logs data in history
      useHistory: true,
      /// Length of history that saving logs data
      maxHistoryItems: 100,
      /// You can enable/disable console logs
      useConsoleLogs: true,
    ),
    /// Setup your implementation of logger
    logger: TalkerLogger(),
    ///etc...
  );

More examples you can get here

Custom logs

With Talker you can create your custom log message types. And you have full customization control over them!

class YourCustomLog extends TalkerLog { 
    YourCustomLog(String super.message); 

    /// Log title 
    static get getTitle => 'Custom';

    /// Log key 
    static get getKey => 'custom_log_key';

    /// Log color 
    static get getPen => AnsiPen()..yellow(); 

    /// The following overrides are required because the base class expects instance getters,
    /// but we use static getters to allow for easy customization and reuse of colors, titles, and keys.
    /// This approach works around limitations in the base class API, which does not support passing custom values
    /// directly to the constructor or as parameters, so we override the instance getters to return the static values.
    @override 
    String get title => getTitle; 

    @override 
    String get key => getKey; 

    @override 
    AnsiPen get pen => getPen; 
 } 

final talker = Talker();
talker.logCustom(YourCustomLog('Something like your own service message'));

Change log colors

Starting 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 😁

The map is now structured as {String: AnsiPen}.

String Key

The String key serves as an identifier for a specific log type (e.g., HTTP, error, info, etc.).

  • Default log types are accessible via the key field in the TalkerLogType enum.
  • Developers can also define custom log pen by providing their own string keys, like 'custom_log_key'.
final talker = Talker(
  settings: TalkerSettings(
    colors: {
      // Colors for default log types can be defined with AnsiPen
      TalkerLogType.httpResponse.key: AnsiPen()..red(),
      TalkerLogType.error.key: AnsiPen()..green(),
      TalkerLogType.info.key: AnsiPen()..blue(),

      // Custom Logs can be defined

      // ... from the custom log's key name
      'custom_log_key': AnsiPen()..yellow(),

      // ... or from the variable
      YourCustomLog.getKey: AnsiPen()..yellow(),

      // ... or using the variable and the previously defined custom color for conformity
      YourCustomLog.getKey: YourCustomLog.getPen
    },
  ),
);

Talker have default color scheme. You can check it in TalkerSettings class

Change log titles

Starting 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.

The map is now structured as {String: AnsiPen}.

String Key

The String key serves as an identifier for a specific log type (e.g., HTTP, error, info, etc.).

  • Default log types are accessible via the getKey field in the TalkerLogType enum.
  • Developers can also define custom log title by providing their own string keys, like 'custom_log_key'.
final talker = Talker(
  settings: TalkerSettings(
    titles: {
      // Titles for default log types can be defined with strings
      TalkerLogType.exception.key: 'Whatever you want',
      TalkerLogType.error.key: 'E',
      TalkerLogType.info.key: 'i',

      // Custom Logs can be defined

      // ... from the custom log's key name
      'custom_log_key': "new custom title!",

      // ... or from the variable
      YourCustomLog.getKey: "new custom title!",

      // ... or using the variable and the previously defined custom title for conformity
      YourCustomLog.getKey: YourCustomLog.getTitle      
    },
  ),
);

Talker have default titles scheme. You can check it in TalkerSettings class

TalkerObserver

TalkerObserver is a mechanism that allows observing what is happening inside Talker from the outside.

import 'package:talker/talker.dart';

class ExampleTalkerObserver extends TalkerObserver {
  ExampleTalkerObserver();

  @override
  void onError(TalkerError err) {
    /// Send data to your error tracking system like Sentry or backend
    super.onError(err);
  }

  @override
  void onException(TalkerException exception) {
    /// Send Exception to your error tracking system like Sentry or backend
    super.onException(exception);
  }

  @override
  void onLog(TalkerDataInterface log) {
    /// Send log message to Grafana or backend
    super.onLog(log);
  }
}

final observer = ExampleTalkerObserver();
final talker = Talker(observer: observer);

You can use it to transmit data about logs to external sources such as Crashlytics, Sentry, Grafana, or your own analytics service, etc.

Talker Flutter

Get Started Flutter

Talker 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.

Add dependency

dependencies:
  talker_flutter: ^5.1.20

Setup

import 'package:talker_flutter/talker_flutter.dart';

final talker = TalkerFlutter.init();

// Handle exceptions and errors
try {
  // your code...
} catch (e, st) {
    talker.handle(e, st, 'Exception with');
}

// Log your app info
talker.info('App is started');
talker.critical('❌ Houston, we have a problem!');
talker.error('🚨 The service is not available');

❗️ Log messages integrity

Most 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...

Talker uses the optimal method for logging depending on the Operating system on which it runs

But to do this, you need to use the initialization given in the example. Only with TalkerFlutter.init()

As 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

TalkerScreen

Often you need to check what happening in the application when there is no console at hand. There is a TalkerScreen widget from talker_flutter package for this situations.

For better understanding how it works check Web Demo page

TalkerScreen TalkerFilter TalkerActions TalkerSettings

Easy to use

You can use TalkerScreen everywhere in your app At Screen, BottomSheet, ModalDialog, etc...

import 'package:talker_flutter/talker_flutter.dart';

final talker = TalkerFlutter.init();

Navigator.of(context).push(
  MaterialPageRoute(
    builder: (context) => TalkerScreen(talker: talker),
  )
);

See more in TalkerScreen usage example

Customization

Starting 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 😁

How to set custom colors ?

To set your custom colors, you need to pass a TalkerScreenTheme object to the TalkerScreen constructor, with a Map containing the desired colors.

The 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.

import 'package:talker_flutter/talker_flutter.dart';

final talker = TalkerFlutter.init();

TalkerScreen(
  talker: talker,
  theme: const TalkerScreenTheme(
    logColors: {

      // Default log type colors can be overridden from the color object
      TalkerLogType.httpResponse.key: Color(0xFF26FF3C),
      // ... or from flutter material colors
      TalkerLogType.error.key: Colors.redAccent,
      // ... or from ARGB values
      TalkerLogType.info.key: Color.fromARGB(255, 0, 255, 247),

      // Custom logs can override their terminal colors 
      
      // ... using the key string
      'custom_log_key': Colors.green,
      
      // ... or from the variable
      YourCustomLog.getKey: Colors.green,

      // ... but they cannot use the previously defined color from the custom log object,
      // ... because flutter doesn't display ansi colors in widgets.
      // ... However, you can use material colors, the color object, or ARGB values for them
      YourCustomLog.getKey: Color(0xFF26FF3C)
    },
  )
)

TalkerScreenTheme

You can set custom backagroud, card and text colors for TalkerScreen with TalkerScreenTheme

TalkerScreenTheme(
  cardColor: Colors.grey[700]!,
  backgroundColor: Colors.grey[800]!,
  textColor: Colors.white,
  logColors: {
    /// Your logs colors...
  },
)

TalkerRouteObserver

Observer for a navigator. If you want to keep a record of page transitions in your application, you've found what you're looking for.

You can use TalkerRouteObserver with any routing package From auto_route to basic Flutter Navigator

Navigator

final talker = Talker();

MaterialApp(
  navigatorObservers: [
    TalkerRouteObserver(talker),
  ],
)

auto_route

final talker = Talker();

MaterialApp.router(
  routerDelegate: AutoRouterDelegate(
    appRouter,
    navigatorObservers: () => [
      TalkerRouteObserver(talker),
    ],
  ),
),

auto_route v7

final talker = Talker();

MaterialApp.router(
  routerConfig: _appRouter.config(
    navigatorObservers: () => [
      TalkerRouteObserver(talker),
    ],
  ),
),

go_router

final talker = Talker();

GoRouter(
  observers: [TalkerRouteObserver(talker)],
)

TalkerMonitor

If you want to check the status of your application in a short time TalkerMonitor will be the best solution for you

Monitor is a filtered quick information about http requests, exceptions, errors, warnings, etc... count

You will find Monitor at the TalkerScreen page

For better understanding how it works check Web Demo page

TalkerWrapper

In addition talker_flutter is able to show default and custom error messages and another status messages via TalkerWrapper

import 'package:talker_flutter/talker_flutter.dart';

final talker = TalkerFlutter.init();

TalkerWrapper(
  talker: talker,
  options: const TalkerWrapperOptions(
    enableErrorAlerts: true,
  ),
  child: /// Application or the screen where you need to show messages
),

More Features And Examples

Custom UI error messages

In order to understand in more details - you can check this article "Showing Flutter custom error messages"

TalkerWrapper usage example

ShopApp example

See full application example with BLoC and navigation here

The talker_flutter package have a lot of another widgets like TalkerBuilder, TalkerListener, etc. You can find all of them in code documentation.

Integrations

In addition to the basic functionality, talker was conceived as a tool for creating lightweight loggers for the main activities of your application

You can use ready out of the box packages like talker_dio_logger, talker_bloc_logger and talker_riverpod_logger or create your own packages.

Talker Dio Logger

Lightweight, simple and pretty solution for logging if your app use dio as http-client

This is how the logs of your http requests will look in the console

Getting started

Follow these steps to use this package

Add dependency

dependencies:
  talker_dio_logger: ^5.1.20

Usage

Just add TalkerDioLogger to your dio instance and it will work

final dio = Dio();
dio.interceptors.add(
    TalkerDioLogger(
        settings: const TalkerDioLoggerSettings(
          printRequestHeaders: true,
          printResponseHeaders: true,
          printResponseMessage: true,
        ),
    ),
);

Customization

To provide hight usage exp here are a lot of settings and customization fields in TalkerDioLoggerSettings. You can setup all wat you want. For example:

Off/on http request or reposnse logs

You can toggle reponse / request printing and headers including

final dio = Dio();
dio.interceptors.add(
    TalkerDioLogger(
        settings: const TalkerDioLoggerSettings(
          // All http responses enabled for console logging
          printResponseData: true,
          // All http requests disabled for console logging
          printRequestData: false,
          // Reposnse logs including http - headers
          printResponseHeaders: true,
          // Request logs without http - headersa
          printRequestHeaders: false,
        ),
    ),
);

Change http logs colors

Setup your custom http-log colors. You can set color for requests, responses and errors in TalkerDioLoggerSettings

TalkerDioLoggerSettings(
  // Blue http requests logs in console
  requestPen: AnsiPen()..blue(),
  // Green http responses logs in console
  responsePen: AnsiPen()..green(),
  // Error http logs in console
  errorPen: AnsiPen()..red(),
);

Filter http logs

For example if your app has a private functionality and you don't need to store this functionality logs in talker - you can use filters

TalkerDioLoggerSettings(
  // All http request without "/secure" in path will be printed in console 
  requestFilter: (RequestOptions options) => !options.path.contains('/secure'),
  // All http responses with status codes different than 301 will be printed in console 
  responseFilter: (response) => response.statusCode != 301,
)

Using with Talker

You can add your talker instance for TalkerDioLogger if your app already uses Talker. In this case, all logs and errors will fall into your unified tracking system

final talker = Talker();
final dio = Dio();
dio.interceptors.add(TalkerDioLogger(talker: talker));

Talker BLoC Logger

Lightweight, simple and pretty solution for logging if your app use BLoC as state management

This is how the logs of your BLoC's event calling and state emits will look in the console

Getting started

Follow these steps to use this package

Add dependency

dependencies:
  talker_bloc_logger: ^5.1.20

Usage

Just set TalkerBlocObserver as Bloc.observer field and it will work

import 'package:talker_bloc_observer/talker_bloc_observer.dart';

Bloc.observer = TalkerBlocObserver();

Customization

To provide hight usage exp here are a lot of settings and customization fields in TalkerBlocLoggerSettings. You can setup all wat you want. For example:

Off/on events, transitions, changes, creation, close

You can toggle all bloc event types printing

Bloc.observer = TalkerBlocObserver(
    settings: TalkerBlocLoggerSettings(
      enabled: true,
      printChanges: true,
      printClosings: true,
      printCreations: true,
      printEvents: true,
      printTransitions: true,
    ),
  );

Full/truncated state and event data

You can choose to have the logs of events and states in the BLoC displayed in the console in either full or truncated form

Bloc.observer = TalkerBlocObserver(
    settings: TalkerBlocLoggerSettings(
      printEventFullData: false,
      printStateFullData: false,
    ),
  );

Filter bloc logs

You can output logs to the console for specific events and states only, using a filter

Bloc.observer = TalkerBlocObserver(
    settings: TalkerBlocLoggerSettings(
      // If you want log only AuthBloc transitions
      transitionFilter: (bloc, transition) =>
          bloc.runtimeType.toString() == 'AuthBloc',
      // If you want log only AuthBloc events
      eventFilter: (bloc, event) => bloc.runtimeType.toString() == 'AuthBloc',
    ),
  );

Using with Talker!

You can add your talker instance for TalkerBlocLogger if your Appication already uses Talker.

In this case, all logs and errors will fall into your unified tracking system

import 'package:talker_bloc_observer/talker_bloc_observer.dart';
import 'package:talker/talker.dart';

final talker = Talker();
Bloc.observer = TalkerBlocObserver(talker: talker);

Talker Riverpod Logger

Lightweight, simple and pretty solution for logging if your app use Riverpod as state management

This is how the logs of your Riverpod's event calling and state emits will look in the console

Getting started

Follow these steps to use this package

Add dependency

dependencies:
  talker_riverpod_logger: ^5.1.20

Usage

Just pass TalkerRiverpodObserver to either ProviderScope or ProviderContainer and it will work

import 'package:talker_riverpod_logger/talker_riverpod_logger.dart';

runApp(
  ProviderScope(
    observers: [
      TalkerRiverpodObserver(),
    ],
    child: MyApp(),
  )
);

or

import 'package:talker_riverpod_logger/talker_riverpod_logger.dart';

final container = ProviderContainer(
  observers: [
    TalkerRiverpodObserver(),
  ],
);

Customization

To provide hight usage exp here are a lot of settings and customization fields in TalkerRiverpodLoggerSettings. You can setup all wat you want. For example:

Off/on events, add, update, dispose, fail

You can toggle all riverpod event types printing

TalkerRiverpodObserver(
  settings: TalkerRiverpodLoggerSettings(
    enabled: true,
    printProviderAdded: true,
    printProviderUpdated: true,
    printProviderDisposed: true,
    printProviderFailed: true,
  ),
)

Full/truncated state data

You can choose to have the logs of states in the Riverpod displayed in the console in either full or truncated form

TalkerRiverpodObserver(
  settings: TalkerRiverpodLoggerSettings(
    printStateFullData: false,
  ),
)

Filter Riverpod logs

You can output logs to the console for specific events only, using a filter

TalkerRiverpodObserver(
  settings: TalkerRiverpodLoggerSettings(
    // If you want log only AuthProvider events
      eventFilter: (provider) => provider.runtimeType == 'AuthProvider<User>',
  ),
)

Using with Talker!

You can add your talker instance for TalkerRiverpodLogger if your Appication already uses Talker.

In this case, all logs and errors will fall into your unified tracking system

import 'package:talker_riverpod_logger/talker_riverpod_logger.dart';
import 'package:talker/talker.dart';

final talker = Talker();

runApp(
  ProviderScope(
    observers: [
      TalkerRiverpodObserver(
        talker: talker,
      ),
    ],
    child: MyApp(),
  )
);

or

import 'package:talker_riverpod_logger/talker_riverpod_logger.dart';
import 'package:talker/talker.dart';

final talker = Talker();

final container = ProviderContainer(
  observers: [
    TalkerRiverpodObserver(
      talker: talker,
    ),
  ],
);

Talker Chopper Logger

A lightweight, straightforward, and visually appealing logging solution for apps that use Chopper as an HTTP client.

This is how the logs of your http requests will look in the console

Getting Started

Follow these steps to use this package

Add dependency

dependencies:
  talker_chopper_logger: ^5.1.20

Usage

Simply include the TalkerChopperLogger in your Chopper client’s interceptors list to enable it.

final client = ChopperClient(
  /// ... other chopper settings
  interceptors: [
    TalkerChopperLogger(
      settings: const TalkerChopperLoggerSettings(
        printRequestHeaders: true,
        printResponseHeaders: true,
        printResponseMessage: true,
      ),
    ),
  ],
);

Customization

To offer extensive functionality, TalkerChopperLoggerSettings provides numerous configuration settings and customization options. You can adjust everything to suit your needs. For example:

Enable or disable HTTP request or response logs

You can toggle response / request printing and headers including

final client = ChopperClient(
  /// ... other chopper settings
  interceptors: [
    TalkerChopperLogger(
      talker: _talker,
      settings: const TalkerChopperLoggerSettings(
        // All HTTP responses enabled for console logging
        printResponseData: true,
        // All HTTP requests disabled for console logging
        printRequestData: false,
        // Response logs including HTTP - headers
        printResponseHeaders: true,
        // Request logs without HTTP - headers
        printRequestHeaders: false,
      ),
    ),
  ],
);

Print HTTP request curl command

You can print the curl command for the HTTP request in the console. This is useful for debugging and testing purposes.

final client = ChopperClient(
  /// ... other chopper settings
  interceptors: [
    TalkerChopperLogger(
      talker: _talker,
      settings: const TalkerChopperLoggerSettings(
        // Print curl command for HTTP request
        printRequestCurl: true,
      ),
    ),
  ],
);

Hiding sensitive HTTP request headers

You can hide sensitive HTTP request headers such as Authorization or Cookie in the console logs. This is useful for security purposes.

final client = ChopperClient(
  /// ... other chopper settings
  interceptors: [
    TalkerChopperLogger(
      talker: _talker,
      settings: const TalkerChopperLoggerSettings(
        printRequestHeaders: true,
        printResponseHeaders: true,
        // Hide sensitive HTTP request headers
        hiddenHeaders: {
          'authorization',
          'cookie',
        },
      ),
    ),
  ],
);

Change HTTP logs colors

Customize your HTTP log colors by defining specific colors for requests, responses, and errors in TalkerChopperLoggerSettings

TalkerChopperLoggerSettings(
  // Blue HTTP requests logs in console
  requestPen: AnsiPen()..blue(),
  // Green HTTP responses logs in console
  responsePen: AnsiPen()..green(),
  // Error HTTP logs in console
  errorPen: AnsiPen()..red(),
);

Filter HTTP logs

For instance, if your app includes private functionality that you prefer not to log with talker, you can apply filters.

TalkerChopperLoggerSettings(
  // All http request without "/secure" in path will be printed in console 
  requestFilter: (Request request) => !request.url.path.contains('/secure'),
  // All http responses with status codes different than 301 will be printed in console 
  responseFilter: (Response response) => response.statusCode != 301,
)

Using with existing Talker instance

If your application already uses Talker, simply inject your Talker instance into TalkerChopperLogger so that all logs and errors integrate into your centralized tracking system.

final talker = Talker();
final client = ChopperClient(
  /// ... other chopper settings
  interceptors: [
    TalkerChopperLogger(
      talker: talker,
      settings: const TalkerChopperLoggerSettings(
        printRequestHeaders: true,
        printResponseHeaders: true,
        printResponseMessage: true,
      ),
    ),
  ],
);

Talker GRPC Logger

Getting started

Follow these steps to use this package

Add dependency

dependencies:
  talker_grpc_logger: ^5.1.20

Usage

Create an interceptor and instrument your RPC client:

import 'package:grpc/grpc.dart';
import 'package:talker_grpc_logger/talker_grpc_logger.dart';

void main() {
  late final channel = GrpcOrGrpcWebClientChannel.toSingleEndpoint(
      host: 'localhost',
      port: 50051,
  );

  // Generate your RPC client as usual, and use the interceptor to log the requests and responses.
  late final rpcClient = YourRPCClient(channel, interceptors: [
    TalkerGrpcLogger()
  ]);
}

Using with Talker

Very similar to the section above, just pass a Talker instance to the interceptor:

import 'package:grpc/grpc.dart';
import 'package:talker_flutter/talker_flutter.dart';
import 'package:talker_grpc_logger/talker_grpc_logger.dart';

void main() {
  // Not mandatory, but useful to see the grpc logs in the Talker screen
  final talker = TalkerFlutter.init();

  // Define port and host as you see fit
  var host = 'localhost';
  var port = 50051;

  // transportSecure needs to be true when talking to a server through TLS.
  // This can be disabled for local development.
  // GrpcOrGrpcWebClientChannel is a channel type compatible with web and native. There
  // are other channel types available for each platform.
  late final channel = GrpcOrGrpcWebClientChannel.toSingleEndpoint(
      host: host,
      port: port,
      transportSecure: host == 'localhost' ? false : true);


  final List<ClientInterceptor> interceptors = [
    TalkerGrpcLogger(talker: talker)
  ];

  // Generate your RPC client as usual, and use the interceptor to log the requests and responses.
  late final rpcClient = YourRPCClient(channel, interceptors: interceptors);
}

Token obfuscation

TalkerGrpcLogger will obfuscate bearer tokens by default. It'll look at the metadata of the request and obfuscate the authorization header. It'll look like Bearer [obfuscated] in the logs. It is highly recommended to keep this option enabled. If you want to disable it, you can pass obfuscateToken: false:

TalkerGrpcLogger(talker: talker, obfuscateToken: true)

Crashlytics integration

If you add CrashlyticsTalkerObserver to your application, you will receive notifications about all application errors in the Crashlytics dashboard.

Additionally, you can configure it to send only specific errors to Crashlytics from within TalkerObserver.

import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:talker/talker.dart';

class CrashlyticsTalkerObserver extends TalkerObserver {
  CrashlyticsTalkerObserver();

  @override
  void onError(err) {
      FirebaseCrashlytics.instance.recordError(
        err.error,
        err.stackTrace,
        reason: err.message,
      );
  }

  @override
  void onException(err) {
      FirebaseCrashlytics.instance.recordError(
        err.exception,
        err.stackTrace,
        reason: err.message,
      );
  }
}

final crashlyticsTalkerObserver = CrashlyticsTalkerObserver();
final talker = Talker(observer: crashlyticsTalkerObserver);

Features list

✅ Logging

  • ✅ Filtering

  • ✅ Formatting

  • ✅ Color logs

  • ✅ LogLevels (info, verbose, warning, debug, error, critical, fine, good)

  • ✅ Customization for filtering, formatting and colors

  • 🚧 Separation from system's and another flutter logs

  • 🚧 Collapsible feature for huge logs

  • 🚧 Logs grouping

✅ Errors handling

  • ✅ Errors and Exceptions identification
  • ✅ StackTrace
  • 🚧 Error level identification

✅ Flutter

  • ✅ Application logs sharing

  • ✅ HTTP cals logging

  • ✅ TalkerScreen - Showing logs list in Flutter app UI

  • ✅ TalkerMonitor - A short summary of your application status. How much errors, how much warnings in Flutter app UI

  • ✅ TalkerRouteObserver - router logging (which screen is opened, which is closed)

  • ✅ TalkerWrapper - Showing errors and exceptions messages at UI

  • ✅ TalkerListener - Listen logs data at application UI

  • ✅ TalkerBuilder - UI builder to Logs List showing custom UI

  • ✅ Android/Windows/Web application logs colors

  • ✅ iOS/MacOS application logs colors

  • ✅ Talker configuration chnages from TalkerFlutter

✅ Logs and errors history saving

✅ TalkerObserver - handle all logs, errors, exceptions for integrations (Sentry, Crashlytics)

Coverage

Error handling is a very important task You need to choose carefully if you want to use a package for exceptions handling solution Therefore, the project is 100% covered by tests

Additional information

The project is under development and ready for your pull-requests and issues 👍 Thank you for support ❤️

Contributors

For help getting started with 😍 Flutter, view online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

Changelog

5.1.20

  • [common] Update CI/CD dependencies
  • [common] Update Gradle to v9.6.1
  • [common] Update plugin org.jetbrains.kotlin.android to v2.4.10
  • [common] Update plugin org.jetbrains.kotlin.android to v2
  • [common] Update plugin com.android.application to v9.3.0

Thanks to Frezyx

5.1.19

  • [talker_flutter] Bump path_provider version from 2.1.4 to 2.1.6
  • [talker_flutter] Bump share_plus version from 3.0.0 to 3.2.0
  • [talker_flutter] Bump web version from 1.1.0 to 1.1.1

Thanks to Frezyx

5.1.18

  • [common] Update plugin com.android.application to v9.2.1
  • [common] Update Gradle to v9.5.0

Thanks to renovatebot

5.1.17

  • [talker_flutter] chore: bump share_plus from ^12.0.1 to ^13.0.0

Thanks to PAzter1101

5.1.16

  • [talker_riverpod_logger] fix: correct Riverpod integration package import in README

Thanks to Copilot

5.1.15

  • [talker] Add custom pretty json formatter and strip quotes
  • [talker_dio_logger] Add new pretty json formatter
  • [talker_chopper_logger] Add new pretty json formatter
  • [talker_http_logger] Add new pretty json formatter

Thanks to westito

5.1.14

  • [common] Update plugin com.android.application to v9.0.1
  • [common] Update plugin org.jetbrains.kotlin.android to v2.3.10
  • [common] Update Gradle to v9.3.1

Thanks to renovatebot

5.1.13

  • [common] Fix trailing curly bracket in stacktrace output

Thanks to Copilot

5.1.12

  • [common] Update Gradle to v9.3.0
  • [common] Update plugin com.android.application to v9

Thanks to renovatebot

5.1.11

  • [talker_flutter] Update plugin org.jetbrains.kotlin.android to v2.3.0
  • [talker_flutter] Update Gradle to v9.2.1

Thanks to renovatebot

5.1.10

  • [talker_flutter] Fix WebAssembly incompatible cast in download_logs_web.dart

Thanks to JanKubicek, Copilot

5.1.9

  • [talker_flutter] Fix TalkerScreen stack trace display for TalkerLog objects

Thanks to Copilot

5.1.8

  • [talker_dio_logger] Add comprehensive test coverage for FormData logging support

Thanks to Copilot

5.1.7

  • [talker_grpc_logger] Update dependency grpc to v5.1.0
  • [common] Update actions/cache action to v5

Thanks to apps/renovate

5.1.6

  • [talker_dio_logger] Fix printResponseTime display in TalkerScreen showing incorrect/increasing values

Thanks to Copilot

5.1.5

  • [talker_grpc_logger] Update dependency grpc to v5

Thanks to renovatebot

5.1.4

  • [talker_flutter] Fix Share button on iOS bump share_plus dependency to version 12.0.1

Thanks to Memet18

5.1.3

  • [talker_flutter] Fix TalkerRouteObserver to log routes created with pageBuilder

Thanks to copilot-swe-agent[agent]

5.1.2

  • [talker_chopper_logger] Fix tests and update example

Thanks to Frezyx

5.1.1

  • [talker] chore(deps): update kotlin monorepo
  • [talker] Bump actions/checkout from 4 to 6

Thanks to renovate

5.1.0

  • [talker_riverpod_logger] Riverpod 3 mutations support

Thanks to lucavenir

5.0.2

  • [talker_riverpod_logger] Bump riverpod version to 3.0.0
  • adopt Riverpod 3 provider observer signatures with ProviderObserverContext
  • switch to NotifierProvider.autoDispose and ProviderContainer.test from Riverpod 3 APIs

Thanks to lucavenir

5.0.1

  • [talker_flutter] Bump share_plus version to 12.0.0
  • [talker] Fix talker.handle docs to use stack trace before error message

Thanks to Ali-Toosi

5.0.0

    • [talker_chopper_logger] Release logger for Chopper http clint package
  • [talker_grpc_logger] Release logger for gRPC package

  • [talker] Add registeredKeys field into TalkerSettings for third-party packages

  • [talker] Remove deprecated titles and types from TalkerFilter

  • [talker] Add enabledKeys and disabledKeys fields into TalkerFilter to replace old filtering logic

  • [talker] Upgrade BaseTalkerFilter class - add new filtering way by List keys field

  • [talker] Deprecate titles and types fields from BaseTalkerFilter

  • [talker_flutter] Add TalkerFilter configuration on TalkerScreen

  • [talker_dio_logger] Add TalkerKeys registration

  • [talker_http_logger] Add TalkerKeys registration

  • [talker_bloc_logger] Add TalkerKeys registration

  • [talker_riverpod_logger] Add TalkerKeys registration

  • [talker_dio_logger] Remove unused addonId field from dio_logger

  • [talker_dio_logger] Add FormData parser for request logs data

  • [talker_dio_logger] Fix FormDatas contentType field

Thanks to Frezyx

5.0.0-dev.16

  • [common] Update dependency lints to v6
  • [common] Optimize images

Thanks to renovatebot

5.0.0-dev.15

    • [talker_grpc_logger] Add test and github workflow

Thanks to Frezyx

5.0.0-dev.14

    • [talker_grpc_logger] Add dart-style documentation

Thanks to Frezyx

5.0.0-dev.13

  • [talker_grpc_logger] Initial release with general package version
  • [talker] Add grpc keys into TalkerKey class

Thanks to Frezyx

5.0.0-dev.12

    • chore(deps): update dependency gradle to v9
  • chore(deps): update plugin com.android.application to v8.12.0

Thanks to renovate

5.0.0-dev.11

    • [talker_chopper_logger] Add TalkerKeys registration

Thanks to Frezyx

5.0.0-dev.10

    • [talker_chopper_logger] Release logger for Chopper http clint package

Thanks to techouse

5.0.0-dev.9

    • [talker_http_logger] Add TalkerKeys registration

Thanks to Frezyx

5.0.0-dev.8

    • [talker] Sync release and prerelease versions

Thanks to Frezyx

5.0.0-dev.7

    • [talker_dio_logger] Fix FormDatas contentType field

Thanks to Frezyx

5.0.0-dev.6

    • [talker_dio_logger] Add FormData parser for request logs data

Thanks to Frezyx

5.0.0-dev.5

  • [talker] Add registeredKeys field into TalkerSettings for third-party packages
  • [talker] Remove deprecated titles and types from TalkerFilter
  • [talker] Add enabledKeys and disabledKeys fields into TalkerFilter to replace old filtering logic
  • [talker_flutter] Add TalkerFilter configuration on TalkerScreen
  • [talker_dio_logger] Add TalkerKeys registration
  • [talker_http_logger] Add TalkerKeys registration
  • [talker_bloc_logger] Add TalkerKeys registration
  • [talker_riverpod_logger] Add TalkerKeys registration

Thanks to Frezyx

5.0.0-dev.4

  • [talker_dio_logger] Remove unused addonId field from dio_logger

Thanks to Frezyx

5.0.0-dev.3

  • [talker] Upgrade BaseTalkerFilter class - add new filtering way by List keys field
  • [talker] Deprecate titles and types fields from BaseTalkerFilter

Thanks to Frezyx

5.0.0-dev.2

  • [talker] Fix errors and exceptions filtering for observer

Thanks to Frezyx

5.0.0-dev.1

  • [talker] Brand new simplified TalkerKeys API (String Log key)

Thanks to Frezyx

4.9.3

  • [talker] chore(deps): update dependency gradle to v8.14.3 [talker] chore(deps): update plugin com.android.application to v8.11.1

Thanks to renovate

4.9.2

  • [talker_dio_logger] Add response data converter responseDataConverter field for TalkerDioLoggerSettings

Thanks to zhengbomo

4.9.1

  • [talker_http_logger] chore(deps): update plugin org.jetbrains.kotlin.android to v2
  • [talker_http_logger] chore(deps): update plugin com.android.application to v8.10.1

Thanks to renovate

4.9.0

  • [talker_flutter] chore: update share_plus to v11.0.0

Thanks to jeroenbell

4.8.4

  • [talker_riverpod_logger] add family arguments to the logs

Thanks to lucavenir

4.8.3

  • [talker_riverpod_logger] add an error filter

Thanks to lucavenir

4.8.2

  • [talker] Add CustomLog Documentation
  • [example] Update plugin com.android.application to v8.10.1
  • [example] Update dependency gradle to v8.14.1

Thanks to MeyerOppelt

4.8.1

  • [talker_dio_logger] Add logging of request`s extra

Thanks to lucavenir

4.8.0

  • [talker_flutter] Add custom settings section

Thanks to zvikarp

4.7.9

  • [talker_bloc_logger] show full data of Bloc logs in Flutter Talker

Thanks to Mooyeee

4.7.8

  • [talker_flutter] fix: respect custom TalkerLogger output in TalkerFlutter.init

Thanks to techouse

4.7.7

  • [talker_logger] chore: update logger output type for improved clarity

Thanks to techouse

4.7.6

  • [talker_flutter] fix: propagate itemsBuilder to TalkerView

Thanks to AhmedEzio47

4.7.5

  • Update example application dependencies

Thanks to apps/renovate

4.7.4

  • [talker_dio_logger] Add logLevel field to provide in all dIo logs

Thanks to mylukin

4.7.3

  • [talker_flutter] Fixed missing info and detailed message for exceptions

Thanks to salarshad

4.7.2

  • [talker_dio_logger] Add response time to logs
  • Add printResponseTime field for TalkerDioLoggerSettings to turn on/off response time printing

Thanks to troyanskiy

4.7.1

  • [talker_flutter] Fix scroll issue and widget usability with high text scale

Thanks to federicoviceconti

4.7.0

  • [talker_flutter] Remove deprecated dart:html
  • [talker_logger] Remove deprecated dart:html

Thanks to Mooyeee

4.6.14

  • [talker] Fix search filtering rules Now titles && types && searchQuery replace titles || types || searchQuery logic

Thanks to N1X41

4.6.13

  • [talker_dio_logger] Fix hiddenHeaders alters the request headers

Thanks to amrgetment

4.6.12

  • [talker_flutter] Rename conflict extension firstWhereOrNull from collection

Thanks to Bogdan778

4.6.11

  • [talker_dio_logger] Add printResponseRedirects field into TalkerDioLoggerSettings to print Response redirects

Thanks to federicoviceconti

4.6.10

  • [talker_flutter] Fix search textfield background color become white in light theme

Thanks to asadman1523

4.6.9

  • [talker] Fix CustomLogs pen field ignoring by console issue#313

4.6.8

  • [talker_dio_logger] Fix substitution of hidden headers hiddenHeaders field in TalkerDioLoggerSettings

4.6.7

  • [talker_http_logger] Add settings TalkerLoggerSettings field to setup http logger settings
  • [talker_http_logger] Add hiddenHeaders field in TalkerLoggerSettings to hide specific and sensitive http logger headers

Thanks to Ilushnik

4.6.6

  • [talker_dio_logger] Add hiddenHeaders field in TalkerDioLoggerSettings to hide specific and sensitive dio logger headers

Thanks to Ilushnik

4.6.5

  • [talker_bloc_logger] Bump bloc version to 9.0.0

4.6.4

  • [talker_flutter] Proper migration of support to the web using both html and wasm
  • [talker_flutter] Update example dart sdk version to '>=3.6.0 <4.0.0'

Thanks to yelmuratoff

4.6.3

  • [talker_flutter] Correction the import file name in the talker_flutter log downloader web

Thanks to samanzamani

4.6.2

  • [talker_flutter] Migrate downloadLogs export to new js_interop package

4.6.1

  • [talker_flutter] Add new web api support for download logs file

4.6.0

  • [talker_flutter] Add support WASM for Flutter Web
  • [talker_flutter] Support flutter 3.27, remove deprecations

Thanks to abdelaziz-mahdy

4.5.6

  • [talker_flutter] Add copy functionality for filtered logs

Thanks to abdelaziz-mahdy

4.5.5

  • [talker] Add history logging filter by LogLevel
  • [talker_flutter] Fix TalkerScreen does not respect configured LogLevel setting

Thanks to mylukin

4.5.4

  • [talker_flutter] Add isLogsExpanded and isLogOrderReversed flags to TalkerScreen widget

Thanks to Ilushnik

4.5.3

  • [talker_http_logger] Add HttpErrorLog for wrong http statuses

Thanks to yelmuratoff

4.5.2

  • [talker_flutter] Add fallback Flutter screen log card color by LogLevel

4.5.1

  • [talker_flutter] Fix mapping LogColors to Flutter Color (Logs screen)

4.5.0

More Flexible Interaction with Custom Logs

  • BREAKING [talker] Change the type of colors parameter in the TalkerSettings class from Map<TalkerLogType, AnsiPen>? to Map<String, AnsiPen>?. Custom colors must now use a string key for log types.
  • BREAKING [talker] Change the type of titles parameter in the TalkerSettings class from Map<TalkerLogType, String>? to Map<String, String>?. Custom titles must now use a string key for log types.
  • BREAKING [talker_flutter] Change the type of colors parameter in the TalkerScreenTheme class from Map<TalkerLogType, Colors>? to Map<String, Colors>?. Custom colors must now use a string key for log types.
  • [talker] Add new tests and updated existing ones.
  • [talker] Update the documentation for log customization.

Thanks to yelmuratoff

4.4.7

  • [talker_dio_logger] Make encoder constant private

4.4.6

  • [talker] Reanme logTyped method to logCustom
  • [talker] Add Deprecated annotation for logTyped method

4.4.5

  • [talker_logger] Add enable option field to control log output (on talker_logger level)

Thanks to weitsai

4.4.4

  • [talker_dio_logger] Add enable option field to control log output (on talker_dio_logger level)

Thanks to weitsai

4.4.3

  • [talker_http_logger] Bump http_interceptor package version to 2.0.0

4.4.2

  • [talker] Fix provide pen color field in log() method
  • [talker] Android dependecies actualization and bug fixing in example app code

Thanks to HE-LU and venkat9507

4.4.1

  • [talker_flutter] Bump share_plus version to 10.0.1
  • [talker_flutter] Bump path_provider version to 2.1.4

4.4.0

  • [talker] Stable TimeFormat release (Support of custom time formatting for every talker package)
  • [talker_riverpod_logger] Bump version to talker common versions system

4.3.5

  • [talker_bloc_logger] Setup common time format from talker settings for Bloc logs

4.3.4

  • [talker_riverpod_logger] Duplicated state logs fixes

Thanks to ArinFaraj

4.3.3

  • [talker_bloc_logger] Fix bloc logs TimeFormat

Thanks to Mooyeee

4.3.2

  • [talker_riverpod_logger] Fix issue with display time inside riverpod package

Thanks to yelmuratoff

4.3.1

  • [talker_flutter] Fix showing times on FlutterScreen cards

Thanks to fieldOfView

4.3.0

  • [talker_flutter] Custom logs timestamp formattings

Thanks to abdelaziz-mahdy

4.2.4

  • [talker_riverpod_logger] Print missing data on TalkerScreen

Thanks to yelmuratoff

4.2.3

  • [talker_riverpod_logger] Include Provider's name in logs output

Thanks to KoheiKanagu

4.2.2

  • [talker_flutter] Support for Flutter 3.22, fix new version deprecations

4.2.1

  • [talker_dio_logger] Add missing error setting for TalkerDioLoggerSettings:
    • printErrorData
    • printErrorHeaders
    • printErrorMessage
    • errorFilter

Thanks to Ali1Ammar

4.2.0

Thanks to jbdujardin

4.1.5

  • [talker_flutter] Bump share_plus version to 9.0.0

4.1.4

  • [talker_logger] Fix default logs printing method

4.1.3

  • [talker_flutter] Bump share_plus version to 8.0.2
  • [talker_flutter] Bump path_provider version to 2.1.2

4.1.2

  • [talker_flutter] Bump group_button version to 5.3.4

4.1.1

  • Fix TalkerLog.generateTextMessage exception info missing

Thanks to heiha100

4.1.0

  • Fix Exception and StackTrace is ignored for logs
  • Fix typo at the beginning README.md
  • Fix TalkerScreen log type selector text colors

Thanks to qwadrox and Danyalo

4.0.3

  • Support web for talker and talker_logger
  • Update talker_bloc_logger README.md

Thanks to melodysdreamj and MiladAtef

4.0.2

  • Fix inconsistent colors at TalkerScreen
  • Add LogColors typedef in TalkerTheme (Map<TalkerLogType, Color>)

Thanks to XanderD99

4.0.1

Thanks to K1yoshiSho

4.0.0

  • Add ability to customize colors and titles of any Talker logs

  • Add ability to customize colors of any logs in TalkerScreen UI

  • Add TalkerLogType enum for clear differentiation of logs by types.

  • Update TalkerScreen UI (The interface is now even more user-friendly)

  • Huge documentation update

  • Make 100% test coverage of talker_bloc_logger and talker_dio_logger

  • Add expand / collapse ability for one log card

  • Packages versions synchronization (Now the versions of all core libraries will be identical)

  • BREAKING TalkerDataInterface deleted (Now base data class is TalkerData)

  • Fix: Text color not always visible issue #174

  • Add custom title format issue #170

  • Fix: Logger not resets log color issue #86

Check more details in documentation

4.0.0-dev.6

  • Make 100% tests coverage
  • Update example UI
  • Add custom log titles documentation
  • Fix TalkerScreen log colors setup
  • Fix TalkerScreenTheme textColor providing

4.0.0-dev.5

  • Huge documentation update
  • Update talker_flutter styles
  • Add expand / collapse ability for one log card
  • Add colors customization examples

4.0.0-dev.4

  • Add new tests to make 100% coverage
  • Fix linter issues

4.0.0-dev.3

  • Update talker_logger settings setup method

4.0.0-dev.2

  • Fix types and remove unused code

4.0.0-dev.1

  • First version with Logs keys implementation
  • BREAKING TalkerDataInterface deleted
  • Add new talker colors customization
  • Talker Actions UI updated

3.6.0

  • Add ability to setup custom history implementation
  • Add abstract class TalkerHistory
  • Add DefaultTalkerHistory implementation with basic (previous) functionality by default

Thanks to Ppito

3.5.7

  • Add package utils export

Thanks to Ppito

3.5.6

talker_bloc_logger

  • Add onCreate, onClose logs
  • Add printClosings printCreations settings fields (false by default)

Thanks to cem256

3.5.5

  • Add ability to set own ErrorHandler for talker instance

Thanks to Ppito

3.5.4

  • Bump share_plus package to 7.2.1

3.5.3

  • Fix the overflow issue of Talker Monitor

Thanks to Kabak-Siarhei

3.5.2

  • Bump talker version to 3.1.4
    • Pad minutes and seconds for DateTime formatter

3.5.1

  • Add TalkerRouteObsever documentatuion
  • Fix share_plus version 7.1.0

3.5.0

  • Update internal packages versions -Bump share_plus package to 8.0.0 -Bump path_provider package to 2.1.1

3.4.0

  • Bump share_plus package to 7.1.0

3.3.1

  • Update README docs and examples

3.3.0

  • Support web platform downloading logs

Thanks to Kabak-Siarhei

3.2.10

  • Add TalkerScreenTheme cardColor customization field

3.2.9

  • Fix appBarleading showing

3.2.8

  • Add appBarleading field to TalkerScreen and TalkerView constructor

3.2.7

  • Fix TalkerWrapper error looping

Thanks to s0nerik

3.2.6

  • Fix appbar icon colors
  • Rename part of internal classes

3.2.5

  • Make controller, theme, appBarTitle not required for TalkerView
  • Make TalkerScreen Stateless instead of Stateful

3.2.4

  • Fix AppBar title text color

3.2.3

  • Add TalkerView in package exports

3.2.2

  • Fix logs expanding and collapsing in TalkerView

3.2.1

  • Refactor TalkerScreen decomposition
  • Extract TalkerView, TalkerViewAppBar

3.2.0

  • Rename (fix typo) field backgroudColor -> backgroundColor
  • Fix internal and docs typos
  • Update talker version to 3.1.0
  • Update group_button version to 5.3.2

Thanks to wcoder

3.1.12

  • Remove using paddingOf to support old flutter versions

3.1.11

  • refactor and enhance UI
  • Fix typo bacgroundColor -> backgroundColor in SnackbarContent constructor
  • Add the dismissButtonText Widget to SnackbarContent
  • Add the dismissButton Widget to SnackbarContent
  • Add the titleTextStyle TextStyle to SnackbarContent
  • Add the messageTextStyle TextStyle to SnackbarContent
  • Add an onPressed callback to SnackbarContent
  • Use paddingOf instead size this method will cause the given [context] to rebuild any time that the [MediaQueryData.padding] property of the ancestor [MediaQuery] changes. Checkout the following PR for more informations about MediaQuery as InheritedModel

Thanks to jnelle

3.1.10

  • Update talker version to 3.0.5

3.1.9

  • Add topics in pubspec.yaml

3.1.8

  • Update talker version to 3.0.4

3.1.7

  • Set the exact size of the text in the search TextField
  • Fix large text in search bar

3.1.6

  • Update talker version to 3.0.2

3.1.5

  • Fix typos in package documentation

Thanks to vicenterusso

3.1.4

  • Fix TalkerScreen scrolling

3.1.3

  • Update sdk version to '>=2.15.0 <4.0.0'

3.1.2

  • Make fixed text size in talker data list

3.1.1

  • Fix TalkerFlutter output initialization

3.1.0

  • Add runTalkerZonedGuarded method to setup handle all app unhandled exceptions with one method

Thanks to zezo357

3.0.0

Lighter, simpler, more powerful

  • Big UI/UX updates. Interacting with logs from the application has become even easier now.
  • Rename TalkerHistoryBuilder -> TalkerBuilder
  • Remove old TalkerBuilder
  • Remove FlutterTalkerDataInterface and subclasses instead of TalkerDataInterface
  • Remove iconsColor field from TalkerScreenTheme
  • Remove Filter bottom sheet (now this functionality is avaliable at TalkerScreen)

3.0.0-dev.12

  • Add TalkerObserver in TalkerFlutter extension constructor

3.0.0-dev.11

  • Update talker version to 3.0.0-dev.13

3.0.0-dev.10

  • Update talker version to 3.0.0-dev.11
  • Delete LogLevel.fine deprecation usage in extensions

3.0.0-dev.9

  • Update TalkerFlutter extension (Remove deprecated fields)
  • Update talker version to 3.0.0-dev.10

3.0.0-dev.8

  • Update README, and pubspec.yaml docs

3.0.0-dev.7

  • Update talker version to ^3.0.0-dev.8
  • Fix TalkerFlutter logs colors for http and bloc logs

3.0.0-dev.6

  • Update TalkerScreen UI
  • Fix AppBar SafeArea

3.0.0-dev.5

  • Rename TalkerHistoryBuilder -> TalkerBuilder
  • Remove old TalkerBuilder

3.0.0-dev.4

  • Make loggerSettings, loggerFilter, loggerFormater, loggerOutput Deprecated Currently you can setup this felds and all other logger settings only in TalkerLogger constructor

3.0.0-dev.3

  • Update Talker screen UI
  • Remove Filter bottom sheet (now this functionality is avaliable at TalkerScreen)
  • Remove iconsColor field from TalkerScreenTheme

3.0.0-dev.2

  • Fix settings updates checking in UI
  • Update example

3.0.0-dev.1

  • Rename TalkerMonitorItem -> TalkerMonitorCard
  • Remove FlutterTalkerDataInterface and subclasses
  • Remove talker_dio_logger depencency
  • Update talker version to 3.0.0-dev.6
  • Update internal packages versions

2.4.3

  • FEAT: update path_provider version to 2.0.13

2.4.2

  • FIX: logs sharing on windows devices

Thanks to zezo357

2.4.1

  • FEAT: Update talker_dio_logger to 1.3.0 and internal packages

2.4.0

  • FEAT: Add settings bottom sheet on main screen
  • FEAT: Add talker_dio_logger settings on settings bottom sheet
  • FEAT: Make great UI improvements
  • FEAT: Setup talker_dio_logger addon functionality
  • FEAT: Make logs reversed as default

2.3.1

  • FEAT: Add initial TalkerSettings screen to interact with Talker configuration

2.3.0

  • FEAT: Add filters and fast actions for http calls monitor
  • FEAT: Expanded size of log item click zone

2.2.1

  • FIX: Fix color reset in console

Thnaks for westito

2.2.0

  • FEAT: Create FlutterTalker extensions for enable iOS/ MacOS colored logging
  • FEAT: Implement TalkerMonitor for sorting, warning, infos, verbose errors
  • FEAT: Implement Talker Http Monitor for http request-response analytics and monitoring
  • FEAT: Web demo example avaliable at frezyx.github.io/talker

2.2.0-dev.1

  • INFO: Init prerelease version
  • INFO: Add web demo example

2.1.1-dev.3

  • FEAT: TalkerMonitor sorting, warning, infos, verbose errors
  • FEAT: Talker Http Monitor for http request-response analytics and monitoring

2.1.1-dev.2

  • FEAT: Implement initial TalkerMonitor functionality

2.1.1-dev.1

  • FEAT: Create FlutterTalker extensions for enable iOS/ MacOS colored logging

2.1.1

  • FIX: TalkerFilter Cannot add to an unmodifiable list issue

Thnaks for ProjectAJ14

2.1.0+1

  • INFO: Improve README.md
  • INFO: Improve pubspec.yaml

2.1.0

  • FEAT: Implement filter for Talker constructor. Now you can filter data by logger and by talker instance as default.

2.0.6

  • FIX: Update internal packages

2.0.5

  • FIX: Analyzer issues about shareFiles method deprecation

2.0.4

  • FIX: Analyzer issues about shareFiles method deprecation

2.0.3

  • FIX: Talker logs card gaps

2.0.2

  • FIX: Ignore routes with null settings.name in TalkerRouteObserver

2.0.1

  • FIX: Logs text generation for copy and share (save to file) methods

2.0.0

  • FEAT: Update TalkerScreen actions UI
  • FEAT: Implement logs file sharing
  • FEAT: Update logs filter UI
  • INFO: Code base refactoring
  • Huge Talker update See more in releases

1.7.1

  • FIX: FlutterTalkerException, FlutterTalkerError, FlutterTalkerLog now implements FlutterTalkerDataInterface

1.7.0

  • INFO: HaveFlutterColorInterface -> TalkerFlutterAdapterInterface
  • FEAT: Implement generateFlutterTextMessage method for FlutterTalkerDataInterface, FlutterTalkerLog, FlutterTalkerError, FlutterTalkerException classes

Now you can extend your flutter app logs.

  • generateFlutterTextMessage used in TalkerScreen (UI list of logs)
  • generateTextMessage used in console logs and history

1.6.0

  • FIX: Logs cutting by flutter via print method. Now Talker constructor have output field to provide callback. For flutter applications, you need to pass debugPrint as output method See more in talker_flutter initialization on project README.md
  • INFO: Update talker to 1.3.0 version

1.5.1

  • INFO: Huge README update
  • INFO: Update talker to 1.2.0 version

1.5.0

  • FEAT: Implement TalkerHistoryBuilder widget to create your own custom designed logs UI screen
  • FEAT: Implement TalkerBuilder widget to create your own custom designed screen with last log message showing
  • INFO: Update talker to 1.1.1 version

1.4.2

  • INFO: Add TalkerScreen appBarTitle field

    Thanks to Khaoz-Topsy

1.4.1

  • INFO: Add documentation for TalkerWrapper

1.4.0

  • FEAT: Implement TalkerWrapper widget (to showing snackbars)
  • FEAT: Implement base error messages showing in UI (for user)

1.3.0

talker_logger updates:

  • FEAT: Implement ExtendedLoggerFormatter
  • FEAT: Upgrade ColoredLoggerFormatter
  • FIX: Typo Formater -> Formatter

1.2.0

  • FEAT Add default ordering setting for logs at TalkerScreen

    Thanks to jirehcwe

1.1.0

1.0.0

First stable release! 🎉

0.12.0

  • INFO Update talker version to 0.12.0

0.11.0

  • INFO Update talker version to 0.11.0

0.10.0

  • FEAT Create extended example and base example
  • FIX Make refactor in internal UI code
  • FIX Fix examples
  • INFO Update group_button version

0.9.0

  • FEAT Add expand button for hiding or revealing logs
  • FEAT Update TalkerScreen log UI
  • FIX Saving selected filters after sheet closing

0.8.1

  • talker_logger update to 0.8.0 version
  • talker_logger changes:
    • INFO: Create README with documentation and examples
    • FIX: Rename and refactor internal code
    • INFO: Add all public entities docs
    • FIX: Remove lineSymbol and maxLineWidth field from LogDetails

0.8.0

  • INFO Add all package documentation
  • INFO Update talker package to 0.8.0 version

0.6.0

  • Update internal packages

0.5.4

  • Update group_button version to 4.5.0
  • Fix issue 12

0.5.3

  • Update talker version to 0.7.0

0.5.2

  • Fix display message parsing

0.5.1

  • Update display message UI
  • Update talker version to 0.6.1

0.5.0

  • Implement UI filter for convenient work with the console in the application

0.4.1

  • Add Flutter Colors extended Talker models to customize colors of your UI logs

0.4.0

  • Update talker version to 0.5.0

0.3.0

  • Update all packages to latest version
  • Fix UI coloring

0.2.2

  • Update Talker version

0.2.1

  • Fix Talker to TalkerInterface

0.2.0

  • Add logs list copy method
  • Fix log colors

0.1.0

  • Initial version

Installing

export PUB_HOSTED_URL=https://pub.mirror.p-hatan.com
flutter pub add 'talker_flutter:5.1.20'
pubspec.yaml
name: talker_flutter
description: Advanced error handler and logger package for flutter and dart. App monitoring, logs history, report sharing, custom logs, and etc.
version: 5.1.20
homepage: https://github.com/Frezyx/talker
repository: https://github.com/Frezyx/talker
issue_tracker: https://github.com/Frezyx/talker/issues

topics:
  - logger
  - error
  - report
  - tool
  - ui

environment:
  sdk: '>=3.6.0 <4.0.0'
  flutter: '>=1.17.0'

dependencies:
  flutter:
    sdk: flutter

  talker: ^5.1.20
  group_button: ^5.3.4
  path_provider: ^2.1.6
  share_plus: ^13.2.0
  web: ^1.1.1


dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^2.0.1

flutter:

Version history

VersionPublishedArchiveSHA-256
0.2.0On demandDownload5b04f92c…08d271
0.2.1On demandDownload16fe3eb2…c5c915
0.2.2On demandDownload2540014c…f8fc09
0.3.0On demandDownload69c02387…fa3294
0.4.0On demandDownload49e626a1…fce178
0.4.1On demandDownload510beb6c…ec719a
0.5.0On demandDownload87e4fd4b…130513
0.5.1On demandDownloada6700864…9e7f9f
0.5.2On demandDownloadd21cae36…bc9540
0.5.3On demandDownload50630e8f…b1b697
0.5.4On demandDownload25a68de9…8f3c9d
0.6.0On demandDownload6a27432a…9757b7
0.8.0On demandDownload7999ea68…8a0cbc
0.8.1On demandDownloadf3b82030…8756b4
0.9.0On demandDownloadc52057d5…65cedf
0.9.0+1On demandDownloadc4ba7113…8e86c5
0.10.0On demandDownload820ae407…146438
0.11.0On demandDownload5c022b5c…726b00
0.12.0On demandDownload5ed4d253…c36492
1.0.0On demandDownload17538d24…baa9c6
1.1.0-dev.1On demandDownloadae10ca06…e6a578
1.1.0On demandDownloadbf906781…f4e7f9
1.1.0+1On demandDownload125604fc…c7b043
1.2.0-devOn demandDownload0014f024…5e7e7a
1.2.0On demandDownload597fc801…f30c34
1.3.0On demandDownloade4829a22…abbc34
1.4.0On demandDownloade22ced20…d8e411
1.4.1On demandDownload41cde7ab…42ff31
1.4.2On demandDownload42294428…1ef49f
1.5.0On demandDownloadea766ba2…340135
1.5.1On demandDownload0e2bc0c5…2c886d
1.6.0On demandDownload8de69ce3…5725ca
1.7.0On demandDownload274b3e8a…c2d762
1.7.1On demandDownload7e69a52d…1142bb
2.0.0-dev.1On demandDownload1b09efcb…8d1002
2.0.0On demandDownload47cca386…4c2bac
2.0.0+1On demandDownload8596e00c…ce3291
2.0.1On demandDownload47cad1d9…8253fa
2.0.2On demandDownload34f26930…860507
2.0.3On demandDownloadc220e503…111451
2.0.4On demandDownloadda474645…d03f5a
2.0.5On demandDownload5479e4bc…c47a9a
2.0.6On demandDownloadf4f143a8…016ff5
2.1.0On demandDownloadb2e1d4cb…ec478b
2.1.0+1On demandDownload4de557d3…42b1c8
2.1.1-dev.1On demandDownload0b27c863…b6ea21
2.1.1-dev.2On demandDownloadc0c8aa23…d6b665
2.1.1-dev.3On demandDownload1ea7c5b8…2b77af
2.1.1On demandDownload6b5148ec…ddc038
2.2.0-dev.1On demandDownloadeb1c2a2c…4a0e8a
2.2.0On demandDownloada3f310c5…daa521
2.2.1On demandDownload6a020341…f4ba43
2.3.0On demandDownload5ad75dcd…30cecd
2.3.1On demandDownload3f62ba9c…c8ebb8
2.4.0On demandDownload9e40b939…07e05f
2.4.1On demandDownload0f4eb0e0…87632f
2.4.2On demandDownload285ae00c…5b6934
2.4.3On demandDownloadb85ab718…2138de
3.0.0-dev.1On demandDownload70a7edf9…edff55
3.0.0-dev.2On demandDownload9b913e4f…b06072
3.0.0-dev.3On demandDownloadef8b3c0c…06e89c
3.0.0-dev.4On demandDownload5bb87c19…7b647d
3.0.0-dev.5On demandDownloadd54c4a98…cc1700
3.0.0-dev.6On demandDownload698c4a71…e5a796
3.0.0-dev.7On demandDownload0d701979…f67193
3.0.0-dev.8On demandDownloadfe9d3d70…95f3f0
3.0.0-dev.9On demandDownload8e012fb0…7506fc
3.0.0-dev.10On demandDownloadccf58e5d…f2653e
3.0.0-dev.11On demandDownload9183108f…03f29d
3.0.0-dev.12On demandDownload48e58a5b…93b939
3.0.0On demandDownloadbfb16ad1…e0abd2
3.0.0+1On demandDownloadf667f4e1…9b6bec
3.1.0On demandDownloadb970e0c1…baf1b8
3.1.1On demandDownloadb828cacc…5de8e2
3.1.2On demandDownload4fc234c9…90bc07
3.1.3On demandDownload43ac54fd…a87e22
3.1.4On demandDownload862ae098…6e27f7
3.1.5On demandDownloadc7edc36c…6d5081
3.1.6On demandDownloadba87afea…63fbea
3.1.7On demandDownloadd09559a4…17f8a7
3.1.8On demandDownloadd05e6f57…053b26
3.1.9On demandDownloade990e944…ad500d
3.1.10On demandDownloada8518843…e37490
3.1.11On demandDownloadc3bafd33…e533cf
3.1.12On demandDownloadd942f1fa…9aab50
3.2.0On demandDownloadea15f7f5…51ae0e
3.2.1On demandDownloade063f9b2…a4d778
3.2.2On demandDownload635adf8a…248fd0
3.2.3On demandDownload3c1893ae…2fe766
3.2.4On demandDownloadfcc818b9…fac417
3.2.5On demandDownload5db7fbfb…167350
3.2.6On demandDownload011c0c9a…5c7ad9
3.2.7On demandDownload7a48d240…3b64d2
3.2.8On demandDownload0f49dc64…fc1756
3.2.9On demandDownloadf9f1dab8…86715d
3.2.10On demandDownload789c13a4…1ec818
3.3.0On demandDownload0ca87836…70d57d
3.3.1On demandDownloadade0e6ee…fe143b
3.4.0On demandDownloadf627b29b…2d2d40
3.5.0On demandDownload73699578…d5f0ef
3.5.1On demandDownloadf0e1fde9…56bccf
3.5.2On demandDownloadade0ecf8…7c4264
3.5.3On demandDownloadc1612a0b…0c1ed0
3.5.4On demandDownloaddd632cfc…eb3329
3.5.5On demandDownload3a022743…e74bbe
3.5.6On demandDownload0b410c49…ad34d5
3.5.7On demandDownload7705d4cd…dc56c8
3.6.0On demandDownload4ebc616d…6bb649
4.0.0-dev.1On demandDownload9fe1bd2c…fcc3b4
4.0.0-dev.2On demandDownload1a458aee…a9da32
4.0.0-dev.3On demandDownload730d44b0…45af09
4.0.0-dev.4On demandDownload70e0f99c…d1c247
4.0.0-dev.5On demandDownload088a60ae…bbcfa8
4.0.0-dev.6On demandDownload5524a3fe…379dc3
4.0.0On demandDownload4833be7e…d2defb
4.0.1On demandDownloadea20af08…c573dd
4.0.2On demandDownloaddabc7005…c1be71
4.0.3On demandDownloada4ee3c37…373740
4.1.0On demandDownloadceb4e475…b83120
4.1.1On demandDownload89cefbdd…404a26
4.1.2On demandDownloadcbf9ee33…ee3124
4.1.3On demandDownloada74adf63…943d14
4.1.4On demandDownloadd5b22307…cb13fe
4.1.5On demandDownload981da0bb…8393c1
4.2.0On demandDownload8b10ea14…1902b8
4.2.1On demandDownloadbe353dbf…b158b4
4.2.2On demandDownload8609df1e…a0cc4f
4.2.3On demandDownload45dab039…ca6910
4.2.4On demandDownloada8463780…509c4e
4.3.0On demandDownload736d52a7…9af363
4.3.1On demandDownloadb566a9f2…ac3377
4.3.2On demandDownloadac4c81f2…c235d8
4.3.3On demandDownloadeb71d181…ccdbfd
4.3.4On demandDownload09cd58b7…cc9088
4.3.5On demandDownload394dad1d…fc2163
4.4.0On demandDownloada24b977f…5cfd60
4.4.1On demandDownload51e1f26a…bda7aa
4.4.2On demandDownload65c325a0…d9d134
4.4.3On demandDownload61d5fb52…ba068d
4.4.4On demandDownloade4cf6a91…aa972d
4.4.5On demandDownloadbe5a86de…652e6e
4.4.6On demandDownload0cf058f2…2d8783
4.4.7On demandDownload7557c308…edaa4e
4.5.0On demandDownload3b7be2fe…43a3f6
4.5.1On demandDownload4918292d…0b236e
4.5.2On demandDownloada2a96b60…e7117e
4.5.3On demandDownloadd019510f…2261e9
4.5.4On demandDownload7dce55a4…47f9ae
4.5.5On demandDownload0ceaea02…185137
4.5.6On demandDownloadf0f61279…775965
4.6.0On demandDownload92de8895…b95266
4.6.1On demandDownloadac2bd2d4…c15756
4.6.2On demandDownloadc1c71f22…c64f41
4.6.3On demandDownload4b8d4cc9…063c58
4.6.4On demandDownloadf23d184b…c546b3
4.6.5On demandDownload3ae31d25…8859eb
4.6.6On demandDownload692dde09…d2b60d
4.6.7On demandDownload5390404f…a8d63f
4.6.8On demandDownload724cf57e…40c111
4.6.9On demandDownload84d11d71…8601ee
4.6.10On demandDownloade6534e9c…57642f
4.6.11On demandDownload3f6f0d66…b014ff
4.6.12On demandDownload760fbcf2…58f16e
4.6.13On demandDownload2816be12…2566e5
4.6.14On demandDownload0cc81626…0de135
4.7.0On demandDownload25a9faa9…0cb98d
4.7.1On demandDownload77458ca1…ce2680
4.7.2On demandDownload113b8402…841e40
4.7.3On demandDownloadd65efdd2…7aec2c
4.7.4On demandDownload0bd59951…ba2481
4.7.5On demandDownload63e24545…8adda8
4.7.6On demandDownload7bfc1fde…189d13
4.7.7On demandDownload3bcc7ede…134fa7
4.7.8On demandDownload467ddc58…10fcd7
4.7.9On demandDownload0ddcc60e…a8280b
4.8.0On demandDownload480c51bb…316aee
4.8.1On demandDownloadc81d46f6…3d50a8
4.8.2On demandDownload5f27f3a1…26f72a
4.8.3On demandDownload5dc0d696…1bf0ac
4.8.4On demandDownloada4129205…067903
4.9.0On demandDownload2664274f…ddeb71
4.9.1On demandDownload9573cca3…6b7894
4.9.2On demandDownloadabdfe281…158fd1
4.9.3On demandDownload2cfee666…a01c09
5.0.0-dev.1On demandDownloadb755b157…284245
5.0.0-dev.2On demandDownload445fbf22…af20ee
5.0.0-dev.3On demandDownloadcb2ba7c3…bf3e44
5.0.0-dev.4On demandDownload6f6e302c…3ae453
5.0.0-dev.5On demandDownload99617db4…33b7de
5.0.0-dev.6On demandDownloada4fc3ce9…bed3e6
5.0.0-dev.7On demandDownload0a02041a…67ac57
5.0.0-dev.8On demandDownload5791401d…07ea5e
5.0.0-dev.9On demandDownload1983cbbc…d6909b
5.0.0-dev.10On demandDownloade578b3d3…d13231
5.0.0-dev.11On demandDownloadf0e26b52…637980
5.0.0-dev.12On demandDownload818f52f4…cd3441
5.0.0-dev.13On demandDownloada819d2f1…dc375f
5.0.0-dev.14On demandDownload8edc29d2…e44865
5.0.0-dev.15On demandDownload0dcb6ab1…deb399
5.0.0-dev.16On demandDownload9793f452…3923d2
5.0.0On demandDownloadd249fa16…3179f1
5.0.1On demandDownload4e561454…3cc21c
5.0.2On demandDownload4f7a8d73…47f8ca
5.1.0On demandDownload5869c80c…681820
5.1.1On demandDownloadcd276e63…579ae8
5.1.2On demandDownloade02d065e…3d815c
5.1.3On demandDownload79158cf0…d80a45
5.1.4On demandDownload60350aef…f44229
5.1.5On demandDownloadccfd62d6…a9d36a
5.1.6On demandDownload0f3ed908…cae849
5.1.7On demandDownloadc56c9b45…d641d4
5.1.8On demandDownload5013eb6d…5275aa
5.1.9On demandDownloadc4b77632…f31a51
5.1.10On demandDownload261f6aa0…bd2929
5.1.11On demandDownload5010a530…129a31
5.1.12On demandDownload93a287fd…943281
5.1.13On demandDownload6a807972…440052
5.1.14On demandDownload6389e5dd…bcc874
5.1.15On demandDownload7e1819c5…09f414
5.1.16On demandDownload54cbbf85…90d4bc
5.1.17On demandDownload7e4b5fb5…a1ed43
5.1.18On demandDownload102176d2…4fe19c
5.1.19On demandDownloada37a15e2…05be47
5.1.20Cached · Upstream SHA-256 matchedDownload9be092f9…7f0e97
5.1.21On demandDownloadda5d1936…9b52eb
5.2.0On demandDownloadad16695e…3f04fa

Dependencies

flutter { "sdk": "flutter" }

group_button "^5.3.4"

path_provider "^2.1.6"

share_plus "^13.2.0"

talker "^5.1.20"

web "^1.1.1"