Flutter应用启动时默认路由是否加入Navigator栈及返回行为问询
嘿,我来帮你理清关于Flutter Navigator的这两个问题~
示例代码
import 'package:flutter/material.dart'; void main() => runApp(MaterialApp(home: MyApp(),)); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: RaisedButton( onPressed: () => Navigator.pop(context), child: Text('Go Back'), ), ), ); } }
示例效果截图

你提到已经知道可以用Navigator.canPop(context)来阻止无效的返回操作,那咱们来解答你的两个问题:
问题解答
1. 应用仅启动一个页面时,默认路由"/"会被加入Navigator栈吗?
当然会!当你用MaterialApp(home: MyApp())这种方式设置首页时,Flutter会自动把默认路由"/"对应的首页推入Navigator的路由栈中。此时路由栈里就只有这一个页面实例,就像你给出的示意图展示的那样:
2. 如果默认路由已入栈,点击“Go Back”按钮会把它弹出吗?
不会的~当路由栈里只有这一个默认路由页面时,调用Navigator.pop(context)并不会将它弹出——Flutter不允许路由栈被完全清空,不然应用就没有页面可显示了。实际操作你会发现,点击按钮后页面毫无变化,应用也不会退出(除非你在Android上按物理返回键,那是系统层面的行为)。
这也是Navigator.canPop(context)的作用:它会返回false来告诉你当前栈里已经没有可弹出的页面了(除了最底层的默认路由),这时候就不该执行pop操作啦。
内容的提问来源于stack exchange,提问作者Blasanka
相关产品推荐
相关产品推荐

