信息发布→ 登录 注册 退出

图文详解Flutter单例的实现

发布时间:2026-01-11

点击量:
目录
  • 前言
  • 创建单例
  • 测试单例效果
    • 测试一
    • 测试二
  • 总结

    前言

    作为最简单的一种设计模式之一,对于单例本身的概念,大家一看就能明白,但在某些情况下也很容易使用不恰当。相比其他语言,Dart 和 Flutter 中的单例模式也不尽相同,本篇文章我们就一起探究看看它在 Dart 和 Flutter 中的应用。

    Flutter(able) 的单例模式

    一般来说,要在代码中使用单例模式,结构上会有下面这些约定俗成的要求:

    • 单例类(Singleton)中包含一个引用自身类的静态属性实例(instance),且能自行创建这个实例。
    • 该实例只能通过静态方法 getInstance() 访问。
    • 类构造函数通常没有参数,且被标记为私有,确保不能从类外部实例化该类。

    回顾iOS,单例的写法如下:

    static JXWaitingView *shared;
    
    +(JXWaitingView*)sharedInstance{
      static dispatch_once_t onceToken;
      dispatch_once(&onceToken, ^{
          shared=[[JXWaitingView alloc]initWithTitle:nil];
      });
      return shared;
    }
    

    其目的是通过dispatch_once来控制【初始化方法】只会执行一次,然后用static修饰的对象来接收并返回它。所以核心是只会执行一次初始化。

    创建单例

    创建单例的案例

    class Student {
      String? name;
      int? age;
      //构造方法
      Student({this.name, this.age});
    
      // 单例方法
      static Student? _dioInstance;
      static Student instanceSingleStudent() {
        if (_dioInstance == null) {
          _dioInstance = Student();
        }
        return _dioInstance!;
      }
    }
    

    测试单例效果

    测试一

    import 'package:flutter_async_programming/Student.dart';
    
    void main() {
      Student studentA = Student.instanceSingleStudent();
      studentA.name = "张三";
      Student studentB = Student.instanceSingleStudent();
      print('studentA姓名是${studentA.name}');
      print('studentB姓名是${studentB.name}');
    }
    

    运行效果

    测试二

    import 'package:flutter_async_programming/Student.dart';
    
    void main() {
      Student studentA = Student.instanceSingleStudent();
      studentA.name = "张三";
      Student studentB = Student.instanceSingleStudent();
      studentB.name = "李四";
      print('studentA姓名是${studentA.name}');
      print('studentB姓名是${studentB.name}');
    }
    

    运行效果

    总结

    标签:# 它在  # pre  # Singleton  # catalogue  # center  # class  # 单例类  # 李四  # 情况下  # 不恰当  # 其目  # 最简单  # flutter单例实现  # 也很  # 要在  # 但在  # 约定俗成  # 就能  # 会有  # 的是  # 只会  # flutter案例  # flutter开发实战详解  
    在线客服
    服务热线

    服务热线

    4008888355

    微信咨询
    二维码
    返回顶部
    ×二维码

    截屏,微信识别二维码

    打开微信

    微信号已复制,请打开微信添加咨询详情!