切换导航
{{systemName}}
{{ info.Title }}
{{info.Title}}
{{ menu.Title }}
{{menu.Title}}
登录
|
退出
搜索
flutter路由设置
作者:ych
### 路由 #### 简单路由 `widget`->`navigator_demo.dart` ``` import 'package:flutter/material.dart'; class LoginPage extends StatelessWidget { const LoginPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title:const Text("登录"), ), body: ElevatedButton( onPressed: (){ Navigator.of(context).push(MaterialPageRoute(builder: (context) { return const MenuPage(); }, settings:const RouteSettings(), maintainState: false, fullscreenDialog: false, )); }, child: const Text("登陆"), ), ); } } class MenuPage extends StatelessWidget { const MenuPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("菜单"), ), ); } } ``` #### 路由返回值 ``` import 'package:flutter/material.dart'; class LoginPage extends StatelessWidget { const LoginPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title:const Text("登录"), ), body: ElevatedButton( onPressed: () async { var result=await Navigator.of(context).push(MaterialPageRoute( builder: (context){ return const MenuPage( title: "菜单", ); }, settings:const RouteSettings(), maintainState: false, fullscreenDialog: false, )); debugPrint(result); }, child: const Text("登陆"), ), ); } } class MenuPage extends StatelessWidget { final String title; const MenuPage({Key? key,required this.title}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(title), ), body: ElevatedButton( onPressed: (){ Navigator.of(context).pop("航哥"); }, child: const Text("返回"), ), ); } } ``` #### 路由传值 ``` import 'package:flutter/material.dart'; class LoginPage extends StatelessWidget { const LoginPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title:const Text("登录"), ), body: ElevatedButton( onPressed: () async { Navigator.of(context).push(MaterialPageRoute( builder: (context){ return const MenuPage( title: "菜单", ); }, settings:const RouteSettings( name: "menu", arguments: {"title":"menu","name":"菜单"}, ), maintainState: false, fullscreenDialog: false, )).then((value) => debugPrint(value)); }, child: const Text("登陆"), ), ); } } class MenuPage extends StatelessWidget { final String title; const MenuPage({Key? key,required this.title}) : super(key: key); @override Widget build(BuildContext context) { dynamic argument=ModalRoute.of(context)?.settings.arguments; return Scaffold( appBar: AppBar( title: Text(title+" "+argument.toString()), ), body: ElevatedButton( onPressed: (){ Navigator.of(context).pop("航哥"); }, child: const Text("返回"), ), ); } } ``` #### 路由传值 main.dart ``` void main()=>runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( title: "Text widget", debugShowCheckedModeBanner: false, routes: { "login": (context)=>const LoginPage(), "menu": (context)=>const MenuPage(title: "菜单",), }, initialRoute: "login", ); } } ``` `widget`->`navigator_demo.dart` ``` import 'package:flutter/material.dart'; class LoginPage extends StatelessWidget { const LoginPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title:const Text("登录"), ), body: ElevatedButton( onPressed: () async { Navigator.of(context).push(MaterialPageRoute( builder: (context){ return const MenuPage( title: "菜单", ); }, settings:const RouteSettings( name: "menu", arguments: {"title":"menu","name":"菜单"}, ), maintainState: false, fullscreenDialog: false, )).then((value) => debugPrint(value)); }, child: const Text("登陆"), ), ); } } class MenuPage extends StatelessWidget { final String title; const MenuPage({Key? key,required this.title}) : super(key: key); @override Widget build(BuildContext context) { dynamic argument=ModalRoute.of(context)?.settings.arguments; return Scaffold( appBar: AppBar( title: Text(title+" "+argument.toString()), ), body: ElevatedButton( onPressed: (){ Navigator.of(context).pop("航哥"); }, child: const Text("返回"), ), ); } } ``` #### 路由拦截 main.dart ``` void main()=>runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( title: "Text widget", debugShowCheckedModeBanner: false, routes: { "/": (context)=>const LoginPage(), // "login": (context)=>const LoginPage(), // "menu": (context)=>const MenuPage(title: "菜单",), }, onGenerateRoute: (s){ debugPrint(s.name); switch(s.name){ case "menu": return MaterialPageRoute(builder: (context){ return MenuPage(title: "大哥",); },settings: s); break; default:debugPrint(s.name); } }, ); } } ``` `widget`->`navigator_demo.dart` ``` import 'package:flutter/material.dart'; class LoginPage extends StatelessWidget { const LoginPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title:const Text("登录"), ), body: ElevatedButton( onPressed: () { Navigator.of(context).pushNamed("menu",arguments: "菜单"); }, child: const Text("登陆"), ), ); } } class MenuPage extends StatelessWidget { final String title; const MenuPage({Key? key,required this.title}) : super(key: key); @override Widget build(BuildContext context) { dynamic argument=ModalRoute.of(context)?.settings.arguments; return Scaffold( appBar: AppBar( title: Text(title+" "+argument.toString()), ), body: ElevatedButton( onPressed: (){ Navigator.of(context).pop("航哥"); }, child: const Text("返回"), ), ); } } ```
相关推荐
flutter全局状态管理和MVVM
flutter开发中的几种按钮
Flutter布局和嵌套控件
flutter调用其他页面的widget
flutter点击事件
flutter开发中的图片Icon
flutter进度指示器
flutter表单输入框
flutter开关和复选框
评论区
先去登录
版权所有:机遇屋在线 Copyright © 2021-2025 jiyuwu Co., Ltd.
鲁ICP备16042261号-1