flutter和Android原生交互的三种方式

工作中用到了 flutter和Android原生的交互 写个demo 方便以后用

方式1

MethodChannel 该方式是Android原生和flutter直接互相传值

首先在flutter中定义一个方法 然后在点击事件中调用这个方法 比如

这样就会调用MethodChannel的方法 

然后 在Android原生代码中也就是Android目录下的MainActivity 重写configureFlutterEngine方法  

其中MethodChannel 定义的值 要和flutter中定义MechodChannel的参数保持一直  这样当flutter调用_startNativeActivity的时候 就会执行setMethodCallHandler方法 然后从call.method 匹配调用的方法名称 从call.argument获取传递的参数  最后调用result.success 返回给flutter 

log打印日志如下:

第二种交互方式 EventChannel 该方法flutter监听Android 原生的消息 比如 网络状态的变动 音量的大小等

首先在flutter 定义方法

class MyEventChannel {
  static const EventChannel _eventChannel = EventChannel("my_event_channel");
  static Stream<dynamic> get eventStream {
    return _eventChannel.receiveBroadcastStream();
  }
}这样就注册了接收器 当Android原生发送消息的时候 就会自动接收到消息 我们这里使用StreamBuilder来接收

然后在Android 原生中 我们模拟 个场景 每隔1秒向flutter发送一个数字

第三种方式 通过platFormView 调用Android原生组件通信 

首先 在flutter中定义一个组件 比如我这里是NativeView

定义sendMessageToNative方法 和原生通信 这里我们是用来修改Android原生TextView的内容

这里要注意的几个点 这里的viewType 要和等会在Android原生中定义的值要一样 然后在onPlatformViewCreated回调中 获取到id 这个id 然后再onPressed方法中将这个id 通过methodChanel.invokeMethod方法传递到Android原生

然后在Android原生代码中 在configureFlutterEngine方法中注册PlatformView 

这里的nativeChannel 要和在flutter中androidView中的viewType一样 

这里我们运行 模拟器上显示的是

我们点击图片按钮 触发sendMessageToNative方法 此时 你会发现TextView的值已经变成我们从flutter传递过来的值了

记录下

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FlutterAndroid交互可以通过平台通道(platform channel)来实现。平台通道允许Flutter应用程序与原生Android代码之间进行双向通信。 以下是使用平台通道进行FlutterAndroid交互的一般步骤: 1. 在Flutter应用程序中,使用`flutter create`命令创建一个新的Flutter项目,或者在现有项目中添加一个新的Android模块。 2. 在Flutter应用程序中创建一个`MethodChannel`对象,该对象用于在FlutterAndroid之间进行方法调用通信。例如,在Dart代码中添加以下代码: ```dart import 'package:flutter/services.dart'; // 创建 MethodChannel 对象 MethodChannel channel = MethodChannel('com.example.channelName'); // 在需要的地方调用原生 Android 方法 Future<void> callNativeMethod() async { try { final String result = await channel.invokeMethod('methodName'); print(result); } catch (e) { print('Error: $e'); } } ``` 3. 在Android项目中,创建一个类来处理来自Flutter应用程序的方法调用。例如,在Java代码中添加以下代码: ```java import io.flutter.app.FlutterActivity; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; public class MainActivity extends FlutterActivity { private static final String CHANNEL = "com.example.channelName"; @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); // 注册方法调用处理器 new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL) .setMethodCallHandler(new MethodCallHandler() { @Override public void onMethodCall(MethodCall call, Result result) { if (call.method.equals("methodName")) { // 处理来自Flutter方法调用 String response = someNativeMethod(); result.success(response); } else { result.notImplemented(); } } }); } // 原生 Android 方法的实现 private String someNativeMethod() { // 实现自己的逻辑 return "Response from Android"; } } ``` 在上述代码中,我们首先定义了一个与Flutter应用程序通信的通道名称(CHANNEL),然后注册了一个方法调用处理器。当Flutter应用程序调用`methodName`方法时,处理器将调用`someNativeMethod`方法并返回响应。 4. 最后,您可以在Flutter应用程序中调用`callNativeMethod`方法,这将触发与Android交互,并返回来自Android的响应。 请注意,上述代码只是示例,并且可以根据您的需求进行修改和扩展。此外,您还可以使用平台通道传递参数和接收回调,以实现更复杂的交互逻辑。 这是使用平台通道在FlutterAndroid之间进行基本交互的基本步骤。希望对您有所帮助!如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值