广泛意义上的flutter插件是包含两种的Package 和插件 (plugin) ,有什么区别呢? 插件 (plugin) 是 package 的一种,全称是 plugin package,我们简称为 plugin,中文叫插件。可以去官网查看
在 Flutter 里使用 Packages | Flutter 中文文档 | Flutter 中文开发者网站
开发插件有常规方式,目前很多使用Fluttify
插件开发方式的
Fluttify
插件开发方式(Native薄,Dart厚)
这里是记录常规方式,flutter调用安卓原生代码的插件,自己开发本地使用,本文编辑与2022-03,随着flutter sdk的更新可能会发生变化
Flutter插件流程
1.使用android studio新建一个工程,New -New Flutter Project,type选择plugin,插件的名称,不支持大写开头,建议下划线分隔。
几个主要的目录分别为 android,example,ios,lib 这四个目录:
android 目录是一个完整的 Android 工程,用来开发 Android 端的插件功能example 目录是一个完成的Flutter工程可运行安装,用来测试 Android 或者 IOS 端的插件功能ios 目录是一个完整的 IOS 工程,用来开发 IOS 端的插件功能lib 目录中的文件负责和 Android 或者 IOS 端的交互,dart文件注意这里打开对应的java或者kotlin类会红色报错,是正常的没关系,点击编辑区右上角open for editing in android studio即可正常进入安卓工程编辑。
新建好工程后会自动生成一个XXPugin的类,XX就是你插件的名称,这个类是插件安卓代码的入口。类实现FlutterPlugin, MethodCallHandler接口,flutter和原生的方法互相调用就在这里,onAttachedToEngine函数里面MethodChannel建立连接,如果要获取上下文context, flutterPluginBinding可以直接取得。要获取activity可以通过implement ActivityAware接口获得
context = flutterPluginBinding.applicationContext;
使用registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar)获取context已经废弃了。
注意MethodChannel里面的name必须和dart端的一致,比如:
java:
channel = new MethodChannel(messenger, "plugins.flutter.io/url_launcher_android");
dart:
const MethodChannel _channel = MethodChannel('plugins.flutter.io/url_launcher_android');
onMethodCall就是flutter调用安卓原生的代码这里了,call包含方法名,参数等,result.success(Object obj)回调成功,result.error可抛出错误信息
一般都在插件的lib目录下的dart类里面写好static方法,提供给flutter项目直接调用。
补充知识,Flutter 与 Native 端通信有如下3个方法:
MethodChannel:Flutter 与 Native 端相互调用,调用后可以返回结果,可以 Native 端主动调用,也可以Flutter主动调用,属于双向通信。此方式为最常用的方式, Native 端调用需要在主线程中执行。BasicMessageChannel:用于使用指定的编解码器对消息进行编码和解码,属于双向通信,可以 Native 端主动调用,也可以Flutter主动调用。EventChannel:用于数据流(event streams)的通信, Native 端主动发送数据给 Flutter,通常用于状态的监听,比如网络变化、传感器数据等欢迎分享,转载请注明来源:内存溢出
评论列表(0条)