Flutter提供程序未更新UI

时间:2019-10-26 22:27:46

标签: flutter dart

我很确定我的所有设置都正确,或者至少非常接近正确。但是,notifyLister(),我的consumer不能正常工作,或者两者都不能工作。

我有这样的UserModel设置

...

class UserModel with ChangeNotifier {
      Map<dynamic, dynamic> _user;

      Map get user {
        return _user;
      }

      void setUser(user) {
        _user = user;
        notifyListeners();
      }
    }

我在main.dart中有这样的应用设置

...

void main() {
  runApp(ChangeNotifierProvider(
    builder: (context) => UserModel(),
    child: MyApp()
  ),
  );
}

接下来,我有一个按钮,该按钮在setUser

中调用UserModel方法
...

UserModel().setUser(user);

...

最后,我在Consumer的构建方法中的一列中嵌套了app.dart

....

Consumer<UserModel>(
    builder: (context, user, child) {
        return user.user == null ? Text(
            'NULL ${user.user}',
                style: TextStyle(fontSize: 28),
        ) : Text(
            'NOT NULL ${user.user}',
                style: TextStyle(fontSize: 28),
        );
    },
),

....
首先将

user.user放在屏幕上是正确的,因为它以null开始,但是,当用户登录模型中的_user时,其设置为最终值,用户界面不会更新。我做错了什么?

1 个答案:

答案 0 :(得分:0)

在这里创建了新对象;

UserModel().setUser(user);

因此您将用户设置为空对象,则永远不会使用它

Provider.of<UserModel>(context).setUser(user);