路由的概念路由代表一个页面或屏幕路由管理就是管理页面之间的跳转方式。导航器Navigator的概念Navigator是一个组件它通过栈的数据结构在管理所有的路由入栈push):打开新页面新页面成为栈顶出栈pop:关闭当前页面返回上一个页面命名式路由基本跳转// 打开新页面 Navigator.push( context, MaterialPageRoute(builder: (context) NewPage()), ); // 返回上一页 Navigator.pop(context);页面传参// 发送方 Navigator.push( context, MaterialPageRoute( builder: (context) DetailPage(product: product), ), ); // 接收方 class DetailPage extends StatelessWidget { final Product product; const DetailPage({required this.product}); }返回数据给上一个页面// 在B页面返回数据 Navigator.pop(context, 这是返回的数据); // 在A页面接收 final result await Navigator.push(...); print(result); // 这是返回的数据给路由命名直接用名字跳转首先在MaterialApp中注册路由表给页面起名字MaterialApp( initialRoute: /, // 首页路由 routes: { /: (context) HomePage(), /detail: (context) DetailPage(), /settings: (context) SettingsPage(), }, )使用命名路由跳转Navigator.pushNamed(context, /detail); // 带参数跳转 Navigator.pushNamed( context, /detail, arguments: {id: 123, title: 商品标题}, ); // 接收参数 final args ModalRoute.of(context)!.settings.arguments as Map;高级栈操作// 替换当前页面-通常在路由栈顶页面替换 //比如有页面1页面2页面2在栈顶。在页面2使用pushReplacementNamed进入页面3那么现在路由栈里面就是页面1和页面3 Navigator.pushReplacementNamed(context, /newPage); // 弹出当前页面并推入新页面-与pushReplacementNamed功能类似就是有出栈动画和入栈动画而pushReplacementNamed只有入栈动画 Navigator.popAndPushNamed(context, /newPage); // 一直弹出直到满足条件 Navigator.popUntil(context, ModalRoute.withName(/home)); // 推入新页面并移除之前所有页面常用于登录后 Navigator.pushNamedAndRemoveUntil( context, /home, (route) false, // 移除所有 );