【问题标题】:How to get the number of routes in Navigator's stack如何获取 Navigator 堆栈中的路由数量
【发布时间】:2023-03-16 13:48:01
【问题描述】:

有没有办法知道当前页面是否是导航器堆栈中的最后一页,此时调用Navigator.pop() 将关闭应用程序?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您可以使用此代码检查路线是否是第一条:

    ModalRoute.of(context).isFirst
    

    所以完整的代码将是

    if(! ModalRoute.of(context).isFirst)
    Navigator.pop();
    

    【讨论】:

      【解决方案2】:

      如果您只想在应用程序退出之前处理一些事情。就像显示确认对话框一样,您可以使用WillPopScope

      例子

        @override
        Widget build(BuildContext context) {
          return WillPopScope(
            onWillPop: _showDialog,
            child: Scaffold(
              body: Center(
                child: Text("This is the first page"),
              ),
            ),
          );
        }
      
        Future<bool> _showDialog() {
          return showDialog(
            context: context,
            builder: (context) {
            return AlertDialog(
              title: Text("Are you sure?"),
              content: Text("You want to exit app"),
              actions: <Widget>[
                FlatButton(
                  child: Text("Yes"),
                  onPressed: () => Navigator.of(context).pop(true),
                ),
                FlatButton(
                  child: Text("No"),
                  onPressed: () => Navigator.of(context).pop(false),
                )
              ],
            );
          }) ?? false;
        }
      

      【讨论】:

      【解决方案3】:

      它没有关闭应用它破坏了最后一个路由显示黑屏。

      您可以使用以下命令关闭应用程序:Flutter how to programmatically exit the app

      并且您无法访问堆栈或历史记录,因为它在 Navigator 类 Navigator._history 中是私有的,但您可以使用此解决方法来检查当前路由是否是最后一个:

      
      Future<bool> isCurrentRouteFirst(BuildContext context) {
          var completer = new Completer<bool>();
          Navigator.popUntil(context, (route) {
            completer.complete(route.isFirst);
            return true;
          });
          return completer.future;
        }
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-27
        • 2013-04-02
        • 1970-01-01
        相关资源
        最近更新 更多