【发布时间】:2018-08-29 12:53:06
【问题描述】:
我想声明一个用户对象,我将使用 http 请求进行实例化,并且我希望它是全局的。我该怎么做?有一个单身人士?但是我怎样才能让这个类也成为单例呢?还是有其他方法? 这就是我到目前为止所做的:
class User{
String username;
String password;
int id;
User({this.username, this.id});
factory User.fromJson(Map<String, dynamic> json){
return User(
username: json['name'],
id: json['id']
);
}
}
然后:
var user = await login(username, password, context);
【问题讨论】:
-
您真的不希望在您的应用程序中使用单例。我认为您真正想要的是一种访问在 Widget 树顶部附近共享的
User对象的方法。你可以使用scoped_model 之类的东西。通过这种方式,您可以将User对象定义为模型,并提供执行登录的方法,将ScopedModel<User>包裹在您的根目录周围,并在您有登录按钮或用户名文本标签的地方使用ScopedModelDescendant<User>。 -
可能是一个愚蠢的问题,但如果我使用 Navigator.of(context).pushNamedAndRemoveUntil,scopedModelDescendant 会找到用户对象还是不会? t?
-
Navigator.of将向上搜索小部件层次结构,直到找到最近的 NavigatorState。如果您只使用 WidgetsApp 或 MaterialApp 提供导航,那么它将找到的小部件。这意味着只要您使用ScopedModel<User>包装您的应用程序,那么即使您更改路由,作用域模型后代也将能够找到它。 -
非常感谢!