如何将消息从Flutter传递给Native?

时间:2018-03-04 19:18:45

标签: android ios dart flutter

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

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

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

4 个答案:

答案 0 :(得分:22)

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

  1. 将字符串值从flutter传递到Android代码
  2. 从Android代码中获取响应以振动
  3. 代码基于以下示例:https://flutter.io/platform-channels/#codec

    1.Passing string value“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();
                        }
                    }
    

    希望这有帮助!

答案 1 :(得分:4)

是的,flutter确实有一个EventChannel类,这正是你正在寻找的。

Here就是一个示例,演示了如何实现MethodChannelEventChannel。和 this中等文章展示了EventChannel如何在flutter中实现。

希望有所帮助!

答案 2 :(得分:1)

快速

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

答案 3 :(得分:0)

目标C

call.arguments [@“ parameter”]