1. 指定页面名称跳转Navigator.of(context).push(MaterialPageRoute()
class TextPage extends StatelessWidget {
const TextPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => MaterialApp(
home: Scaffold(
body: Center(
child: TextButton(
child: const Text(';跳转'),
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context) {
return _WillPopApp();
}));
},
),
),
));
}
2.指定路由名称跳转。
runApp(MaterialApp(
routes: {
"cartPage": (context) => const CartWidget(),
'home': (context) => const HomeWidget(),
},
ElevatedButton(
child: const Text('命名的方式跳转'),
onPressed: () {
Navigator.pushNamed(context, "product",
arguments: '我是传递的数据')
.then((value) {
setState(() {
cartResult = value.toString();
print('返回的数据=$value');
});
});
},
),
3.通过onGenerateRoute 方法实现页面拦截
比如在跳转个人中心或者结算订单的场景需要用户登录后才可执行后续操作onGenerateRoute 方法在使用路由名称跳转的时候如果你使用的目标名称没有注册就会调用此方法
示例:onGenerateRoute 方法判断
onGenerateRoute: (RouteSettings settings) {
return MaterialPageRoute(builder: (context) {
if (isLogin) {
switch (settings.name) {
case "cartPage":
return const CartWidget();
case "product":
return const ProductWidget(productName: '我是通过命名传递过来的');
default:
return const HomeWidget();
}
} else {
return const LoginWidget();
}
});
},
实现跳转:
ElevatedButton(
child: const Text('命名的方式跳转'),
onPressed: () {
Navigator.pushNamed(context, "cartPage",
arguments: '我是传递的数据')
.then((value) {
setState(() {
cartResult = value.toString();
print('返回的数据=$value');
});
});
},
),
退出页面
IconButton(
icon: const Icon(Icons.arrow_back),
onPressed: () {
Navigator.pop(context, '我返回数据给你了');
},
),
|