如何解决ChangeNotifier 在导航到下一页时显示错误
我是使用 ChangeNotifier 和 MVVM 设计模式的提供程序构建应用程序的新手。当登录页面加载时,我想检查它是否已经登录。如果它已经登录,则导航到下一页。但它显示以下错误。
来自初始屏幕的我的 ChangeNotifier 绑定代码
_movetoNextScreen() async {
await Navigator.pushReplacement(context,MaterialPageRoute(
builder: (context) =>
ChangeNotifierProvider(
create: (_) => Loginviewmodel(),child: LoginScreen(),),));
}
class _LoginScreenState extends State<LoginScreen> {
Loginviewmodel _loginviewmodel;
//controller for login
TextEditingController _usernameController = TextEditingController();
TextEditingController _passwordController = TextEditingController();
Size size; // calculate screen size
@override
void initState() {
_loginviewmodel = Provider.of<Loginviewmodel>(context,listen: false);
_loginviewmodel.loggedInorNot();
checkLoginStatus();
super.initState();
}
checkLoginStatus() async {
print('vcal - ${_loginviewmodel.getIsLoggedIn}');
if (_loginviewmodel.getIsLoggedIn == true) {
//_movetoNextScreen();
}
}
@override
Widget build(BuildContext context) {
_loginviewmodel = Provider.of<Loginviewmodel>(context);
size = MediaQuery.of(context).size;
return Scaffold(
backgroundColor: green,//IP screen
// Asset Tracker- Text
body: _loginScreen(),);
}
我的 Loginviewmodel.dart
class Loginviewmodel extends ChangeNotifier{
LoginRepository _loginRepository = LoginRepository();
bool _isLoading = false;
bool _isLoggedIn = false;
void loggedInorNot() async {
_isLoggedIn = !_isLoggedIn;
//await _loginRepository.checkToken();
notifyListeners();
}
bool get getIsLoggedIn => _isLoggedIn;
bool get getIsLoading => _isLoading;
}
我该如何解决这个问题?
解决方法
您应该访问这样的提供商
Provider.of<LoginViewModel>(context,listen: false).getIsLoggedIn;
并用 ui 类小部件树顶部的消费者小部件包装
消费者会在每次状态改变时重建你的 UI。
有关提供者和消费者的更多信息,我建议您在他们的文档中找到 from here
,这可能是因为当您进入下一页时,您会创建新 ChangeNotifierProvider
。您必须将它放在这两个小部件上方,例如在 MaterialApp
/CupertinoApp
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。