【问题标题】:Flutter: Pushing back button should allow the app to go to backgroundFlutter:按下后退按钮应该允许应用程序进入后台
【发布时间】:2019-01-28 07:07:49
【问题描述】:

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

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]()));

有什么想法吗?

【问题讨论】:

  • 不确定您在寻找什么?你能说清楚吗?
  • @HarshBhikadia 我已经更新了描述,现在有什么想法吗?

标签: flutter flutter-layout


【解决方案1】:

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

我建议用另一个 Navigator 包裹 Scaffold(仅用于推动/弹出底部表)。您现在将拥有嵌套的导航器 - 一个在 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(...),
            ),
      ),
    );
  }

【讨论】:

  • 如果没有请告诉我
  • 我认为这应该可行,会更新它的表现,并将问题保持几天。
  • 我已经发布了一个后续问题,stackoverflow.com/questions/57878730/...
【解决方案2】:

用 WillPopscope 包裹您的底部工作表小部件

onWillPop: () {
  return Future.value(false);
},

【讨论】:

    猜你喜欢
    • 2020-04-13
    • 1970-01-01
    • 2019-12-30
    • 2014-01-02
    • 2020-07-26
    • 2016-08-31
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多