【flutter】页面路由的设计route

2020-04-03  本文已影响0人  匿于烟火中
class UniqueProdListWidget extends StatefulWidget {
  static const routeName = '/product/detail';
  UniqueProdListWidget({this.arguments});
  final Map arguments;
  @override
  _UniqueProdListWidgetState createState() =>
      new _UniqueProdListWidgetState(arguments: this.arguments);
}
...具体的页面实现
import 'package:flutter/material.dart';

/// 配置路由示例
///需要参数和不需要参数的配置方式
final Map<String, dynamic> routes = {
  HomeTab.routeName: (context, {Map arguments}) => HomeTab(),
  UserAgreementPage.routeName: (context) => UserAgreementPage(),
  EventCollectListWidget.routeName: (context, {Map arguments}) =>
      EventCollectListWidget(arguments: arguments)
};
//固定写法:
var onGenerateRoute = _onGenerateRoute;
Route<dynamic> _onGenerateRoute(RouteSettings settings) {
  String name = settings.name;
  dynamic routeData = Utility.formateUrlParams(name);
  Map<String, String> arguments = settings.arguments;
  if (routeData != null) {
    name = routeData['routeName'];
    arguments = routeData['paramObj'];
  }
  final Function pageContentBuilder = routes[name];
  final Function noFoundBuilder = routes[NoExist.routeName];
  if (pageContentBuilder != null) {
    if (arguments != null) {
      final Route route = MaterialPageRoute(builder: (context) {
//可以在此处做一些未登录的拦截判断
        // if (!Utility.isEmpty(Global.token)) {
          return pageContentBuilder(context, arguments: arguments);
        // } else {
          // return noFoundBuilder(context);
        // }
      });
      return route;
    } else {
      final Route route = MaterialPageRoute(builder: (context) {
        // if (!Utility.isEmpty(Global.token)) {
        //   // 统一处理
          return pageContentBuilder(context);
        // } else {
        //   return noFoundBuilder(context);
        // }
      });
      return route;
    }
  } else {
    final Route route = MaterialPageRoute(builder: (context) {
      return noFoundBuilder(context);
    });
    return route;
  }
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'test',
        theme: ThemeData(
            primarySwatch: Colors.blue, accentColor: Global.Color_Gold),
        onGenerateRoute: onGenerateRoute,
        home: Home());
  }
}
上一篇 下一篇

猜你喜欢

热点阅读