【问题标题】:Creating and using Singleton in flutter dart在颤振飞镖中创建和使用单例
【发布时间】:2020-08-14 05:21:07
【问题描述】:

我对颤振和飞镖非常陌生,并尝试将单例实例用于全局状态(?)。 这是从后端服务器获取的公司信息。 当 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

我做错了什么?

【问题讨论】:

  • 你遇到了什么错误或得到了什么结果?
  • 我认为 setComany 没有设置值。调用 setCompany 后打印公司的属性打印 null。

标签: flutter dart


【解决方案1】:

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

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

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

另外,我建议您将变量命名为 _name_intro,因为将 get 用于非私有变量是没有意义的。

【讨论】:

  • 感谢您的回答。我会调查提供者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2020-11-05
  • 2023-03-29
  • 2020-11-28
  • 2020-01-28
  • 2019-02-05
  • 2022-11-12
相关资源
最近更新 更多