我如何从类扩展 ChangeNotifier 中获取价值

Posted

技术标签:

【中文标题】我如何从类扩展 ChangeNotifier 中获取价值【英文标题】:How I can get value from class extends ChangeNotifier 【发布时间】:2021-11-28 17:31:16 【问题描述】:

[我的代码]。当我使用 User user = Provider.of(context, listen: false).user; => 用户空 My code here

class UserController extends ChangeNotifier 
   User _user;
   User get user => _user;

   Future<void> getUser() async 
      String token = await AppValue.getToken();
      Uri uri = Uri.parse('http://20.89.111.129/api/user/getProfileUser');
      Map<String, String> headers = 'Authorization': 'Bearer $token';
      try 
          final response = await http.get(
              uri,
              headers: headers,
      );
      final data = jsonDecode(response.body);
      User newUser = new User(
          address: (data['address'] == null) ? '' : data['address'],
          birthday: (data['birthday'] == null) ? '' : data['birthday'],
           email: (data['email'] == null) ? '' : data['email'],
           fullName: (data['fullName'] == null) ? '' : data['fullName'],
       );
     _user = newUser; // _user is not null
     notifyListeners();
 catch (error) 
  log('ST WRONG!');
  throw (error);



// 当我使用用户时 user = Provider.of(context, listen: false).user; => 用户为空

【问题讨论】:

请将代码以纯文本(格式为代码)的形式发布在这里,而不是外部图像的链接。 【参考方案1】:

我认为您需要告诉提供者您想要采取行动的确切类别,

//so instead of this;
User user = Provider.of(context, listen: false).user;

// do this
User user = Provider.of< UserController>(context, listen: false).user;

【讨论】:

我跟着了,还是不行 你在尝试访问_user之前是否调用了getUser方法? 是的,我称之为 UserController().getUser(); ElevatedButton( onPressed: () UserController().getUser(); User user = UserController().user; if (user == null) log('User null !'); else log ('Name user : $user.fullName'); , child: Text('GET PROFILE'), ) 你不能这样做。您必须像这样通过提供者调用该函数:` ElevatedButton( onPressed: () await Provider.of(context, listen: false).getUser(); User user = Provider.of(context,听:false).user; if (user == null) log('User null !'); else log('Name user : $user.fullName'); , , child: Text( '获取个人资料'), ) `

以上是关于我如何从类扩展 ChangeNotifier 中获取价值的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭 ChangeNotifier Provider Flutter 中的函数

如何从 ChangeNotifier 导航?

ChangeNotifier 安装等效?

如何将计时器添加到 changenotifier 类

如何显示来自 ChangeNotifier 模型的对话框

无法从类字典扩展类