uniapp

为了通信方便,封装了MethodChannel

源码:https://github.com/snice/uniapp-flutter/blob/main/js/flutter/flutter.js

  1. import { MethodChannel } from '@/js/flutter/flutter.js';
  2. let methodChannel = new MethodChannel('topMain'); // topMain 是 instanceId

方法:

$on

监听flutter发送的事件

  1. methodChannel.$on('test', e => {
  2. console.log('test', e);
  3. if (e.callbackId) { // callbackId存在说明,需要回调数据
  4. methodChannel.callback(e.callbackId, { result: 3 });
  5. } else {
  6. uni.showToast({
  7. title: JSON.stringify(e),
  8. icon: 'none'
  9. });
  10. }
  11. });

$off

取消监听flutter发送的事件

  1. methodChannel.$off('test');

$emit

向flutter发送消息

  1. // 发送消息,无返回数据
  2. methodChannel.$emit('test', { a: 3 });
  3. // 发送消息,又返回数据
  4. methodChannel.$emit('test', { a: 3 }, e => {
  5. uni.showModal({
  6. title: JSON.stringify(e)
  7. });
  8. });

callback

配合$on使用,给flutter传递回调数据

  1. let callbackId = 'test';
  2. methodChannel.callback(callbackId, { result: 3 });

flutter

为了方便通信,封装了UniappMethodChannel
源码:https://github.com/snice/uniapp-flutter-module/blob/master/lib/channel/uniapp.dart

方法:

以下代码示例中uniapp变量,来自https://github.com/snice/uniapp-flutter-module/blob/master/lib/common/global.dart
也就是UniappMethodChannel的全局实例

$on

监听uniapp发送的事件

  1. uniapp.$on('test', (Map<String, dynamic> map) {
  2. print('test:' + map.toString());
  3. if (map.containsKey("callbackId")) {
  4. uniapp.callback(map['callbackId'], {'a': 6});
  5. }
  6. });

$off

取消监听uniapp发送的事件

  1. uniapp.$off('test');

$emit

向uniapp发送消息

  1. uniapp.$emit('test', {'test': _counter});

$emitSync

向uniapp发送消息,需要返回值使用

  1. var value = await uniapp.$emitSync('test', {'test': _counter});
  2. print(value);