如何在flutter中将数据从android模块传递到flutter模块



我已经通过以下步骤成功地在我的原生android应用程序中集成了flutter模块。

缓存flutter引擎的过程我已经在应用程序类中完成了。我正在用这个来自安卓的碎片启动我的flutter屏幕。

startActivity(
FlutterActivity
.withCachedEngine("my_engine_id")
.build(currentActivity)
);

现在,我想将我的auth token传递给flutter模块,以便进行api调用。

我从这里开始遵循这个过程,并在dart代码中创建了方法通道,但我不知道在本地端的哪里创建method channel

如果我在project/moduleName/.android/app/src/main/java/com/package/host/MainActivity.java中创建它

它给出异常Unhandled Exception: MissingPluginException(No implementation found for method

还要注意的是,当我在Android studio中创建这个flutter模块时,默认情况下,这个文件夹被放置在.gitignore中。

我已经看了一些旧的教程,但它们中没有这种颤振引擎选项的缓存。

请告诉我哪里做错了?

您需要有一个Flutter引擎的引用,然后使用它来创建方法通道。考虑到启动Flutter活动的活动/片段负责管理方法通道。

private const val FLUTTER_ENGINE_ID = "flutter_engine"
private const val CHANNEL = "myApp.flutter.dev/auth"
class MainActivity : AppCompatActivity(R.layout.activity_main) {
private lateinit var flutterEngine: FlutterEngine
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setupFlutterEngine()
setupMethodChannel()
setSupportActionBar(findViewById(R.id.toolbar))
fab.setOnClickListener {
launchFlutterModule()
}
}
private fun setupFlutterEngine() {
createAndConfigureFlutterEngine()
FlutterEngineCache
.getInstance()
.put(FLUTTER_ENGINE_ID, flutterEngine)
}
private fun createAndConfigureFlutterEngine() {
flutterEngine = FlutterEngine(this)
flutterEngine.dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
}
private fun setupMethodChannel() {
MethodChannel(
flutterEngine.dartExecutor.binaryMessenger,
CHANNEL
).setMethodCallHandler { call, result ->
// All your implementation for auth token
}
}
private fun launchFlutterModule() {
startActivity(getFlutterIntent())
}
private fun getFlutterIntent(): Intent {
return FlutterActivity
.withCachedEngine(FLUTTER_ENGINE_ID)
.backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent)
.build(this)
}
}

你可以制作一个Wrapper,在那里你可以保存方法通道代码和flutter引擎设置,这个包装器是Application类中的init,或者可能是init,并在需要的地方注入DaggerHilt

您可以将简单数据作为请求参数进行传递。安卓代码:

FlutterActivity
.withNewEngine()
.initialRoute("/MyPage?username=my_user&age=30&gender=male")
.build(MainActivity.this)

Flutter代码,我使用GetX库来获取的参数

Map<String, String?> parameters = Get.parameters;
print("parameters: $parameters");

输出:

parameters: {username: my_user, age: 30, gender: male}
  • 首先创建带有通道的flutter平台客户端
  • set methodCallHamdler通过相同通道请参阅本官方文件-https://flutter.dev/docs/development/platform-integration/platform-channels

相关内容

  • 没有找到相关文章

最新更新