flutter_dev_console 1.0.1 copy "flutter_dev_console: ^1.0.1" to clipboard
flutter_dev_console: ^1.0.1 copied to clipboard

A lightweight Flutter dev console for viewing API requests, logs, and analytics events in real time.

example/lib/main.dart

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:flutter_dev_console/dev_console.dart';

void main() {
  // 初始化开发控制台
  DevConsole.instance.initialize(
    maxLogCount: 500,
    maxRequestCount: 100,
    theme: DevConsoleTheme(
      primaryColor: Colors.blue,
      backgroundColor: const Color(0xF0121212),
      textColor: Colors.white,
    ),
  );

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'DevConsole Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        brightness: Brightness.light,
        textTheme: const TextTheme(
          bodyLarge: TextStyle(decoration: TextDecoration.none),
          bodyMedium: TextStyle(decoration: TextDecoration.none),
          bodySmall: TextStyle(decoration: TextDecoration.none),
        ),
      ),
      darkTheme: ThemeData(
        primarySwatch: Colors.blue,
        brightness: Brightness.dark,
        textTheme: const TextTheme(
          bodyLarge: TextStyle(color: Colors.white),
        ),
      ),
      themeMode: ThemeMode.system,
      home: const DevConsoleDemo(),
    );
  }
}

class DevConsoleDemo extends StatefulWidget {
  const DevConsoleDemo({super.key});

  @override
  DevConsoleDemoState createState() => DevConsoleDemoState();
}

class DevConsoleDemoState extends State<DevConsoleDemo> {
  final Dio _dio = Dio();

  late ApiLogger _apiLogger;

  @override
  void initState() {
    super.initState();

    // 获取API日志记录器
    _apiLogger = DevConsole.instance.getApiLogger();

    // 配置Dio拦截器,手动记录API请求
    _dio.interceptors.add(InterceptorsWrapper(
      onRequest: (options, handler) {
        // 请求前记录
        _apiLogger.logRequest(
          options.uri.toString(),
          options.method,
          headers: options.headers,
          data: options.data,
          queryParameters: options.queryParameters,
        );
        return handler.next(options);
      },
      onResponse: (response, handler) {
        // 请求成功记录
        _apiLogger.logResponse(
          response.requestOptions.uri.toString(),
          response.requestOptions.method,
          response.statusCode,
          response.data,
          headers: response.requestOptions.headers,
          data: response.requestOptions.data,
          queryParameters: response.requestOptions.queryParameters,
        );
        return handler.next(response);
      },
      onError: (error, handler) {
        // 请求失败记录
        _apiLogger.logError(
          error.requestOptions.uri.toString(),
          error.requestOptions.method,
          error.toString(),
          statusCode: error.response?.statusCode,
          headers: error.requestOptions.headers,
          data: error.requestOptions.data,
          queryParameters: error.requestOptions.queryParameters,
        );
        return handler.next(error);
      },
    ));

    // 注意:以上拦截器代码展示了如何手动使用ApiLogger记录请求
    // 不再依赖DevConsole的内置拦截器
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('DevConsole 示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                // 显示开发控制台
                DevConsole.instance.show(context);
              },
              child: const Text('显示开发控制台'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _addTestLogs,
              child: const Text('添加测试日志'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _addTestApiRequests,
              child: const Text('添加测试API请求'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _makeRealApiRequest,
              child: const Text('发起真实API请求'),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          DevConsole.instance.show(context);
        },
        tooltip: '开发控制台',
        child: const Icon(Icons.developer_mode),
      ),
    );
  }

  // 添加测试日志
  void _addTestLogs() {
    // 添加不同级别的日志
    DevConsole.instance.log('这是一条信息日志', level: LogLevel.info, tag: 'Example');
    DevConsole.instance.log('这是一条调试日志', level: LogLevel.debug, tag: 'Example');
    DevConsole.instance
        .log('这是一条警告日志', level: LogLevel.warning, tag: 'Example');

    // 添加带有堆栈信息的错误日志
    try {
      throw Exception('这是一个测试异常');
    } catch (e, stack) {
      DevConsole.instance.log('发生异常: $e',
          level: LogLevel.error, tag: 'Error', stackTrace: stack, error: e);
    }

    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(content: Text('已添加测试日志')),
    );
  }

  // 添加测试API请求
  void _addTestApiRequests() {
    // 添加测试API请求
    DevConsole.instance.logApiRequest(
      'https://api.example.com/users',
      'GET',
      headers: {'Authorization': 'Bearer token123'},
      response: {'id': 1, 'name': 'Test User'},
      statusCode: 200,
    );

    DevConsole.instance.logApiRequest(
      'https://api.example.com/posts',
      'POST',
      data: {'title': 'New Post', 'content': 'Content'},
      response: {'id': 1, 'success': true},
      statusCode: 201,
    );

    DevConsole.instance.logApiRequest(
      'https://api.example.com/invalid',
      'GET',
      error: '404 Not Found',
      statusCode: 404,
      status: RequestStatus.failed,
    );

    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(content: Text('已添加测试API请求')),
    );
  }

  // 发起真实API请求
  Future<void> _makeRealApiRequest() async {
    try {
      // 使用添加了拦截器的Dio实例发起请求
      // 这些请求会被自动记录到开发控制台
      await _dio.get('https://jsonplaceholder.typicode.com/posts/1');
      await _dio.get('https://jsonplaceholder.typicode.com/users/1');

      // 故意发起一个会失败的请求
      await _dio.get('https://jsonplaceholder.typicode.com/invalid');
    } catch (e) {
      // 错误已被拦截器记录,这里不需要额外处理
      if (kDebugMode) {
        print('有些请求可能失败,但已被记录');
      }
    }

    // ignore: use_build_context_synchronously
    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(content: Text('已发起真实API请求')),
    );
  }
}
0
likes
155
points
24
downloads

Publisher

unverified uploader

Weekly Downloads

A lightweight Flutter dev console for viewing API requests, logs, and analytics events in real time.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on flutter_dev_console