我对 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()
上错误地引用了变量。 , 变量 name
和 intro
都是同一个变量,您正在更改函数内部的变量,而不是类变量,为了修复它,请将其更改为:
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/