我想退出我的应用程序.我已经实现了一个WillPopScope,但是看起来onWillPop函数根本没有被调用.我try 了很多方法,比如将WillPopScope与Scaffold互换,更改函数的返回值,但它看起来并不像预期的那样工作.

我的代码是:

Future<bool> _willPopCallback() async {
  exit(0);
  // await showDialog or Show add banners or whatever
  // then
  return true; // return true if the route to be popped
}


return Scaffold(
    appBar: MyAppBar(
      leading: DrawerAction(),
      title: Text(AppLocalizations.of(context).textCapitalized('home_page')),
      onSearch: (searchTerms) => this.search(searchTerms, context),
    ),
    body: new WillPopScope(
      onWillPop: _willPopCallback, // Empty Function.
      child: //my screen widgets

我不确定这是一个错误,我应该向Ffltter报告,还是我做错了什么.很高兴根据要求提供更多代码.

我试过:

exit(0);
Navigator.of(context).pop();
SystemChannels.platform.invokeMethod('SystemNavigator.pop');

提前谢谢!

推荐答案

我设法解决了我的问题,我认为这是一个非常特殊的情况,但它仍然可能对某人有所帮助.

TL;DR: Ensure that you dont have multiple Scaffolds in your widgets

我在菜单导航器中使用的是IndexedStack,显然是用脚手架包裹的.堆栈的页面也有Scaffold,使用这种组合,WillPopScope既不能在导航页面中工作,也不能在它的堆栈页面中工作.我通过删除堆栈页中的所有脚手架并在控制器中只有一个来解决问题.通过这种方式,我设法正确地使用了WillPopScope.

Flutter相关问答推荐

如何防止alert 对话框在收到通知时出现在某个flutter页面中

获取屏幕大小的滚动视图与动态大小?

想更新ListView上的索引点击块Flutter

使用GO_ROUTER在模式内导航

Flutter 文件拾取器Android SingleInstance模式它返回的文件路径为空

在创建显示此错误的Flutter 深度链接时

Flutter如何将2个以上的值传递到ListView上的另一个屏幕?

Flutter在CustomPainter的右上角和左上角添加了2条曲线

从future 列表到流列表Flutter Firebase

Flutter CarouselSlider中如何防止右图与放大的中心图重叠?

显示图像的放大部分

Flutter 包错误:此应用程序使用的是已弃用的 Android 嵌入版本

在我使用 flutter_riverpod stateprovider 重新保存代码之前,UI 主题状态不会更新

Android Electric eel Mac M1:运行 flutter doctor -v 时无法找到Bundle 的 java 版本

我可以定义一次 sharedPreferences 并在需要数据显示到 flutter 应用程序时调用它吗?

为什么轮播加载图片很慢?

Listview 如何转到下一行/新行?

更改文本字段Flutter 中最大字母的 colored颜色

如何在椭圆形图像周围添加边框?Flutter

Flutter Web App 未启动:脚本的 MIME 类型不受支持