【问题标题】:notifyListeners in provider not working cause use class inside provider?提供者中的 notifyListeners 不工作导致使用提供者内部的类?
【发布时间】:2021-08-28 14:32:47
【问题描述】:

我有一个 Provider 类“Provider_Controller”,当我使用该类中的所有方法时,它与 notifyListeners 一起正常工作, 但是当我在“Provider_Controller”中放入“Provider_Chat”类时,当“Provider_Chat”中的数据被更新时,notifyListeners not working proper event,

我正在使用提供程序:^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

【问题讨论】:

    标签: flutter dart provider flutter-provider state-management


    【解决方案1】:

    当您使用pc.provider_chat.list_chat = new_list(); 时,您将访问没有notifyListeners() 的Provider_Chat 类设置器(因为Provider_Chat 不是ChangeNotifer)。如果你想在它的更新上更新通知器,你可以在 Provider_Controller 上使用一个设置器,它会改变 Provider_Chat 并像这样通知侦听器:

    class Provider_Controller with ChangeNotifier {
      ...
      set providerChatList(List<Model_Chat> new_list) {
        _provider_chat.list_chat = new_list;
        notifyListeners()
      }
      ...
    }
    

    【讨论】:

    • 谢谢,数据可以更新了,但是 notifyListeners 还是不行
    猜你喜欢
    • 2021-03-17
    • 2020-04-07
    • 1970-01-01
    • 2020-01-06
    • 2020-07-16
    • 1970-01-01
    • 2021-07-17
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多