当前位置: 首页 > news >正文

Flutter 中的单例模式

传统:

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}'))),
    );
  }
}

相关文章:

  • 【电机控制器】ESP32-C3语言模型——DeepSeek
  • 【C语言】自定义类型:联合体和枚举
  • 迭代器操作函数的使用
  • Spring Boot框架总结(超级详细)
  • 进程消亡(20250222)
  • 每日一题——376. 摆动序列
  • 【MySQL】第八弹---全面解析数据库表的增删改查操作:从创建到检索、排序与分页
  • 实现rolabelimg对于dota格式文件的直接加载和保存
  • vertical-align
  • go 定时任务 gocron timer
  • 【阮一峰】16.类型声明文件
  • Day 45 卡玛笔记
  • Linux 内核网络设备驱动编程:私有协议支持
  • element-plus 根据条件显示多选框
  • 解放大脑!用DeepSeek自动生成PPT!
  • 面试官询问项目前后端人员配比之高分示范回答
  • 蓝桥杯核心内容
  • draw.io:开源款白板/图表绘制利器
  • deepseek与其他大模型配合组合
  • VUE3+TS+element-plus项目从0开始入门 - 创建项目、认识基本结构
  • 7天6板南京港:控股子公司没有直达美国外贸集装箱直达航线
  • 美官员鼓动他国“退出WHO”遭冷遇,鲁比奥辩称美国没“退群”
  • 上海黄浦均价18.5万元/平米新房日光,成今年全国首个单盘破百亿的豪宅项目
  • 姜再冬会见巴基斯坦空军参谋长:中方欢迎并支持巴印通过对话妥善处理分歧
  • 广州某科技公司遭网络攻击,境外“黑手”被锁定
  • 首付款12.5亿美元!三生制药与辉瑞就国产双抗达成合作协议