美文网首页
Native调用Flutter(二)

Native调用Flutter(二)

作者: _悟_空 | 来源:发表于2021-08-22 13:52 被阅读0次

    在学习本编文章之前,如果您还不了解Flutter如何调用Native那么请点这里。否则可能会阻碍您的理解。

    Native调用Flutter,分为:
    1.回调(Flutter调用Native后,Native回调给Flutter)。
    2.主动调用(Native主动去调用Flutter)。
    

    一、回调(核心代码👇)

       //  android plugins 中
        @Override
        public void onMethodCall(MethodCall call, MethodChannel.Result result) {
            switch (call.method) {
                case "method_flag":
                    result.success("native 返回值给 flutter");// android端回调给Flutter端。
                    break;
                default:
                    result.notImplemented();
                    break;
            }
        }
    
      // dart中
      void flutteePassValueToAndroidAndGetBack() async {
        var backResult= await new MethodChannel("Channel_name").invokeMethod("method_flag", "flutter 传值给 native");
        print("----回调值-------$backResult");
      }
    

    二、主动调用(核心代码👇)

    native主动调用Flutter与Flutter主动调用native使用上是类似的。调用端需要通过MethodChannel.invokeMethod去调用。被调用端需要注册MethodChannel.setMethodCallHandler监听。

    // dart中
      MethodChannel _channel = new MethodChannel("Channel_name");
      _channel.setMethodCallHandler(onMethodCall);
    
      // flutter注册MethodCallHandler供Native调用方法与android中注册一样。
      Future<dynamic> onMethodCall(MethodCall call) async {
        switch (call.method) {
          case "native-invoke-flutter":
            var argument = call.arguments;
            print("---------$argument");
            return "flutter 获得结果返回给native"; // 这里是Flutter返回结果给 native;
          default:
            return "";
        }
      }
    
    // android 中
    MethodChannel channel = new MethodChannel(binaryMessenger, "Channel_name");
    
    channel.invokeMethod("native-invoke-flutter", "这是native 主动调用 flutter的参数", new MethodChannel.Result() {
         @Override
         public void success(Object result) { // 调用dart中的方法,成功回调。 
              Log.d("=---==--==", "success: result = " + result.toString());
         }
    
         @Override
          public void error(String errorCode, String errorMessage, Object errorDetails) {
    
         }
    
         @Override
         public void notImplemented() {
    
        }
    });
    

    项目地址

    相关文章

      网友评论

          本文标题:Native调用Flutter(二)

          本文链接:https://www.haomeiwen.com/subject/tgwciltx.html