gpt4 book ai didi

android - 在 Flutter 中获取 Android Activity 结果

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:40 26 4
gpt4 key购买 nike

我有一个不能直接在 Flutter 中使用的第三方 Android 控件。我把它放在一个 Android Activity 中。然后,使用来自 https://flutter.io/docs/development/platform-integration/platform-channels#step-3b-add-an-android-platform-specific-implementation-using-kotlin 的信息,我可以成功启动该 Activity 并在那里执行一些操作。唯一不起作用的部分是从 Activity 发回结果。

flutter 代码:

void showDialog() async
{
try {
final Map<String, List<double>> result = await platform.invokeMethod('show_dialog',
<String, String>{
'address': widget.user.address
});
widget.user.address = result.keys.toList()[0];
} on PlatformException catch (e) {
print('Failed to pick address: ${e.message}.');
}
}

安卓代码:

class MainActivity: FlutterActivity() {
private val CHANNEL = "dialog"
private lateinit var _result: MethodChannel.Result
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)
MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "show_dialog") {
_result = result
val intent = Intent(this@MainActivity, DialogActivity::class.java)
intent.putExtra("address", call.argument<String>("address"))
startActivityForResult(intent, 9689)
}
else result.notImplemented()
}
}
override fun onActivityResult(requestCode: Int, result: Int, intent: Intent?) {
if(requestCode != 9689)
return super.onActivityResult(requestCode, result, intent)
if (result == Activity.RESULT_OK) {
_result.success(mapOf(intent!!.getStringExtra("address") to
listOf(intent.getDoubleExtra("latitude", 0.0),
intent.getDoubleExtra("longitude", 0.0))))
}
else
_result.success(null)
}
}

有什么问题? widget.user.address = result.keys.toList()[0]; 行上的断点从未到达,表明结果永远不会发回。

最佳答案

事实证明代码几乎是正确的。 Android 端不需要任何更改,但在 Flutter 端我必须进行此更改:

转身

final Map<String, List<double>> result = await platform.invokeMethod(

进入

final result = await platform.invokeMethod(

我。 e.简单地从变量中删除显式类型,因为 platform.invokeMethod 的返回值是某种内部 HashMap (特别是,它的名称以下划线开头)而不是 Map 指定。 Flutter 没有在控制台输出中显示任何错误,因为出于某种原因它只捕获 Android 日志,调试器附加到应用程序的 Android 部分,一旦我想出了如何在 Android Studio 中调试 Android 代码,我立即找到了原因.

关于android - 在 Flutter 中获取 Android Activity 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54140898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com