Flutter网络请求与日志检查插件fancy_dio_inspector的使用

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

Flutter网络请求与日志检查插件fancy_dio_inspector的使用

Fancy Dio Inspector

Fancy Dio Inspector 是一个基于 Dio 的插件,它允许开发者记录、复制每一个网络请求、响应和错误。这在调试网络问题时非常有用。

Fancy Dio Inspector Screenshot

开始使用

添加依赖

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

dependencies:
  fancy_dio_inspector: ^1.7.0

初始化

然后,在创建Dio实例时添加FancyDioInterceptor拦截器,以便捕获所有的请求、响应和错误信息:

final dio = Dio();

dio.interceptors.add(FancyDioInterceptor());

使用

为了能够在应用界面中查看这些日志,需要将FancyDioInspectorView加入到你的Widget树中。这里我们把它放在侧边栏中,只在Debug模式下显示:

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        endDrawer: kDebugMode ? FancyDioInspectorView() : null,
        body: Center(child: Text('Hello World')),
      ),
    );
  }
}

示例代码

下面是一个完整的示例代码,演示了如何结合fancy_dio_inspector进行网络请求并查看日志。

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

void main() {
  // 初始化Dio客户端
  DioClient.instance.init();
  
  runApp(const MyApp());
}

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? token;

  Future<void> login({bool success = true}) async {
    setState(() {
      token = null;
    });

    final response = await DioClient.instance.login(success: success);

    if (response != null) {
      setState(() {
        token = response.token;
      });
    }
  }

  void openDioInspector(BuildContext context) {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => FancyDioInspectorView(
          leading: CloseButton(onPressed: Navigator.of(context).pop),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Fancy Dio Inspector Example',
      home: Builder(
        builder: (context) => Scaffold(
          appBar: AppBar(title: const Text('Fancy Dio Inspector Example')),
          body: Center(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                const Text('Fancy Dio Inspector'),
                const SizedBox(height: 16),
                ElevatedButton(
                  onPressed: () => openDioInspector(context),
                  child: const Text('Open FancyDioInspectorView'),
                ),
                const SizedBox(height: 8),
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    ElevatedButton(
                      onPressed: login,
                      child: const Text('Success Login'),
                    ),
                    const SizedBox(width: 8),
                    ElevatedButton(
                      onPressed: () => login(success: false),
                      child: const Text('Error Login'),
                    ),
                  ],
                ),
                const SizedBox(height: 4),
                Text('Token: $token'),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

class DioClient {
  DioClient._();
  static final DioClient instance = DioClient._();

  late final Dio _dio;

  void init() {
    _dio = Dio(BaseOptions(baseUrl: 'https://reqres.in/api'));

    // 添加FancyDioInterceptor拦截器,并设置选项
    _dio.interceptors.add(
      FancyDioInterceptor(
        options: const FancyDioInspectorOptions(
          consoleOptions: FancyDioInspectorConsoleOptions(verbose: true),
        ),
      ),
    );
  }

  Future<LoginResponse?> login({bool success = true}) async {
    final request = LoginRequest(
      email: 'eve.holt@reqres.${success ? 'in' : 'com'}',
      password: 'cityslicka',
    );

    try {
      final response = await _dio.post('/login', data: request.toJson());
      return LoginResponse.fromJson(response.data);
    } catch (e) {
      return null;
    }
  }
}

// 注意:这里缺少LoginRequest和LoginResponse类的定义,请根据实际情况补充。

注意:上面的代码中缺少LoginRequestLoginResponse类的定义,你需要根据实际情况来定义这两个类。通常来说,它们应该包含API所需的字段以及从JSON解析的方法。


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

1 回复

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


当然,以下是如何在Flutter项目中使用fancy_dio_inspector插件来进行网络请求与日志检查的代码示例。fancy_dio_inspector是一个强大的插件,可以帮助开发者在开发过程中轻松调试和检查网络请求。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  dio: ^4.0.0 # 确保dio版本与fancy_dio_inspector兼容
  fancy_dio_inspector: ^0.2.0 # 请检查最新版本号

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

2. 配置DIO和FancyDioInspector

在你的Flutter应用中,你需要配置DIO实例并使用FancyDioInspector来拦截和检查网络请求。以下是一个简单的配置示例:

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

void main() {
  // 初始化DIO实例
  final Dio dio = Dio();

  // 配置FancyDioInspector
  FancyDioInspector(
    dio: dio,
    enableLog: true, // 是否启用日志输出
    requestHeader: true, // 是否显示请求头
    responseHeader: true, // 是否显示响应头
    responseBody: true, // 是否显示响应体
    errorResponseBody: true, // 是否显示错误响应体
  )..init(); // 初始化FancyDioInspector

  runApp(MyApp(dio: dio));
}

class MyApp extends StatelessWidget {
  final Dio dio;

  MyApp({required this.dio});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('FancyDioInspector Demo'),
        ),
        body: 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('Error: $e');
              }
            },
            child: Text('Fetch Data'),
          ),
        ),
      ),
    );
  }
}

3. 使用FancyDioInspector界面

在开发过程中,你可以通过启动你的Flutter应用并在调试模式下运行它来查看FancyDioInspector的界面。默认情况下,FancyDioInspector会在应用的底部显示一个浮动按钮,点击它可以打开网络请求的调试界面。

4. 查看网络请求和日志

一旦你发送了网络请求,你可以通过点击浮动按钮打开FancyDioInspector界面,查看所有的网络请求、请求头、响应头和响应体等信息。这对于调试和检查网络请求非常有用。

注意事项

  • 确保你的Flutter和Dart环境是最新的,以避免兼容性问题。
  • 检查fancy_dio_inspectordio插件的最新版本,以确保代码示例中的版本号是正确的。
  • 在生产环境中,你可能希望禁用日志输出和调试界面,以避免泄露敏感信息。

通过上述步骤,你就可以在Flutter项目中成功集成并使用fancy_dio_inspector来进行网络请求与日志检查了。

回到顶部