Flutter通道监控插件channel_monitor的使用

Flutter通道监控插件channel_monitor的使用

channel_monitor 插件用于监控 Flutter 平台通道性能,包括 EventChannelMethodChannelBinaryChannel

开始使用

首先,在你的 Flutter 项目中添加以下代码:

void main() {
  // 添加此代码以初始化插件。注意:这将替换默认的 Flutter 绑定。
  CustomFlutterBinding();
  runApp(MyApp());
}

现在,该插件会工作并保存通道性能数据。

解析通道性能数据

  1. 在项目中添加通道性能页面:
class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    // 通道性能页面
    return BasePage(ChannelDataManager.instance);
  }
}
  1. 转到该页面进行数据导出:

3361635491551_.pic.jpg

其他用法

  1. 使用 Web 解析通道性能文件 该示例支持 Web 端,你可以在 Web 端运行它,并在 Web 端解析通道性能文件。

    注意:Web 端不支持平台通道,因此它可以解析来自你的计算机的通道性能文件。

更多配置

你可以通过 ChannelMonitorManager 进行更多配置:

ChannelMonitorManager.instance
   ..timeOut = 10 // 设置监控超时秒数,默认为 5 秒
   ..log = true // 默认为 false
   ..testData =
       false // 是否使用测试数据(Android 或 iOS),默认为 false:使用当前项目的实际数据
   ..addIgnoreChannelList("ignorechannle")// 添加要忽略的通道名称,默认为 "flutter/platform", "flutter/navigation"
   ..dataUpload = (path) {
     // 通道性能数据将保存在应用的私有目录中。
     // 当数据大于 10KB 时,将回调该路径
     // 你可以上传数据到你的服务端并解析它。

     File file = File(path);
     // 上传内容到你的服务端
     print("channel data, file: $path \n content: ${file.readAsStringSync()}");

     // 如果返回 true,数据将被删除。
     return true;
   };

自定义 WidgetsFlutterBindingBinaryMessenger

如果你自定义了 WidgetsFlutterBindingBinaryMessenger,你可以使用 ChannelMonitorManager

更多信息,请点击这里

示例代码

以下是完整的示例代码:

import 'dart:io';

import 'package:channel_monitor/charts/base_page.dart';
import 'package:channel_monitor/charts/channel_data.dart';
import 'package:channel_monitor/monitor/channel_monitor.dart';
import 'package:channel_monitor/monitor/custom_flutter_binding.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  if (!kIsWeb) {
    CustomFlutterBinding(); // 这一句必须放在初始化的最前面
    _setHandler();
  }
  runApp(MyApp());
}

void _setHandler() {
  methodChannel.setMethodCallHandler((call) async {});
}

MethodChannel methodChannel = MethodChannel("siyehua");

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    testInvokeMethod();
    return BasePage(ChannelDataManager.instance);
  }
}

void testInvokeMethod() async {
  if (!kIsWeb) {
    Future.delayed(Duration(seconds: 5), () {
      methodChannel.invokeMethod("login");
    });
    Future.delayed(Duration(seconds: 3), () {
      methodChannel.invokeMethod("abc");
    });
  }
}

更多关于Flutter通道监控插件channel_monitor的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter通道监控插件channel_monitor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


channel_monitor 是一个用于监控 Flutter 平台通道(Platform Channel)的插件。它可以帮助开发者监控和调试 Flutter 应用与原生平台之间的通信。以下是如何使用 channel_monitor 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  channel_monitor: ^1.0.0  # 请使用最新版本

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

2. 导入插件

在你的 Dart 文件中导入 channel_monitor 插件:

import 'package:channel_monitor/channel_monitor.dart';

3. 初始化 ChannelMonitor

在你的应用的 main 函数中初始化 ChannelMonitor

void main() {
  ChannelMonitor.initialize();
  runApp(MyApp());
}

4. 监控通道

ChannelMonitor 会自动监控所有的平台通道(MethodChannel 和 EventChannel)。你也可以手动添加监控:

MethodChannel myChannel = MethodChannel('my_channel');
ChannelMonitor.monitorMethodChannel(myChannel);

EventChannel myEventChannel = EventChannel('my_event_channel');
ChannelMonitor.monitorEventChannel(myEventChannel);

5. 查看监控日志

ChannelMonitor 会将所有的通道通信日志记录下来。你可以通过以下方式查看日志:

List<ChannelEvent> events = ChannelMonitor.getEvents();
for (var event in events) {
  print('Event: ${event.toString()}');
}

6. 清除日志

如果你想清除日志,可以调用:

ChannelMonitor.clearEvents();

7. 高级配置

ChannelMonitor 还提供了一些高级配置选项,例如:

  • 过滤日志:你可以根据通道名称、事件类型等条件过滤日志。
  • 自定义日志输出:你可以自定义日志的输出方式,例如将其输出到文件或发送到远程服务器。
ChannelMonitor.setFilter((event) {
  return event.channelName == 'my_channel';
});

ChannelMonitor.setLogger((event) {
  // 自定义日志输出
  print('Custom Log: ${event.toString()}');
});

8. 示例

以下是一个完整的示例:

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

void main() {
  ChannelMonitor.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Channel Monitor Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              MethodChannel myChannel = MethodChannel('my_channel');
              ChannelMonitor.monitorMethodChannel(myChannel);
              myChannel.invokeMethod('my_method', {'key': 'value'});
            },
            child: Text('Invoke Method'),
          ),
        ),
      ),
    );
  }
}
回到顶部