我在网上找了很多例子,很多都没有说到痛点,而且很多都是Copy来Copy去的,都是继承自FlutterActivity。
我这里就为了展示一种不继承FlutterActivity的。
我只讲关键方法和步骤,其他自行百度一大把
首先Java代码:
//通信插件
MethodChannel channel;
//标记 这个是与flutter进行通信的标记 也可以理解为频道,自定义 随便写
private static final String CHANNEL = "samples.flutter.io/battery";
//启动flutter
private void startFlutterActivity() {
//创建flutterview,
FlutterView flutterView = Flutter.createView(this, getLifecycle(), "r1");
flutterView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams
.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
center.addView(flutterView);
channel = new MethodChannel(flutterView,CHANNEL);
//网上很多都是这一步就没了,这里仅仅是注册了监听的方法,没有说如何传递参数给flutter
channel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
//测试flutter传递过来的信息,仅仅是传递过来!!!result可以做一些事返回给flutter
//但是我们想要在外面进行传递就有些麻烦,所还需要实现一个方法 传递!!
Log.e("print",methodCall.arguments.toString()+methodCall.method);
}
});
//传递参数给flutter,参数分别为名字,参数,以及回调方法
private void sendFlutterMsg() {
channel.invokeMethod("getFlutterName", null, new MethodChannel.Result() {
@Override
public void success(@Nullable Object o) {
Log.e("debug", "success" + o.toString());
}
@Override
public void error(String s, @Nullable String s1, @Nullable Object o) {
Log.e("debug", "error" + o.toString());
}
@Override
public void notImplemented() {
Log.e("debug", "没有实现");
}
});
}
到这里 java代码基本结束。
flutter实现代码,有点点多 但是不复杂一样,只是要实现2个,一个监听的,一个发送的:
//实现插件 以及 参数是对应频道,和原生交互频道代码一致即可!!!
MethodChannel platform = const MethodChannel("samples.flutter.io/battery");
在initState()里面初始化监听
@override
void initState() {
super.initState();
platform.setMethodCallHandler(platformCallHandler);
}
//实现监听
Future<dynamic> platformCallHandler(MethodCall call) async {
switch (call.method) {
case "getFlutterName":
setState(() {
_counter = "Flutter name flutter";
});
return "Flutter name flutter";
break;
}
//向原生发送代码 首先是方法名,然后是可变数组作为参数
void _sendAndroidMsg() {
platform.invokeMethod("flutter",{"url":"http://www.baidu.com"});
}
结束了,其中注意的几个点:
1:通信的频道 也就是 channel 要统一
2:flutter记得要首先初始化,不然会收不到的
网上一搜一大把 到处是copy过来的,我也是收集了挺多 最后整理处理这个出来,也方便自己记忆
网友评论