Flutter 中的单例模式

传统:

dart 复制代码
class RouterManager {
  // 单例模式
  static final RouterManager _instance = RouterManager._internal();

  factory RouterManager() {
    return _instance;
  }

  RouterManager._internal();
}

传递参数进行初始化时:

dart 复制代码
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}'))),
    );
  }
}
相关推荐
tangweiguo030519873 小时前
Dart 面试核心考点全解析
flutter
Ndmzi5 小时前
Matlab编程技巧:自定义Simulink菜单(理解补充)
前端·javascript·python
勇气要爆发5 小时前
物种起源—JavaScript原型链详解
开发语言·javascript·原型模式
SoaringHeart6 小时前
Flutter组件封装:验证码倒计时按钮 TimerButton
前端·flutter
San30.6 小时前
深入理解 JavaScript OOP:从一个「就地编辑组件」看清封装、状态与原型链
开发语言·前端·javascript·ecmascript
lqj_本人6 小时前
Flutter 适配鸿蒙桌面快捷入口完整指南
flutter·华为·harmonyos
AAA阿giao6 小时前
JavaScript 原型与原型链:从零到精通的深度解析
前端·javascript·原型·原型模式·prototype·原型链
0***86336 小时前
SQL Server2019安装步骤+使用+解决部分报错+卸载(超详细 附下载链接)
javascript·数据库·ui
kirk_wang7 小时前
Flutter 三方库鸿蒙适配实践:以 Firebase Messaging 为例实现跨平台推送集成
flutter·移动开发·跨平台·arkts·鸿蒙
JuneTT7 小时前
【JS】使用内连配置强制引入图片为base64
前端·javascript