如何解决提供程序中的notifyListeners 不起作用导致提供程序内部使用类?
我有一个 Provider 类“Provider_Controller”,当我使用该类中的所有方法时,它与 notifyListeners 一起正常工作, 但是当我在“Provider_Controller”中放入类“Provider_Chat”时,当“Provider_Chat”中的数据被更新时,notifyListeners 无法正常工作,
我正在使用提供商:^5.0.0
class Provider_Controller with ChangeNotifier {
Provider_Chat _provider_chat = new Provider_Chat();
Provider_Chat get provider_chat => _provider_chat;
set provider_chat(Provider_Chat pc) {
try {
_provider_chat = pc;
notifyListeners();
} catch (err) {
print(err);
}
}
Model_User _user;
Model_User get user => _user;
set user(Model_User user) {
_user = user;
notifyListeners();
}
List<Model_User_Chat_Contact> _list_user_chat;
List<Model_User_Chat_Contact> get list_user_chat => _list_user_chat;
set list_user_chat(List<Model_User_Chat_Contact> new_list) {
_list_user_chat = new_list;
notifyListeners();
}
}
class Provider_Chat {
TextEditingController _textEditingController_message =
TextEditingController();
TextEditingController get textEditingController_message =>
_textEditingController_message;
set textEditingController_message(TextEditingController input) {
_textEditingController_message = input;
}
List<Model_Chat> _list_chat;
List<Model_Chat> get list_chat => _list_chat;
set list_chat(List<Model_Chat> new_list) {
try {
_list_chat = new_list;
} catch (err) {
print(err);
}
}
}
例如:
Provider_Controller pc = Provider.of<Provider_Controller>(context);
“Provider_Controller”中的访问方法仍然有效。
pc.user = new_user(); // notifyListeners working fine
但是当...访问
pc.provider_chat.list_chat = new_list(); // the data still changed,but notifyListeners not working
解决方法
当您使用 pc.provider_chat.list_chat = new_list();
时,您将访问 Provider_Chat 类设置器,如果您查看它,其中没有 notifyListeners()
(因为 Provider_Chat 不是 ChangeNotifer)。如果您想在更新时更新通知程序,您可以在 Provider_Controller 上使用 setter,它会更改 Provider_Chat 并像这样通知侦听器:
class Provider_Controller with ChangeNotifier {
...
set providerChatList(List<Model_Chat> new_list) {
_provider_chat.list_chat = new_list;
notifyListeners()
}
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。