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());@overridevoid 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端的实现:
//创建channelval 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:用于传递方法调用 (主要的用法)

