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

当提供者的状态发生变化时,小部件不会重建

如何解决当提供者的状态发生变化时,小部件不会重建

我正在寻找的是当用户登录应用程序时 BottomNavigationBarItem 的变化。我为此创建了一个提供程序服务。

class UserData with ChangeNotifier,DiagnosticableTreeMixin {
  bool _isLoggedin = false;
  bool get isLoggedin => _isLoggedin;
  UserData() {
    print('UserData Provider is summoned!');
    loginState();
  }
    void loginStateSetter(bool val) {
    this._isLoggedin = val;
    print("Login State changed to ${this._isLoggedin}");
    notifyListeners();
  }
  void loginState() async {
    this._isLoggedin = await wooCommerceCredentials.isCustomerLoggedIn();
    print('loginState() func called. login state is ${this._isLoggedin}');
    notifyListeners();
  }
}

基于我在调试控制台上看到的,日志记录过程没有出现问题和错误。每次成功登录后,我都会使用 _isLoggedin 函数设置 loginStateSetter 值。 (这也成功地发生了。) 但我面临的问题是小部件不会自行重建。我不明白为什么。 provider 内部的值更改成功,不应该重建小部件吗? bottomNavigationBar 小部件中的代码

Provider.of<UserData>(context).isLoggedin
              ? BottomNavigationBarItem(
                  activeIcon: Icon(Icons.account_circle),icon: Icon(Icons.account_circle_outlined),label: 'Profile',)
              : BottomNavigationBarItem(
                  activeIcon: Icon(Icons.account_circle),label: 'Login/Sign up',),

注意:登录发生在另一个页面中,其中提供者在抽屉中像这样被召唤:

ListTile(
            leading: Icon(Icons.account_circle_outlined),title: Text('Login / Sign Up',style: TextStyle(fontWeight: FontWeight.normal)),onTap: () {
              Navigator.push(
                context,MaterialPageRoute(
                    builder: (context) => ChangeNotifierProvider(
                        child: LoginPage(),create: (_) => UserData())),);
            },

我应该改变什么?我试过使用 StreamBuilder 等(外部按钮菜单),但小部件在我热重启之前不会重建。我做错了什么?

解决方法

该问题是由两次调用提供程序引起的。从小部件树中删除第二个提供程序后,它开始按预期重建小部件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?