Flutter网络请求调试插件dio_request_inspector的使用

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

Flutter网络请求调试插件dio_request_inspector的使用

Dio Requests Inspector 是一个用于 Dio 的 HTTP 请求和响应拦截与日志记录工具。它可以帮助开发者更好地调试网络请求,提高开发效率。

特性

  • ✅ 拦截并记录 HTTP 请求和响应
  • ✅ 使用密码保护 HTTP 请求的安全性
  • ✅ 根据请求时间、方法和状态过滤日志
  • ✅ 通过路径搜索日志
  • ✅ 轻松分享请求和响应数据
  • ✅ 美化 JSON 数据
  • ✅ 界面美观

如何使用

1. 添加依赖

pubspec.yaml 文件中添加 dio_request_inspector 包:

flutter pub add dio_request_inspector

2. 配置 MaterialApp

MaterialApp 中添加 navigatorObservers

import 'package:dio_request_inspector/dio_request_inspector.dart';

void main() {
  runApp(DioRequestInspectorMain(
    isDebugMode: true,
    child: MyApp(),
  ));
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Dio Request Inspector',
      navigatorObservers: [
        DioRequestInspector.navigatorObserver,
      ],
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

3. 设置 Dio 实例

在你的 Dio 实例中添加拦截器:

import 'package:dio/dio.dart';
import 'package:dio_request_inspector/dio_request_inspector.dart';

final DioRequestInspector inspector = DioRequestInspector(
  isDebugMode: true,
  duration: const Duration(milliseconds: 500),
  showFloating: true,
  password: '123456', // 可选,设置密码保护
);

final Dio _dio = Dio();
_dio.interceptors.add(inspector.getDioRequestInterceptor());

4. 示例 Demo

以下是一个完整的示例代码,展示了如何使用 dio_request_inspector 插件进行网络请求调试:

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(DioRequestInspectorMain(
    isDebugMode: true,
    child: const MyApp(),
  ));
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Dio Request Inspector',
      navigatorObservers: [
        DioRequestInspector.navigatorObserver,
      ],
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late Dio _dio;
  final DioRequestInspector inspector = DioRequestInspector(
    isDebugMode: true,
    duration: const Duration(milliseconds: 500),
    showFloating: true,
    password: '123456',
  );

  [@override](/user/override)
  void initState() {
    _dio = Dio();
    _dio.interceptors.add(inspector.getDioRequestInterceptor());
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Dio Request Inspector Example'),
        backgroundColor: Colors.purple.withOpacity(0.6),
      ),
      body: Container(
        padding: const EdgeInsets.symmetric(horizontal: 16),
        width: double.infinity,
        height: double.infinity,
        child: ListView(
          children: [
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: _getRequest,
              style: ElevatedButton.styleFrom(
                backgroundColor: Colors.purple.withOpacity(0.6),
              ),
              child: const Text("GET Request", style: TextStyle(color: Colors.white)),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: _getImageRequest,
              style: ElevatedButton.styleFrom(
                backgroundColor: Colors.purple.withOpacity(0.6),
              ),
              child: const Text("GET Image Request", style: TextStyle(color: Colors.white)),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: _postRequest,
              style: ElevatedButton.styleFrom(
                backgroundColor: Colors.purple.withOpacity(0.6),
              ),
              child: const Text("POST Request", style: TextStyle(color: Colors.white)),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: _errorRequest,
              style: ElevatedButton.styleFrom(
                backgroundColor: Colors.purple.withOpacity(0.6),
              ),
              child: const Text("Error Request", style: TextStyle(color: Colors.white)),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: _openInspector,
              style: ElevatedButton.styleFrom(
                backgroundColor: Colors.purple.withOpacity(0.6),
              ),
              child: const Text("Open Inspector", style: TextStyle(color: Colors.white)),
            ),
            const SizedBox(height: 16),
          ],
        ),
      ),
    );
  }

  void _getRequest() {
    _dio.get<void>("https://63aea217ceaabafcf17f16b1.mockapi.io/get");
  }

  void _postRequest() {
    _dio.post("https://httpbin.org/post", data: {"name": "dio", "age": 25});
  }

  void _errorRequest() {
    _dio.get<void>("https://httpbin.org/status/404");
  }

  void _getImageRequest() {
    _dio.get<void>("https://httpbin.org/image/png");
  }

  void _openInspector() => toInspector();
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用dio_request_inspector插件来进行网络请求调试的示例代码。这个插件允许你在开发过程中实时查看和调试HTTP请求与响应。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  dio: ^4.0.0 # 请检查最新版本
  dio_request_inspector: ^0.2.0 # 请检查最新版本

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

2. 配置Dio和dio_request_inspector

在你的Flutter项目中,创建一个dio实例并配置dio_request_inspector。以下是一个示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late Dio _dio;

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

  void _setupDio() {
    _dio = Dio();

    // 配置dio_request_inspector
    var dioInspector = DioRequestInspector(
      dio: _dio,
      requestInspector: (RequestOptions options) async {
        // 这里可以添加对请求选项的调试,比如打印日志
        print('Request URL: ${options.uri}');
        print('Request Method: ${options.method}');
        print('Request Headers: ${options.headers}');
      },
      responseInspector: (RequestOptions options, Response response) async {
        // 这里可以添加对响应的调试,比如打印日志
        print('Response Status Code: ${response.statusCode}');
        print('Response Data: ${response.data}');
        print('Response Headers: ${response.headers}');
      },
      errorInspector: (RequestOptions options, DioError err) async {
        // 这里可以添加对错误的调试,比如打印日志
        print('Error: ${err.message}');
      },
    );

    // 启动dio_request_inspector
    dioInspector.start();
  }

  void _makeRequest() async {
    try {
      Response response = await _dio.get('https://jsonplaceholder.typicode.com/posts/1');
      print('Response Body: ${response.data}');
    } catch (e) {
      print('Error: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Dio Request Inspector Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _makeRequest,
          child: Text('Make Request'),
        ),
      ),
    );
  }
}

3. 运行应用

运行你的Flutter应用,点击按钮触发网络请求,你应该能在控制台中看到详细的请求和响应日志。

注意事项

  • dio_request_inspector的API可能会随着版本更新而变化,因此请查阅最新的文档以获取最新的使用方法。
  • 在生产环境中,请确保关闭或移除调试工具,以避免泄露敏感信息。

这个示例展示了如何配置和使用dio_request_inspector来调试Flutter应用中的网络请求。希望这对你有所帮助!

回到顶部