Flutter路由模块化管理方案

总结记录一下Flutter路由模块管理:

1、创建路由基类

Dart 复制代码
abstract class BaseRouteConfig {
  Map<String, WidgetBuilder> get routes;
}

2、创建不同模块的路由配置类

Dart 复制代码
// 认证模块路由
class AuthRoutes extends BaseRouteConfig {
  @override
  Map<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 {
  @override
  Map<String, WidgetBuilder> get routes => {
    'editPersonal': (context) => const EditPersonalPage(),
    'userCenter': (context) => const IndividualCenter(),
    'accountSecurity': (context) => const AccountSecurity(),
    // 其他用户中心路由...
  };
}

// 商家模块路由
class MerchantRoutes extends BaseRouteConfig {
  @override
  Map<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、创建聚合路由配置类

Dart 复制代码
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 方法初始化路由

Dart 复制代码
void main() async {
  // ...其他初始化代码
  
  // 初始化路由配置
  AppRoutes.initialize();

  runApp(
    MaterialApp(
      // ...
      routes: AppRoutes.allRoutes,
      // ...
    )
  );
}

5、添加新路由模块的示例

Dart 复制代码
// 新增创作中心模块
class CreativeRoutes extends BaseRouteConfig {
  @override
  Map<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);
  }
}

优势说明:

  1. 模块化管理:将路由按功能模块划分,便于维护和查找

  2. 扩展性强:新增模块只需创建新的配置类并注册到 AppRoutes

  3. 类型安全:每个路由配置都是强类型校验

  4. 参数处理:保留原有的动态参数处理逻辑

  5. 命名规范

  • 使用命名路由统一以'/'开头
  • 页面路由使用小驼峰命名
  • Dialog 路由添加 Dialog 后缀

这种架构可以很好地支持大型项目的路由管理需求,同时保持代码的可维护性和扩展性。新的开发人员可以快速定位路由配置位置,模块负责人可以独立维护自己模块的路由配置。

相关推荐
2503_9284115621 分钟前
11.24 Vue-组件2
前端·javascript·vue.js
Bigger33 分钟前
🎨 用一次就爱上的图标定制体验:CustomIcons 实战
前端·react.js·icon
谢尔登41 分钟前
原来Webpack在大厂中这样进行性能优化!
前端·webpack·性能优化
g***B7381 小时前
JavaScript在Node.js中的模块系统
开发语言·javascript·node.js
Z***25802 小时前
JavaScript在Node.js中的Deno
开发语言·javascript·node.js
cypking2 小时前
Vue 3 + Vite + Router + Pinia + Element Plus + Monorepo + qiankun 构建企业级中后台前端框架
前端·javascript·vue.js
San30.2 小时前
ES6+ 新特性解析:让 JavaScript 开发更优雅高效
开发语言·javascript·es6
雨雨雨雨雨别下啦3 小时前
【从0开始学前端】vue3简介、核心代码、生命周期
前端·vue.js·vue
simon_93493 小时前
受够了压缩和收费?我作为一个码农,手撸了一款无限容量、原图直出的瀑布流相册!
前端
e***87704 小时前
windows配置永久路由
android·前端·后端