我对扑镖和飞镖非常陌生,并尝试将单例实例用于全局状态(?)。 这是从后端服务器获取的公司信息。 当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
我在做什么错了?
答案 0 :(得分:1)
单个是better avoided,我建议您改用Provider,并在小部件树上注入一个简单的对象引用,以便您可以随时获取该引用。
您的示例打印null
的原因是因为您错误地引用了setCompany()
上的变量,变量name
和intro
都是相同的变量,因此您正在更改为了修复它,将函数内部的变量(而不是类变量)更改为:
void setCompany(String name, String intro) {
this.name = name;
this.intro = intro;
}
此外,我建议您命名变量_name
和_intro
,因为对于非私有变量使用get
毫无意义。