Flutter日志记录插件simple_chopper_logger的使用

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

Flutter日志记录插件simple_chopper_logger的使用

简介

Simple Chopper Logger 是一个 Chopper 拦截器,它以易读的格式打印请求和响应日志。这对于调试API调用非常有帮助。

使用方法

要使用 Simple Chopper Logger,只需将其添加到你的 ChopperClient 中:

import 'package:simple_chopper_logger/simple_chopper_logger.dart';

final chopperClient = ChopperClient(
  baseUrl: 'YOUR_BASE_URL',
  services: [
    // Your services here
  ],
  interceptors: [
    SimpleChopperLogger(),
  ],
);

配置选项

你可以通过传递参数来配置 Simple Chopper Logger 的行为:

  • includeRequestHeaders: 是否包含请求头,默认为 false
  • includeRequestBody: 是否包含请求体,默认为 false
  • includeResponseHeaders: 是否包含响应头,默认为 false
  • includeResponseBody: 是否包含响应体,默认为 false

例如:

SimpleChopperLogger(
  includeRequestHeaders: true,
  includeRequestBody: true,
  includeResponseHeaders: true,
  includeResponseBody: true,
)

示例代码

下面是一个完整的示例,展示了如何在Flutter应用中使用 Simple Chopper Logger 来记录HTTP请求和响应的日志。

import 'package:chopper/chopper.dart';
import 'package:flutter/material.dart';
import 'package:simple_chopper_logger/simple_chopper_logger.dart';
import 'package:example/chopper_api.dart'; // 假设这是你定义的服务API文件

void main() {
  final chopperClient = ChopperClient(
    baseUrl: Uri.parse('https://jsonplaceholder.typicode.com'),
    services: [
      ChopperExampleService.create(),
    ],
    interceptors: [
      SimpleChopperLogger(
        includeRequestHeaders: true,
        includeRequestBody: true,
        includeResponseHeaders: true,
        includeResponseBody: true,
      ),
    ],
    converter: const JsonConverter(),
  );

  runApp(MyApp(client: chopperClient));
}

class MyApp extends StatefulWidget {
  const MyApp({
    required this.client,
    super.key,
  });

  final ChopperClient client;

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

class _MyAppState extends State<MyApp> {
  List<dynamic>? posts;

  Future<void> getPosts() async {
    final response =
        await widget.client.getService<ChopperExampleService>().getPosts();
    if (response.isSuccessful) {
      setState(() {
        posts = response.body as List?;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Simple Chopper Logger Example'),
        ),
        body: posts == null
            ? const Center(child: CircularProgressIndicator())
            : ListView.builder(
                itemCount: posts?.length ?? 0,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text(posts?[index]['title']),
                    subtitle: Text(posts?[index]['body']),
                  );
                },
              ),
        floatingActionButton: Builder(builder: (context) {
          return Column(
            mainAxisSize: MainAxisSize.min,
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
              ElevatedButton(
                onPressed: getPosts,
                child: const Text('(GET) Fetch a list of posts'),
              ),
              ElevatedButton(
                onPressed: () async {
                  // showCreatePostDialog(context, widget.client.getService<ChopperExampleService>());
                },
                child: const Text('(POST) Create a post'),
              ),
              ElevatedButton(
                onPressed: () async {
                  // showUpdatePostDialog(context, widget.client.getService<ChopperExampleService>());
                },
                child: const Text('(PUT) Update a post'),
              ),
              ElevatedButton(
                onPressed: () async {
                  // showPatchPostDialog(context, widget.client.getService<ChopperExampleService>());
                },
                child: const Text('(PATCH) Patch a post'),
              ),
              ElevatedButton(
                onPressed: () async {
                  // showDeletePostDialog(context, widget.client.getService<ChopperExampleService>());
                },
                child: const Text('(DELETE) Delete a post'),
              ),
            ],
          );
        }),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用程序,它使用 Simple Chopper Logger 来记录与 jsonplaceholder.typicode.com API交互的日志。你可以通过点击浮动按钮来触发不同的HTTP请求,并在控制台中查看详细的日志信息。

日志输出示例

请求日志

Example Request

响应日志

Example Response

希望这个示例能帮助你更好地理解和使用 Simple Chopper Logger 插件。如果你有任何问题或需要进一步的帮助,请随时提问!


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

1 回复

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


当然,以下是如何在Flutter项目中使用simple_chopper_logger插件来进行日志记录的代码示例。simple_chopper_logger通常与chopper HTTP客户端一起使用,以便于在API请求和响应过程中记录日志。

首先,确保你已经在pubspec.yaml文件中添加了choppersimple_chopper_logger依赖:

dependencies:
  flutter:
    sdk: flutter
  chopper: ^4.0.1  # 请检查最新版本
  simple_chopper_logger: ^1.0.0  # 请检查最新版本

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

接下来,让我们设置一个基本的chopper客户端并使用simple_chopper_logger进行日志记录。

  1. 创建API服务接口
import 'package:chopper/chopper.dart';

part 'api_service.chopper.dart';

@ChopperApi(baseUrl: 'https://api.example.com')
abstract class ApiService extends ChopperClient {
  static ApiService create() {
    final client = ChopperClient(
      baseUrl: 'https://api.example.com',
      services: [
        _$ApiService(),
      ],
      converter: JsonConverter(),
      interceptor: SimpleChopperLogger(), // 添加日志记录拦截器
    );
    return _$ApiServiceImpl(client);
  }

  @Get(path: '/data')
  Future<Response> fetchData();
}

使用@ChopperApi注解定义API服务的基URL,并创建一个抽象方法fetchData来模拟一个GET请求。

  1. 生成 Chopper 代码

在命令行中运行以下命令来生成 Chopper 的代码:

flutter pub run build_runner build

这将在你的项目中生成api_service.chopper.dart文件。

  1. 使用API服务

在你的Flutter应用中,你可以这样使用API服务:

import 'package:flutter/material.dart';
import 'api_service.dart';

void main() {
  final apiService = ApiService.create();

  runApp(MyApp(apiService: apiService));
}

class MyApp extends StatelessWidget {
  final ApiService apiService;

  MyApp({required this.apiService});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter Chopper Logger Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              final response = await apiService.fetchData();
              if (response.isSuccessful) {
                print('Data fetched successfully: ${response.bodyString}');
              } else {
                print('Failed to fetch data: ${response.statusCode}');
              }
            },
            child: Text('Fetch Data'),
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个MyApp小部件,其中包含一个按钮。点击按钮时,会调用apiService.fetchData()方法来获取数据,并在控制台中打印响应。

SimpleChopperLogger拦截器会自动记录请求和响应的日志,因此你不需要手动添加任何日志代码。

  1. 运行应用

现在你可以运行你的Flutter应用,点击按钮,你应该能在控制台中看到由SimpleChopperLogger记录的日志信息。

这样,你就成功地在Flutter项目中集成了simple_chopper_logger插件来进行日志记录了。

回到顶部