Flutter:按后退按钮应该允许应用程序转到后台

标签 flutter flutter-layout

我正在使用 Flutter BottomSheet 来显示信息,并且希望即使单击后退按钮也能保持 BottomSheet 始终可见,并且为了使其工作,我已经显式处理了 onWillPop 并保持 BottomSheet 即使在用户单击后退按钮时也处于 View 中、改变路线等

BottomSheet 的高度为 200,我想保留它,但在单击后退按钮时允许应用程序进入后台状态。

Widget _buildBody(context) => WillPopScope(
      onWillPop: () async {
        if(navigatorKey.currentState.canPop()) {
          navigatorKey.currentState.pop();
          return false;
        }else {
          // Returning true will remove the BottomSheet when back button is pressed, and if you press the back button one more time, the app will go to background state
          // return true;
        }
      },
      child: MaterialApp(
          navigatorKey: navigatorKey,
          onGenerateRoute: (route) => pagesRouteFactories[route.name]()));

有什么想法吗?

最佳答案

由于您只使用一个导航器,Scaffold 会将“BottomSheet”路线推送到与其他路线相同的导航器。所以不可能在两者之间插入一些东西。

我建议用另一个导航器包裹脚手架(仅用于推/弹出底板)。您现在将拥有嵌套的导航器 - 一个位于 MaterialApp 级别,一个位于 Scaffold 级别。从“应用程序”级别导航器中弹出内容 - 这不会触及您的底部工作表。一旦“应用程序”级导航器中没有任何内容,事件将关闭。

我认为这应该有效。

More info on Nested Navigator

编辑:代码

@override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: ()async{
        if(Navigator.of(context).canPop()) {
          Navigator.of(context).pop();
          return false;
        }
        return true;
      },
      child: Navigator(
        onGenerateRoute: (route) => MaterialPageRoute(
              builder: (context) => Scaffold(...),
            ),
      ),
    );
  }

关于Flutter:按后退按钮应该允许应用程序转到后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54397043/

相关文章:

flutter - 我如何离线获取 flutter 网站文档

flutter - 如何更改 Flutter 中文本字段的字体大小?

flutter - 水平 ListView / GridView 中不同大小的图像,具有固定高度和动态宽度

flutter - Flutter:RangeError(索引):无效值:不在0..14范围内,包括15

firebase - Flutter Firebase 时间戳

flutter - 根据另一个 DropdownButton [FLUTTER] 的值动态更改 DropdownButton 的值

在状态栏顶部 flutter 奇怪的填充

flutter - 如何根据主题更改TextFormField的文本颜色

dart - 如何在 Flutter 中制作两个 float 操作按钮?

flutter - 如何用Flutter(Card Widget)来做这样的布局?