我在add2app场景中使用flutter,其中主机应用程序启动flutterView并且flutter视图是flutter模块,如https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps
我有一个带有片段的活动。 片段有
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
FlutterView flutterView = Flutter.createView(getActivity(), getLifecycle(), route);
GeneratedPluginRegistrant.registerWith(flutterView.getPluginRegistry());
return flutterView;
我想知道最好的清洗方法是什么,以便在应用栏中的dart代码中左上方可以有一个后退按钮,该按钮可以在主机片段及其活动中实现super.onBackPressed的效果-即左上后退按钮的行为与硬件后退按钮的行为相同,可将您返回到主机应用程序后退堆栈中的上一个屏幕。
我尝试过
appBar: AppBar(
leading: BackButton()
title: const Text("My Screen Title),
),
,但是正如预期的那样,因为它是initialRoute,则canPop = false。 我还尝试了一个自定义BackButton(),除了代替
之外,该按钮完全相同return IconButton(
icon: const BackButtonIcon(),
color: color,
tooltip: MaterialLocalizations.of(context).backButtonTooltip,
onPressed: () {
Navigator.maybePop(context);
}
);
像使用的back_button.dart
Navigator.Pop(context);
代替
Navigator.maybePop(context);
完全令人惊讶的是,它会导致黑屏,而不是返回到Android平台的Java代码。
我希望我可以并且很可能会使用平台调用来执行fragment.getActivity()。finish(),但是我想知道是否还有更好的方法,因为这似乎很基础。
预先感谢
答案 0 :(得分:1)
查看此问题的另一种方法是:如何从Flutter应用发送消息以指示Android采取某些措施。
在这种情况下,您想要的是在Flutter中点击后退按钮,以使Android finish()
当前的Activity,或指示包含的Fragment采取一些自定义导航操作。
Dart与Android之间的消息传递是通过使用平台渠道来完成的。以下指南介绍了如何设置和使用平台渠道:
https://flutter.io/docs/development/platform-integration/platform-channels
因此,我将从Flutter中的类似以下内容开始:
MaterialApp(
appBar: AppBar(
leading: IconButton(
icon: Icons.back,
onPressed: () {
// Send your platform channel message, or invoke some other method that will.
}
),
title: const Text("My Screen Title),
),
);
答案 1 :(得分:0)
我知道帖子很旧,但是我只是在寻找相同的东西,因此可以通过调用以下代码从Dart代码中完成:
SystemNavigator.pop();
Flutter iOS add-to-app doc中提到了它,但它也可以在Android上使用。