微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ChangeNotifier 在导航到下一页时显示错误

如何解决ChangeNotifier 在导航到下一页时显示错误

我是使用 ChangeNotifier 和 MVVM 设计模式的提供程序构建应用程序的新手。当登录页面加载时,我想检查它是否已经登录。如果它已经登录,则导航到下一页。但它显示以下错误

enter image description here

来自初始屏幕的我的 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 举报,一经查实,本站将立刻删除。