Flutter网络日志记录插件network_logger的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter网络日志记录插件network_logger的使用

Network Logger

Network logger 是一个带有良好设计用户界面来检查网络流量日志的工具。它包括了Dio拦截器,你只需要编写2行代码就可以开始并检查流量。

📷 Screenshots

Log feed Log details
Log feed Log details

🚀 Getting Started!

你可以通过以下3个步骤在美观的GUI中查看HTTP流量日志。

1. 安装 network_logger

请参考此指南network_logger 安装到你的Flutter项目中。

2. 添加 DioNetworkLogger 拦截器到 dio 客户端

network_logger 包含了一个Dio拦截器,可以拦截来自Dio客户端的流量。其他包的实现即将推出。

var dio = Dio();
dio.interceptors.add(DioNetworkLogger());

3. 将 network logger overlay 按钮附加到 UI

访问 Network Logger UI 的最简单方法是使用 NetworkLoggerOverlay ,它将在所有屏幕上显示浮动操作按钮。你也可以通过不同的动作实现自定义场景以打开UI。

@Override
void initState() {
  NetworkLoggerOverlay.attachTo(context);
  super.initState();
}

示例demo

下面是一个完整的示例代码,展示了如何在Flutter应用中使用 network_logger 插件:

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:network_logger/network_logger.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Network Logger',
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final client = Dio();

  @override
  void initState() {
    super.initState();
    NetworkLoggerOverlay.attachTo(context);
    client.interceptors.add(DioNetworkLogger());
  }

  void example1() {
    client.get('https://flutter.dev/');
  }

  void example2() {
    client.get('https://jsonplaceholder.typicode.com/todos');
  }

  void example3() {
    client.delete('https://google.com/some-resource');
  }

  void example4() {
    client.post(
      'https://run.mocky.io/v3/c80877c3-8d4a-477b-9c45-a1441c34a6b6',
      data: <String, dynamic>{
        'products': 5,
        'foo': 'bar',
        'hello': [
          'world',
          'dunya',
        ]
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Network Logger'),
      ),
      body: ListView(
        children: [
          ListTile(
            title: Text('Example 1'),
            subtitle: Text('Flutter website'),
            onTap: example1,
          ),
          ListTile(
            title: Text('Example 2'),
            subtitle: Text('Json placeholder'),
            onTap: example2,
          ),
          ListTile(
            title: Text('Example 3'),
            subtitle: Text('404 or something else'),
            onTap: example3,
          ),
          ListTile(
            title: Text('Example 4'),
            subtitle: Text('Mock api'),
            onTap: example4,
          ),
        ],
      ),
    );
  }
}

这个例子创建了一个简单的Flutter应用程序,其中包含四个列表项,每个列表项都会触发一个网络请求,并且这些请求的日志信息会被 network_logger 捕获并在界面上展示。


更多关于Flutter网络日志记录插件network_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络日志记录插件network_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用network_logger插件来记录网络请求的示例代码。network_logger是一个方便的插件,用于在开发过程中记录HTTP请求和响应的详细信息。

步骤1:添加依赖

首先,在你的pubspec.yaml文件中添加network_logger依赖:

dependencies:
  flutter:
    sdk: flutter
  # 其他依赖...
  network_logger: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

步骤2:配置dio客户端

network_logger通常与dio库一起使用,因为dio是一个流行的HTTP客户端库。以下是如何配置dio客户端以使用network_logger

import 'package:dio/dio.dart';
import 'package:network_logger/network_logger.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Network Logger Example'),
        ),
        body: NetworkLoggerExample(),
      ),
    );
  }
}

class NetworkLoggerExample extends StatefulWidget {
  @override
  _NetworkLoggerExampleState createState() => _NetworkLoggerExampleState();
}

class _NetworkLoggerExampleState extends State<NetworkLoggerExample> {
  late Dio _dio;

  @override
  void initState() {
    super.initState();
    
    // 创建dio实例
    _dio = Dio();

    // 配置拦截器以使用network_logger
    _dio.interceptors.add(NetworkLogger(
      requestHeader: true,
      requestBody: true,
      responseBody: true,
      responseHeader: true,
      logError: true,
      logPrint: print,  // 可以自定义日志输出函数,这里使用print输出到控制台
    ));
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        onPressed: () async {
          // 发起网络请求
          try {
            Response response = await _dio.get('https://jsonplaceholder.typicode.com/posts/1');
            print('Response data: ${response.data}');
          } catch (e) {
            print('Request failed: $e');
          }
        },
        child: Text('Fetch Data'),
      ),
    );
  }
}

代码解释

  1. 添加依赖:在pubspec.yaml中添加network_logger依赖。
  2. 创建dio实例:在_NetworkLoggerExampleStateinitState方法中创建一个Dio实例。
  3. 配置拦截器:使用dio的拦截器功能添加NetworkLogger,并配置相关选项,如是否记录请求头、请求体、响应体和响应头。
  4. 发起网络请求:在按钮点击事件中,使用配置好的dio实例发起网络请求,并打印响应数据。

运行项目

确保你的开发环境已经配置好Flutter和Dart,然后运行项目:

flutter run

当你点击按钮发起网络请求时,你应该能在控制台中看到详细的网络请求和响应日志。

这个示例展示了如何在Flutter项目中集成和使用network_logger插件来记录网络日志。希望这对你有帮助!

回到顶部