【问题标题】:How to pass a message from Flutter to Native?如何将消息从 Flutter 传递到 Native?
【发布时间】:2018-08-12 10:56:29
【问题描述】:

如果需要与特定的 API/硬件组件交互,您将如何将信息从 Flutter 传递回 Android/Native 代码?

是否有任何事件通道可以以其他方式或类似于回调的方式发送信息?

  1. platform_channel 文档指出“方法调用也可以反向发送,平台充当 Dart 中实现的方法的客户端。quick_actions plugin 就是一个具体示例。”在这种情况下,我看不到原生端如何接收来自 Flutter 的消息。
  2. 看起来BasicMessageChannel的send()方法可以用来发送“指定消息到这个频道上的平台插件”。谁能提供一个简单的实现示例?

【问题讨论】:

    标签: android ios dart flutter


    【解决方案1】:

    是的,flutter 确实有一个 EventChannel 类,这正是您正在寻找的。​​p>

    Here 是一个演示如何实现MethodChannelEventChannel 的示例。和 this 中篇文章展示了如何在 Flutter 中实现 EventChannel

    希望有所帮助!

    【讨论】:

      【解决方案2】:

      这是一个简单的实现展示:

      1. 将字符串值从颤振传递到 Android 代码
      2. 从 Android 代码中获取响应以进行颤动

      代码基于来自:https://flutter.io/platform-channels/#codec的示例

      1.传递字符串值“text”:

      String text = "whatever";
      
      Future<Null> _getBatteryLevel(text) async {
      String batteryLevel;
      try {
        final String result = await platform.invokeMethod('getBatteryLevel',{"text":text}); 
        batteryLevel = 'Battery level at $result % .';
      } on PlatformException catch (e) {
        batteryLevel = "Failed to get battery level: '${e.message}'.";
      }
      
      setState(() {
        _batteryLevel = batteryLevel;
      });
      

      }

      2. RandomFunction() 后返回响应“batterylevel”;

       public void onMethodCall(MethodCall call, MethodChannel.Result result) {
                          if (call.method.equals("getBatteryLevel")) {
      
                              text = call.argument("text");
                              String batteryLevel = RandomFunction(text);
      
                              if (batteryLevel != null) {
                                  result.success(batteryLevel);
                              } else {
                                  result.error("UNAVAILABLE", "Battery level not available.", null);
                              }
                          } else {
                              result.notImplemented();
                          }
                      }
      

      希望这会有所帮助!

      【讨论】:

      • 如何获取字符串列表
      • @Yeahia2508 你有答案吗?
      • 我用其他方法解决了我的问题。 stackoverflow.com/questions/52456013/…
      • @Yeahia2508 我已经找到了一个好的方法来做这件事。如果您仍然感兴趣,请告诉我
      • 请在我的问题中添加您的答案。 @Gregga17
      【解决方案3】:

      目标 C

      call.arguments[@"parameter"]
      

      安卓

      call.argument("parameter");
      

      【讨论】:

      • 安卓呢?
      • Android - Java ---> call.argument("parameter");
      • 在 kotlin 中怎么样
      • @HZan,在 Kotlin 中:val s: String? = call.argument("parameter")
      【解决方案4】:

      快速

          guard let args = call.arguments as? [String : Any] else {return}
          let phoneNumber = args["contactNumber"] as! String
          let originalMessage = args["message"] as! String
      

      【讨论】:

        【解决方案5】:

        如果有人想通过调用方法将数据从本地共享到颤振 按照这个:

        main.dart

        Future<dynamic> handlePlatformChannelMethods() async {
          platform.setMethodCallHandler((methodCall) async {
           if (methodCall.method == "nativeToFlutter") {
             String text = methodCall.arguments;
             List<String> result = text.split(' ');
             String user = result[0];
             String message = result[1];
            }
           }
          }
        

        MainActivity.java

         nativeToFlutter(text1:String?,text2:String?){
         MethodChannel(flutterEngine!!.dartExecutor.binaryMessenger, 
          CHANNEL.invokeMethod("nativeToFlutter",text1+" "+text2);
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-29
          • 1970-01-01
          • 2019-04-02
          • 2019-06-17
          • 2019-10-08
          • 1970-01-01
          相关资源
          最近更新 更多