


@SuppressLint("SetTextI18n") @Override public void error(String errorCode, @Nullable String errorMessage, @Nullable Object errorDetails) { tvContent.setText("测试内容:flutter传递给na数据传递错误"); } @Override public void notImplemented() { }});``` // 注册方法,等待被原生通过invokeMethod唤起 Future<dynamic> nativeCallHandler(MethodCall methodCall) async { switch (methodCall.method) { case "getFlutterResult": //获取参数 String paramsFromNative = await methodCall.arguments["invokeKey"]; print("原生android传递过来的参数为------ $paramsFromNative"); return "你好,这个是从flutter回传给NA的数据"; break; } }```
StreamSubscription _streamSubscription; String _platformMessage; void _enableEventReceiver() { _streamSubscription = _channel.receiveBroadcastStream().listen( (dynamic event) { print('Received event: $event'); setState(() { _platformMessage = event; }); }, onError: (dynamic error) { print('Received error: ${error.message}'); }, cancelOnError: true); } void _disableEventReceiver() { if (_streamSubscription != null) { _streamSubscription.cancel(); _streamSubscription = null; } } @override initState() { super.initState(); _enableEventReceiver(); } @override void dispose() { super.dispose(); _disableEventReceiver(); }``` override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { GeneratedPluginRegistrant.registerWith(flutterEngine) channel = EventChannel(flutterEngine.dartExecutor.binaryMessenger, "com.example.eventchannel/interop") channel.setStreamHandler( object : StreamHandler { override fun onListen(arguments: Any?, events: EventSink) { eventSink = events Log.d("Android", "EventChannel onListen called") Handler().postDelayed({ eventSink?.success("Android") //eventSink?.endOfStream() //eventSink?.error("error code", "error message","error details") }, 500) } override fun onCancel(arguments: Any?) { Log.w("Android", "EventChannel onCancel called") } }) }}```

String _platformMessage; void _sendMessage() async { final String reply = await _channel.send('Hello World form Dart'); print(reply); } @override initState() { super.initState(); // Receive messages from platform _channel.setMessageHandler((String message) async { print('Received message = $message'); setState(() => _platformMessage = message); return 'Reply from Dart'; }); // Send message to platform _sendMessage(); }``` val channel = BasicMessageChannel( flutterEngine.dartExecutor.binaryMessenger, "com.ycbjie.android/basic", StringCodec.INSTANCE) // Receive messages from Dart channel.setMessageHandler { message, reply -> Log.d("Android", "Received message = $message") reply.reply("Reply from Android") } // Send message to Dart Handler().postDelayed({ channel.send("Hello World from Android") { reply -> Log.d("Android", "$reply") } }, 500) }}``` ByteData encodeMessage(T message); T decodeMessage(ByteData message);}``` channel.send(message); } ```- StandardMessageCodec
- 默认的数据编解码,绝大多数的情况下使用默认的就可以了。比如:MethodChannel,EventChannel @SuppressLint("SetTextI18n") @Override public void error(String errorCode, @Nullable String errorMessage, @Nullable Object errorDetails) { Log.i("测试数据异常:",errorMessage); } @Override public void notImplemented() { } }); } }}``` // 注册方法,等待被原生通过invokeMethod唤起 Future<dynamic> nativeCallHandler(MethodCall methodCall) async { switch (methodCall.method) { case "setNum": //获取参数 int message = await methodCall.arguments; print("原生android传递过来的参数为------ $message"); return "flutter回调数据:${message.toString()}"; break; } }```2021-08-26 12:07:09.272 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 1312021-08-26 12:07:09.273 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:1312021-08-26 12:07:09.273 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 1322021-08-26 12:07:09.273 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:1322021-08-26 12:07:09.273 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 1332021-08-26 12:07:09.273 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:1332021-08-26 12:07:09.273 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 1342021-08-26 12:07:09.273 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:1342021-08-26 12:07:09.273 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 1352021-08-26 12:07:09.274 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:1352021-08-26 12:07:09.274 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 1362021-08-26 12:07:09.274 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:1362021-08-26 12:07:09.274 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 1372021-08-26 12:07:09.274 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:137```//na,注意na接收到flutter指令后,na是调用startActivityForResult操作跳转到na的新页面nativeChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() { @Override public void onMethodCall(@NonNull MethodCall methodCall, @NonNull MethodChannel.Result result) { if ("doubi".equals(methodCall.method)) { //接收来自flutter的指令 //跳转到指定Activity Intent intent = new Intent(MethodChannelActivity.this, MethodResultActivity.class); startActivityForResult(intent,RESULT_OK2); //返回给flutter的参数 result.success("Na收到指令"); } }});``` @SuppressLint("SetTextI18n") @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android); TextView tv = findViewById(R.id.tv); tv.setText("flutter页面打开NA页面,测试Android原生页面返回Flutter页面"); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(); intent.putExtra("message", "我从原生页面回来了"); setResult(RESULT_OK2, intent); finish(); } }); }}// na flutter承载容器的na的原生页面@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null && resultCode==RESULT_OK2) { // MethodResultActivity返回的数据 String message = data.getStringExtra("message"); Map<String, Object> result = new HashMap<>(); result.put("message", message); // 调用Flutter端定义的方法 nativeChannel.invokeMethod("onActivityResult", result, new MethodChannel.Result() { @SuppressLint("SetTextI18n") @Override public void success(@Nullable Object result) { tvContent.setText("测试内容2:"+result); } @SuppressLint("SetTextI18n") @Override public void error(String errorCode, @Nullable String errorMessage, @Nullable Object errorDetails) { tvContent.setText("测试内容:flutter传递给na数据传递错误2"); } @Override public void notImplemented() { } }); }}//flutter Future<dynamic> handler(MethodCall call) async { switch (call.method) { case 'onActivityResult': // 获取原生页面传递的参数 print(call.arguments['message']); return "你好,这个是从flutter传递过来的数据"; } } flutterChannel.setMethodCallHandler(handler);```原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。