Flutter 提供程序未更新 UI

Gar*_*ett 3 dart flutter

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

我的UserModel设置是这样的

...

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

      Map get user {
        return _user;
      }

      void setUser(user) {
        _user = user;
        notifyListeners();
      }
    }
Run Code Online (Sandbox Code Playgroud)

我的应用程序设置是这样的 main.dart

...

void main() {
  runApp(ChangeNotifierProvider(
    builder: (context) => UserModel(),
    child: MyApp()
  ),
  );
}
Run Code Online (Sandbox Code Playgroud)

接下来,我有一个按钮,调用setUser的方法UserModel

...

UserModel().setUser(user);

...
Run Code Online (Sandbox Code Playgroud)

最后,我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),
        );
    },
),

....
Run Code Online (Sandbox Code Playgroud)

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

suh*_*lem 5

here you created new object ;

UserModel().setUser(user);
Run Code Online (Sandbox Code Playgroud)

so you set the user in empty object you will never use it should be

Provider.of<UserModel>(context).setUser(user);
Run Code Online (Sandbox Code Playgroud)