如何将消息从 Flutter 传递到 Native?
Posted
技术标签:
【中文标题】如何将消息从 Flutter 传递到 Native?【英文标题】:How to pass a message from Flutter to Native? 【发布时间】:2018-08-12 10:56:29 【问题描述】:如果需要与特定的 API/硬件组件交互,您将如何将信息从 Flutter 传递回 android/Native 代码?
是否有任何事件通道可以以其他方式或类似于回调的方式发送信息?
-
platform_channel 文档指出“方法调用也可以反向发送,平台充当 Dart 中实现的方法的客户端。quick_actions plugin 就是一个具体示例。”在这种情况下,我看不到原生端如何接收来自 Flutter 的消息。
看起来BasicMessageChannel的send()方法可以用来发送“指定消息到这个频道上的平台插件”。谁能提供一个简单的实现示例?
【问题讨论】:
【参考方案1】:是的,flutter 确实有一个 EventChannel
类,这正是您正在寻找的。p>
Here 是一个演示如何实现MethodChannel
和EventChannel
的示例。和
this 中篇文章展示了如何在 Flutter 中实现 EventChannel
。
希望有所帮助!
【讨论】:
【参考方案2】:这是一个简单的实现展示:
-
将字符串值从颤振传递到 Android 代码
从 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 你有答案吗? 我用其他方法解决了我的问题。 ***.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);
【讨论】:
以上是关于如何将消息从 Flutter 传递到 Native?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 如何与 Native (Android) 进行交互 | 开发者说·DTalk
Flutter 如何与 Native (Android) 进行交互 | 开发者说·DTalk
React-Native - Firebase 云消息传递 - 如果从托盘打开则没有事件
8-9 Flutter与Native通信-Android端实战