Flutter 2.0 路由 Route 配置
onGenerateRoute 函数可直接复制使用
import 'package:flutter/material.dart';
void main() {
runApp(Myapp());
}
class Myapp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
// 路由配置
onGenerateRoute: (settings) {
debugPrint(settings.toString());
final Map routes = {
'/': (context) => HomeScreen(),
'/details': (context) => DetailScreen(arguments: settings.arguments),
};
if (routes[settings.name] != null) {
Function builder = routes[settings.name];
return MaterialPageRoute(builder: builder);
}
return MaterialPageRoute(builder: (context) => UnknownScreen());
},
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: TextButton(
child: Text('View Details'),
onPressed: () {
Navigator.of(context)
.pushNamed('/details', arguments: {'id': '5988'});
},
),
),
);
}
}
class DetailScreen extends StatefulWidget {
final Map arguments;
DetailScreen({Key key, this.arguments}) : super(key: key);
@override
_DetailScreenState createState() => _DetailScreenState(arguments: arguments);
}
class _DetailScreenState extends State<DetailScreen> {
Map arguments;
_DetailScreenState({this.arguments});
@override
void initState() {
super.initState();
debugPrint(arguments.toString());
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('=== ' + arguments['id']),
TextButton(
child: Text('Pop!'),
onPressed: () {
Navigator.pop(context);
},
),
],
),
),
);
}
}
// 404 页面
class UnknownScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: Text('404!'),
),
);
}
}
来自一个初学者分享记录