为了使我的观点清楚,我创建了这个小代码。
看起来我在这里没有理解byref和byval的概念。
以及什么是真正有效的。
我已经评论了那些让我困惑的台词
获取控制器
class UserController extends GetxController {
List<UserModel> _userlist = [];
UserModel? currentuser;
UserController() {
_userlist.add(UserModel(username: 'temp', password: 't123'));
}
List<UserModel> get getusers {
return _userlist;
}
}
这是主要的
void main()
{
final uc1=Get.put(UserController());
UserModel user1=UserModel(username: 'abc', password: 'a123');
uc1.currentuser=user1;
//showing print abc
print(uc1.currentuser!.username);
final uc2=Get.put(UserController());
UserModel user2=UserModel(username: 'xyz', password: 'x123');
uc2.currentuser=user2;
//showing printing result=xyz
print(uc2.currentuser!.username);
//showing printing result=xyz, instead of abc why?
print(uc1.currentuser!.username);
}
2条答案
按热度按时间ua4mk5z41#
Get.put
仅在没有示例(或已有示例被标记为脏示例)的情况下放置一个新示例。您可以通过深入研究代码来查看它。按住Ctrl键并单击put
方法(至少在Android Studio中是这样),您可以查看实现。第一步是那么在
put
上再做一次会导致深入研究
_insert
方法得到:这里你可以看到如果它已经存在并且
isDirty
为真,或者它还不存在,那么它只会插入一个新的示例,现在我不完全确定什么时候设置isDirty
,但我相信当你在应用程序中改变路线时会发生这种情况。所以第二次调用put
时,你实际上是在检索之前已经放在那里的路线。现在,如果你想拥有多个示例,你可以使用Get.create(() => UserController());
,后面跟着Get.find
。dced5bon2#
因为您要使用put方法两次,所以如果您要更新单个示例,请遵循以下代码: