传统:
class RouterManager {
// 单例模式
static final RouterManager _instance = RouterManager._internal();
factory RouterManager() {
return _instance;
}
RouterManager._internal();
}
传递参数进行初始化时:
class RouterManager {
// 私有静态实例,确保单例
static RouterManager? _instance;
// goRouter 是 final 变量,确保它只被初始化一次
final GoRouter goRouter;
// 私有构造函数
RouterManager._internal(this.goRouter);
// 工厂方法,返回 RouterManager 实例
factory RouterManager({String initialLocation = '/'}) {
_instance ??= RouterManager._internal(buildRouter(initialLocation));
return _instance!;
}
static GoRouter buildRouter(String initialLocation) {
return GoRouter(
initialLocation: initialLocation,
routes: [
GoRoute(path: '/', builder: (context, state) => const SplashPage()),
GoRoute(path: '/home', builder: (context, state) => const HomePage()),
GoRoute(
path: '/detail/:id',
builder: (context, state) {
final id = state.pathParameters['id']!;
return DetailPage(id: id);
},
),
],
errorBuilder:
(context, state) => Scaffold(body: Center(child: Text('Error: ${state.error}'))),
);
}
}