如何将参数从 Flutter 传递给 Kotlin?
Posted
技术标签:
【中文标题】如何将参数从 Flutter 传递给 Kotlin?【英文标题】:How to pass arguments from Flutter to Kotlin? 【发布时间】:2018-08-19 11:30:22 【问题描述】:我已经开始学习 Flutter。我正在尝试使用 MethodChannel 和 MethodCall 与 android 平台进行通信。我不知道如何将参数传递给 Android 代码。
下面是我的代码。
// dart
void _onClick() async
var parameters = 'image':'starry night';
await platform.invokeMethod('showToast', new Map.from(parameters));
// kotlin
MethodChannel(flutterView, CHANNEL).setMethodCallHandler call, result ->
Log.d("MainActivity", ">> $call.method, $call.arguments")
when (call.method)
"showToast" ->
showToast("toast")
else ->
Log.d("MainActivity", "fail");
我可以通过我打印的日志消息检查我传递的争论值。
image=starry night
但我不知道如何解析为地图对象。
【问题讨论】:
您是否尝试将call.arguments
转换为Map
?我不确定你的问题是什么......
@StefanGolubović 谢谢val arguments = call.arguments as java.util.HashMap<String, String>
工作正常。
【参考方案1】:
Dart 端(发送数据)
var channel = MethodChannel('foo_channel');
var dataToPass = <String, dynamic>
'os': 'Android',
;
await channel.invokeListMethod<String>('methodInJava', dataToPass);
Java 端(接收数据):
if (methodCall.method.equals("methodInJava"))
// Get the entire Map.
HashMap<String, Object> map = (HashMap<String, Object>) methodCall.arguments;
Log.i("MyTag", "map = " + map); // os=Android
// Or get a specific value.
String value = methodCall.argument("os");
Log.i("MyTag", value); // Android
【讨论】:
【参考方案2】:颤动
在 Flutter 方面,您可以通过将参数作为映射包含在 invokeMethod
调用中来传递参数。
_channel.invokeMethod('showToast', 'text': 'hello world');
科特林
在 Kotlin 方面,您可以通过将 call.arguments
转换为 Map 或从 call.argument()
获取特定参数来获取参数。
override fun onMethodCall(call: MethodCall, result: Result)
when (call.method)
"showToast" ->
val text = call.argument<String>("text") // hello world
showToast(text)
【讨论】:
能否请您也显示 Java 代码?有什么例子吗? 我没有 Java 代码,但如果其他人确实可以随意编辑此答案或添加另一个答案。以上是关于如何将参数从 Flutter 传递给 Kotlin?的主要内容,如果未能解决你的问题,请参考以下文章
如何将用户的TextFormField输入传递给flutter中不同类的按钮
从 Flutter 的方法通道访问 Kotlin 中的参数数据
如何读取将作为 MultipartFile 参数传递的 SQLite 文件? (在 java/kotlin 中)
如何将editText值传递给viewModel和Livedata(Kotlin)