Skip to content

Latest commit

 

History

History
51 lines (34 loc) · 2.84 KB

2.UniNativeModule.md

File metadata and controls

51 lines (34 loc) · 2.84 KB

UniNativeModule

UniNativeModule 是 Unify 提供的模板注解之一,它的主要作用是:实现 Flutter → Native 的数据传递UniNativeModule 模板定义的协议接口需在原生侧进行实现

描述

  1. 包含@UniNativeModule()文件,我们称为 UniNativeModule 模板文件,它修饰的类只应包含函数声明,不应包含函数实现。

  2. 使用@UniNativeModule()作为元数据时,我们声明的协议接口需要定义在抽象类中。

  3. 约定的协议接口在原生侧会生成相应的方法,协议接口在 iOS 侧会被定义在 Protocol 中;在 Android 侧会被定义在 interface 中。

  4. 声明协议接口时,完全按照定义抽象接口的语法去定义。协议接口参数支持的数据类型参见:Unify 支持的数数据类型

  5. UniNativeModule 模板文件可以引用 UniModel 模板文件。引用方式和 Dart 语法中跨文件引用方式一样,使用import关键字实现。

命名规则

模板中抽象类命名,要使用模板文件名经过下划线转驼峰格式后得到的名称。或者模板文件名直接使用模板中定义的抽象类名

Tips:这点很重要,定义类名和文件名,一定要遵守上面规则,否则可能影响代码生成。

举例

在实际场景中,会遇到 Flutter 需要主动调用原生,向原生传递消息。待原生收到消息后,去决策做什么,然后将结果返回给 Flutter

Unify 提供的@UniNativeModule()修饰的模板,可以帮我们快速实现上面的通信场景。

  1. Flutter 通过简单的方法调用,就可以将消息发送给 原生
  2. 原生 通过实现协议接口,可以方便的监听 Flutter 发来的消息。

比如:”Flutter 想查看手机设备参数:系统版本、内存信息、手机型号“。可以按照下面方式定义 UniNativeModule 模板:

import 'package:unify/api/api.dart';
import 'device_info_model.dart';

@UniNativeModule()
abstract class DeviceInfoService {
    /// 获取设备信息
    Future<DeviceInfoModel> getDeviceInfo();
}

Future 用于表示协议接口需要使用异步方式,具体参见:定义同步异步接口

选择使用同步还是异步,需要开发者依照实际场景,自行决策。

协议接口需在原生侧实现

原生侧要接收 Flutter 侧发送过来的数据,需要去实现协议接口,分两步:

  1. 创建遵守协议接口的类,并添加协议接口的具体实现。
  2. 注册步骤1所提到类的对象实体,注册方法参见:UniAPI类

iOS 如何使用 Protocol 和 Android如何使用 Interface,这里不多赘述。