QinGang_interested/lib/common/route_service.dart

58 lines
1.6 KiB
Dart
Raw Normal View History

2025-12-12 09:11:30 +08:00
import 'package:qhd_prevention/common/route_model.dart';
/// 路由管理
class RouteService {
static final RouteService _instance = RouteService._internal();
factory RouteService() => _instance;
RouteService._internal();
// 存储所有路由配置
List<RouteModel> _allRoutes = [];
// 获取主Tab路由第一级children
List<RouteModel> get mainTabs => _allRoutes.isNotEmpty
? _allRoutes.first.children
: [];
// 初始化路由配置
void initializeRoutes(List<dynamic> routeList) {
_allRoutes = routeList.map((route) => RouteModel.fromJson(route)).toList();
}
// 根据路径查找路由
RouteModel? findRouteByPath(String path) {
for (final route in _allRoutes) {
final found = _findRouteRecursive(route, path);
if (found != null) return found;
}
return null;
}
RouteModel? _findRouteRecursive(RouteModel route, String path) {
if (route.path == path) return route;
for (final child in route.children) {
final found = _findRouteRecursive(child, path);
if (found != null) return found;
}
return null;
}
// 获取某个Tab下的所有可显示的路由hasMenu为true的叶子节点
List<RouteModel> getRoutesForTab(RouteModel tab) {
final routes = <RouteModel>[];
_collectLeafRoutes(tab, routes);
return routes;
}
void _collectLeafRoutes(RouteModel route, List<RouteModel> collector) {
if (route.hasMenu) {
collector.add(route);
if (!route.isLeaf) {
for (final child in route.children) {
_collectLeafRoutes(child, collector);
}
}
}
}
}