【发布时间】:2020-12-07 15:31:03
【问题描述】:
我想根据下面模型类中的布尔值(user.status)在登录屏幕和主屏幕之间切换
class User extends ChangeNotifier {
int phoneNumber;
bool status = false;
notifyListeners();
}
bool User.status 值是从下面的函数翻转过来的
User _user = Provider.of<User>(context);
...
...
if (form.validate()) {
_user.status = true;
}
下面的函数必须从 User 模型中监听状态值的变化,并将屏幕更改为 Home()。
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
User authStatus = Provider.of<User>(context);
return authStatus.status ? Home() : Auth();
}
}
我没有任何错误,所有的值都在相应地更新,但是 Wrapper() 在听取了来自 ChangeNotifier 的更改后没有被重建
【问题讨论】:
-
您可能希望使用 streamProvider 而不是 changenotifierprovider。看看这个:youtube.com/watch?v=j_SJ7XmT2MM。不要忘记点击描述中的github链接。
-
是的,我按照教程进行操作,但是如何为上面的类构建流提供程序,我尝试流式传输 bool 值但它给出错误(bool 值无法流式传输),以及更改通知程序有误。
-
通过使用流,您正在监听 bool 值的任何变化。只有当你告诉它这样做时,changednotifier 才会通知 bool 已更改。简而言之,您必须手动告诉 changednotifier 通知 bool 值已更改。
-
好的,但是在围绕 bool User.status 构建流时出现错误。
-
让你的包装器有状态,它会监听布尔值但不能重建,因为它没有状态。应该工作。
标签: flutter dart provider flutter-change-notifier