Features

  • Display API request/response using Dio on the interface or log to the console.
  • Mock response or URL when calling API.
  • Display errors on the interface for easier debugging.

Installation

  • Install the compatible version of the library: Type in the terminal:
flutter pub add dev_logger_ui

or add to the pubspec.yaml file in the section:

dependencies:
  flutter:
    sdk: flutter
  dev_logger_ui: latest_version
  • Add interceptor to Dio:
  Dio dio = Dio();
  dio.interceptors.add(LogApiInterceptor());
  • Initialization:

Initialize API log:

// create navigatorKey
GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
MaterialApp(
    navigatorKey: navigatorKey,
    //...
)
DevLoggerUI.instance.init(
      navigatorKey: navigatorKey,
      isAutoStart: true,
      isLogCurl: true,
      openTypes: [OpenType.button, OpenType.longPress, OpenType.shake],
      saveManager: SaveManager(),
      sendText: ({required body, required email, required title}) async {
        return "Email: $email\nTitle: $title\nBody: $body";
      },
      valueFromResponse: ValueFromResponse(
        checkApiSuccess: (response, {url}) {
          if (response is Map) {
            return response['status'] == true && response['code'] == 200;
          }
          return false;
        },
        getErrorCode: (response, {url}) {
          if (response is Map) {
            final errorCode = response["errorCode"];
            if (errorCode == null) return null;
            return MapEntry("errorCode", errorCode);
          }
          return null;
        },
        getErrorMessage: (response, {url}) {
          if (response is Map) {
            final message = response['message'];
            if (message == null) return null;
            return message.toString();
          }
          return null;
        },
      ),
      waitTurnOnTime: 5000,
    );

If you want to log exceptions to the interface:

runZonedGuarded(
    () {
      WidgetsFlutterBinding.ensureInitialized();
      DevLoggerUI.instance.listenFlutterError(FlutterError.onError);
      runApp(const MyApp());
    },
    (error, stack) {
      DevLoggerUI.instance.addNormalError(error, stack);
      Completer().completeError(error, stack);
    },
  );
  • Main ways to open the log screen: There are 3 ways based on openType when initializing the library:
DevLoggerUI.instance.init(openTypes: [OpenType.button, OpenType.longPress, OpenType.shake]);
  1. OpenType.button: Show Log button - Double click the button to open the log interface. To enable this feature, you need to add:
    MaterialApp(
        navigatorKey: navigatorKey,
        title: 'Flutter Demo',
        builder: DevLoggerUI.builder(),
        //...
    );

If you use another library that also uses builder like EasyLoading, use as below:

    MaterialApp(
        navigatorKey: navigatorKey,
        title: 'Flutter Demo',
        builder: DevLoggerUI.builder(builder: EasyLoading.init()),
        //...
    );
  1. OpenType.longPress: Long press anywhere to open the log interface.
  2. OpenType.shake: Shake the phone to open the log interface.

Libraries

common_utils
Common utilities library
commons/app_base_screen
commons/app_colors
commons/app_navigator
commons/app_pages
commons/app_styles
commons/base_provider
constants/mock_type
constants/open_type
constants/response_type
default_functions
Default functions library
dev_logger_ui
Dev logger UI library
dev_logger_ui/dev_logger_ui
Provides the main API Logger class and related types for API logging, overlay, and event management.
dev_logger_ui/dev_logger_ui_abstract
Provides the abstract base class for API Logger, including core properties.
dev_logger_ui/get_response_value
Provides a typedef and a class for extracting values from API responses.
file_name
File name class
file_save_manager
File save manager implementation
log_api_constants
API logger constants
log_api_intercepter
API logger interceptor
Menu item definition
models/base_model
models/error_model
models/log_model
models/mock_api
models/request_model
models/upload_file
save_manager
Save manager abstract class
send_mail
ui/providers/common_provider
ui/screens/api/api_provider
ui/screens/api/api_screen
ui/screens/mock_api/add_mock/add_mock_api_provider
ui/screens/mock_api/add_mock/add_mock_api_screen
ui/screens/mock_api/mock_api_screen
ui/screens/request_detail_screen/request_detail/detail_block
ui/screens/request_detail_screen/request_detail/request_detail
ui/screens/request_detail_screen/request_detail/request_detail_header
ui/screens/request_detail_screen/request_detail/request_detail_other
ui/screens/request_detail_screen/request_detail/request_detail_payload
ui/screens/request_detail_screen/request_detail/request_detail_provider
ui/screens/request_detail_screen/request_detail/request_detail_response
ui/screens/request_detail_screen/request_detail/request_detail_response_preview
ui/screens/request_detail_screen/request_detail_screen
ui/screens/request_detail_screen/request_detail_screen_provider
ui/screens/send_email_screen
ui/widgets/action_bottom_sheeet
ui/widgets/app_button
ui/widgets/app_data_viewer
ui/widgets/bottom_sheet_base
ui/widgets/copyable_two_text
ui/widgets/imput/app_dropdown
ui/widgets/imput/app_textfield
ui/widgets/imput/input_contants
ui/widgets/item_api_action_bottom_sheeet
A bottom sheet widget that displays a list of API action menu items.
ui/widgets/main_listview_item/api_item
ui/widgets/main_listview_item/error_item
ui/widgets/main_listview_item/model_item
ui/widgets/measure_size
ui/widgets/open_image
ui/widgets/overlay/dev_logger_ui_overlay
ui/widgets/overlay/overlay_entry
ui/widgets/ratio_two_text
ui/widgets/shared_data_bottom_sheet
ui/widgets/simple_rich_text
ui/widgets/two_text
ui/widgets/type_icon
utils/app_utils
Application utilities library
utils/app_values
Application values library
utils/string_utils
String utilities library