将 Flutter 集成到原生宿主应用程序时从 Flutter 完成 FlutterActivity [Add2App]
Finish FlutterActivity from Flutter when integrating Flutter to native host app [Add2App]
将 Flutter 集成到主机应用程序 (docs) 时,有几种方法可以做到,其中之一(最简单)是通过 [=12= 在新的 Activity 中打开 Flutter ] class。
像这样:
// Java
hostActivity.startActivity(
FlutterActivity.withCachedEngine("my_engine_id").build(context)
);
传统上,对于 Android 样式 windows,我们在 Flutter 端创建带有 Back 按钮的 AppBar。
这个 AppBar back 按钮和 Android 系统 back 按钮的行为必须相同:前景 activity 必须按后退按钮时已关闭(完成)。
目前系统后退按钮确实关闭了FlutterActivity
,
但是如何从 flutters AppBar back 按钮中模拟这种行为呢?
// Dart - Flutter side
...
child: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
// WHAT MUST BE HERE?
}),
...
PS Flutter 端和主机之间的平台通道已建立——我可以从任何端调用任何代码
找到的解决方案:
SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop');
Removes the topmost Flutter instance, presenting what was before it.
On Android, removes this activity from the stack and returns to the
previous activity.
此处的文档:api reference
...
leading: BackButton(
onPressed: () => {
if (Navigator.canPop(context))
{Navigator.pop(context)}
else
{SystemNavigator.pop()}
},
)
...
将 Flutter 集成到主机应用程序 (docs) 时,有几种方法可以做到,其中之一(最简单)是通过 [=12= 在新的 Activity 中打开 Flutter ] class。 像这样:
// Java
hostActivity.startActivity(
FlutterActivity.withCachedEngine("my_engine_id").build(context)
);
传统上,对于 Android 样式 windows,我们在 Flutter 端创建带有 Back 按钮的 AppBar。
这个 AppBar back 按钮和 Android 系统 back 按钮的行为必须相同:前景 activity 必须按后退按钮时已关闭(完成)。
目前系统后退按钮确实关闭了FlutterActivity
,
但是如何从 flutters AppBar back 按钮中模拟这种行为呢?
// Dart - Flutter side
...
child: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
// WHAT MUST BE HERE?
}),
...
PS Flutter 端和主机之间的平台通道已建立——我可以从任何端调用任何代码
找到的解决方案:
SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop');
Removes the topmost Flutter instance, presenting what was before it.
On Android, removes this activity from the stack and returns to the previous activity.
此处的文档:api reference
...
leading: BackButton(
onPressed: () => {
if (Navigator.canPop(context))
{Navigator.pop(context)}
else
{SystemNavigator.pop()}
},
)
...