Flutter路由模块化管理方案
总结记录一下Flutter路由模块管理:
1、创建路由基类
abstract class BaseRouteConfig {Map<String, WidgetBuilder> get routes;
}
2、创建不同模块的路由配置类
// 认证模块路由
class AuthRoutes extends BaseRouteConfig {@overrideMap<String, WidgetBuilder> get routes => {'login': (context) {final int viType = ModalRoute.of(context)?.settings.arguments as int;return PassLoginPage(viType: viType);},'/login': (context) => const LoginPage(),'phoneVerifyCode': (context) {final phone = ModalRoute.of(context)?.settings.arguments as String?;return PhoneVerifyCodePage(phone: phone);},'/phoneVerifyCode': (context) => const PhoneVerifyCodePage(),// 其他认证相关路由...};
}// 用户中心模块路由
class UserCenterRoutes extends BaseRouteConfig {@overrideMap<String, WidgetBuilder> get routes => {'editPersonal': (context) => const EditPersonalPage(),'userCenter': (context) => const IndividualCenter(),'accountSecurity': (context) => const AccountSecurity(),// 其他用户中心路由...};
}// 商家模块路由
class MerchantRoutes extends BaseRouteConfig {@overrideMap<String, WidgetBuilder> get routes => {'merchant': (context) => const MerchantWidget(),'merchantBasicInfo': (context) => const MerchantBasicInfo(),'merchantBasicDetail': (context) {final status = ModalRoute.of(context)?.settings.arguments as String?;return MerchantBasicDetail(status: status);},// 其他商家路由...};
}
3、创建聚合路由配置类
class AppRoutes {static final Map<String, WidgetBuilder> _allRoutes = {};static void initialize() {_allRoutes.addAll(AuthRoutes().routes);_allRoutes.addAll(UserCenterRoutes().routes);_allRoutes.addAll(MerchantRoutes().routes);// 添加其他模块路由...}static Map<String, WidgetBuilder> get allRoutes => _allRoutes;
}
4、使用方法,修改 main 方法初始化路由
void main() async {// ...其他初始化代码// 初始化路由配置AppRoutes.initialize();runApp(MaterialApp(// ...routes: AppRoutes.allRoutes,// ...));
}
5、添加新路由模块的示例
// 新增创作中心模块
class CreativeRoutes extends BaseRouteConfig {@overrideMap<String, WidgetBuilder> get routes => {'creativeCenter': (context) => const CreativeCenter(),'workRelease': (context) => const WorkRelease(),'uploadWork': (context) => const UploadWorkPage(),// 其他创作相关路由...};
}// 在 AppRoutes 中添加
class AppRoutes {// ...static void initialize() {// ..._allRoutes.addAll(CreativeRoutes().routes);}
}
优势说明:
-
模块化管理:将路由按功能模块划分,便于维护和查找
-
扩展性强:新增模块只需创建新的配置类并注册到 AppRoutes
-
类型安全:每个路由配置都是强类型校验
-
参数处理:保留原有的动态参数处理逻辑
-
命名规范:
- 使用命名路由统一以'/'开头
- 页面路由使用小驼峰命名
- Dialog 路由添加 Dialog 后缀
这种架构可以很好地支持大型项目的路由管理需求,同时保持代码的可维护性和扩展性。新的开发人员可以快速定位路由配置位置,模块负责人可以独立维护自己模块的路由配置。