UniFlutterModule 是 Unify 提供的模板注解之一,它的主要作用是:实现 Native → Flutter 的数据传递
。UniFlutterModule 模板定义的协议接口需在 Flutter 侧进行实现。
-
包含
@UniFlutterModule()
文件,我们称为 UniFlutterModule 模板文件,它修饰的类只应包含函数声明,不应包含函数实现。 -
使用
@UniFlutterModule()
作为元数据时,我们声明的协议接口
需定义在抽象类
中。 -
约定的
协议接口
在 Flutter 侧会被生成到抽象类中,我们可以通过extends
关键字继承抽象类,去实现约定的协议接口
。 -
声明
协议接口
时,完全按照定义抽象接口的语法去定义。协议接口参数支持的数据类型参见:Unify 支持的数数据类型 。 -
UniFlutterModule 模板文件可以引用 UniModel 模板文件。引用方式和 Dart 语法中跨文件引用方式一样,使用
import
关键字实现。
模板中抽象类命名
,要使用模板文件名
经过下划线转驼峰格式后得到的名称。或者模板文件名
直接使用模板中定义的抽象类名
。
Tips:这点很重要,定义类名和文件名,一定要遵守上面规则,否则可能影响代码生成。
在实际场景中,会遇到”原生“需要主动调用 Flutter,向 Flutter 传递消息。Flutter 收到消息后,去决策做什么。
Unify 提供的@UniFlutterModule()
修饰的模板,可以帮我们快速实现上面的通信场景。
- 原生通过简单的方法调用,就可以方便的将消息发送给 Flutter。
- Flutter 通过实现
协议接口
,可以方便的监听原生发来的消息。
可以按照下面方式定义 UniFlutterModule 模板:
import 'package:unify/api/api.dart';
import 'location_info_model.dart';
@UniFlutterModule()
abstract class LocationInfoService {
/// 更新定位信息
void updateLocationInfo(LocationInfoModel model);
}
Future
用于表示协议接口
需要使用异步方式,具体参见:定义同步异步接口。
@UniFlutterModule()
修饰的模板可以直接引用@UniModel()
修饰的模板。
Flutter侧要接收原生侧发送过来的数据,需要去实现协议接口
,分两步:
-
创建一个类,此类集成自
协议接口
所在的抽象类,并实现抽象类中的抽象方法即:协议接口
。 -
调用
协议接口
所在抽象类中的setup()
方法,注册步骤1
新建类的对象实体。注册时机:尽量的早,在数据被发送过来之前要完成注册
。
按照上面的步骤,在 Flutter 侧实现协议接口。以上面的模板所生成的代码场景为例:
- 定义一个实现了
通信协议
的类:LocationInfoServiceImpl
,继承自LocationInfoService
,并override
协议接口。实现代码如下:
/// location_info_service_impl.dart
import 'package:hello_uni_foundation/location_info_model.dart';
import 'package:hello_uni_foundation/location_info_service.dart';
class LocationInfoServiceImpl extends LocationInfoService {
@override
void updateLocationInfo(LocationInfoModel model) {
// TODO: implement updateLocationInfo
// 这里既可以通过LocationInfoModel获得Native侧传过来的定位信息数据
}
}
- 通过
LocationInfoService
的setup
方法注册LocationInfoServiceImpl
实例。比如在main.dart的main()
中注册。
import 'package:hello_uni_foundation/location_info_service.dart';
import 'location_info_service_impl.dart';
void main() {
......
LocationInfoService.setup(LocationInfoServiceImpl());
......
}
注册时机只要在Native侧发送数据之前就可以,依照实际情况自己确定。