flutter 路由管理(无参/有参)

169 阅读1分钟
MaterialApp(  // MaterialApp中需要指定onGenerateRoute,如果需要默认路由则指定initialRoute,不需要的时候可以写home:Counter()
   initialRoute: '/',
   onGenerateRoute: onGenerateRoute,
);
...
final Map<String, Function> routes = {
  '/': (_, {arguments}) => Tabs(),
  '/counter1': (_, {arguments}) => Counter1(),  // 不带参路由
  '/counter2': (_, {arguments}) => Counter2(arguments: arguments),   // 带参数路由
};
// 以下固定写法,官方推荐
var onGenerateRoute = (RouteSettings settings) {
  final String name = settings.name;
  final Function pageContentBuilder = routes[name];
  if (pageContentBuilder != null) {
    final Route route = MaterialPageRoute(
        builder: (context) =>
            pageContentBuilder(context, arguments: settings.arguments));
    return route;
  }
};
...
// 指定arguments参数
class Couter2 extends StatelessWidget {
  Map arguments;
  Couter2({Key key, this.arguments}) : super(key: key);
}
// StatelessWidget直接arguments['id']使用
// StatefulWidget直接widget.arguments['id']使用