flutter - 在 flutter Dart 中创建和使用单例

标签 flutter dart

我对 flutter 和 Dart 非常陌生,并尝试将单例实例用于全局状态(?)。
这是从后端服务器获取的公司信息。
当 Flutter 应用启动时,向服务器发送请求并获取响应并基于响应构建单例实例。
所以我创建了类

class Company {
  static final Company _instance = new Company._internal();

  factory Company() {
    return _instance;
  }

  @protected
  String name;
  @protected
  String intro;

  String get companyName => name;
  String get companyIntro => intro;

  void setCompany(String name, String intro) {
    name = name;
    intro = intro;
  }

  Company._internal();
}

在 main.dart
// companyResult is the response from server
final String companyName = companyResult["name"];
final String companyIntro = companyResult["intro"];

// create singleton instance
var company = Company();
// set company info
company.setCompany(companyName, companyIntro);

// cheking
print(company.companyName)

prints null

我究竟做错了什么?

最佳答案

单例是 better avoided , 我建议你使用 Provider而是在您的小部件树上注入(inject)一个简单的对象引用,这样您就可以随时获取该引用。

您的示例打印 null 的原因是因为您在 setCompany() 上错误地引用了变量。 , 变量 nameintro都是同一个变量,您正在更改函数内部的变量,而不是类变量,为了修复它,请将其更改为:

void setCompany(String name, String intro) {
  this.name = name;
  this.intro = intro;
}

另外,我建议您将变量命名为 _name_intro ,因为拥有 get 没有任何意义对于不是私有(private)的变量。

关于flutter - 在 flutter Dart 中创建和使用单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61513345/

相关文章:

flutter - 在构建 StreamBuilder<QuerySnapshot> 时抛出了以下 NoSuchMethodError

flutter - 在我的 flutter 应用程序中分离不同模块的路由的最佳方法是什么

在屏幕之间导航时,Flutter FutureBuilder 会不必要地重建

dart - Flutter 的第一个启动页面

dart - Angular 2和函数$ interval

dart - SSL 错误阻止网站登录 flutter

flutter - 将 onTapUp 事件与 Inkwell 结合使用

flutter - 同时调用多个http端点,合并结果并返回到dart中的单个futurebuilder

asynchronous - Future 函数中的 SetState

firebase - 来自 Flutter 中 firebase_auth 插件的更多用户数据