Flutter 很好的支持了以独立页面、甚至可以通过UI片段的方式集成到现有的应用中,即所谓的混合开发模式。
统一管理模式:
将原生工程作为Flutter工程的子工程,由Flutter进行统一管理。
分离模式:
将flutter工程作为原生工程的子模块,维持原有的原生工程管理方式不变
Flutter 工程模式
- Flutter APP:构建一个标准的FlutterAPP 统一管理的模式,包含Dart层和平台层
- Flutter Plugin:Flutter平台插件,包含Dart层和Native平台层的实现
- Flutter Package:纯Dart插件工程,不依赖Flutter,仅包含Dart层的实现,通常用来定义一些公共库
- Flutter Module:创建一个Flutter模块,以模块的形式分别嵌入原生项目
- Flutter Skeleton:自动生成Flutter模板,提供常用框架
通过命令的方式创建:
Flutter - Native 消息通道
- BasicMessageChannel: 用于传递字符串和半结构化的消息
Flutter 端的实现:
static const _channel = BasicMessageChannel("messageChannel", StringCodec());
@override
void initState() {
super.initState();
//注册一个接收回调,并且返回信息
_channel.setMessageHandler((message) async {
print("receive message:$message");
setState(() {
_message = message;
});
return "ACK from dart";
});
}
//向Native发送消息
Future<void> _sendMessage() async {
String? message = await _channel.send("hello from dart");
print("Send Message:$message");
}
Android端的实现:
//创建channel
val channel = BasicMessageChannel(
flutterEngine.dartExecutor.binaryMessenger,
"messageChannel",
StringCodec.INSTANCE
)
//接收消息的回调,并回复
channel.setMessageHandler { message, reply ->
Log.e("TAG", "configureFlutterEngine: $message")
reply.reply("my android to flutter->")
Handler(Looper.getMainLooper())
.postDelayed({
//3.发送消息
channel.send("Hello World form Android")
},1000)
}
EventChannel:用于数据流Stream的通信方式
//注册EventChannel回调
_eventChannel.receiveBroadcastStream().listen((event) {
print("Receive event:$event");
setState(() {
_message = event;
});
}, onError: (error) {
print('Receive error:$error');
}, cancelOnError: true);
MethodChannel:用于传递方法调用 (主要的用法)