在Flutter飞镖中创建和使用Singleton

时间:2020-04-29 23:22:12

标签: 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

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

单个是better avoided,我建议您改用Provider,并在小部件树上注入一个简单的对象引用,以便您可以随时获取该引用。

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

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

此外,我建议您命名变量_name_intro,因为对于非私有变量使用get毫无意义。