создать экземпляр Bloc от BlocProvider в initState во флаттере

Является ли хорошей практикой инициализировать и создавать экземпляр Bloc в методе InItState () в statefulWidget? или нет, и почему, спасибо:

LoginBloc loginBloc;

  @override
  void initState() {
    loginBloc = BlocProvider.of<LoginBloc>(context);
    super.initState();
  }

person Osama Mohammed    schedule 23.10.2020    source источник
comment
Да, вот как вы это делаете. Либо создайте блок, используя конструктор по умолчанию, либо получите его из BlocProvider - как в initState (). Используйте bloc.close () в dispose (), если блок был создан только для вашего виджета с помощью конструктора.   -  person Alexey Subbotin    schedule 23.10.2020
comment
спасибо за ответ, но не могли бы вы пояснить, что вы имеете в виду под этим ((если блок был создан только для вашего виджета с помощью конструктора))?   -  person Osama Mohammed    schedule 23.10.2020
comment
Извините за нечеткое объяснение. Это было просто напоминанием о том, чтобы закрыть свой блок, когда он больше не нужен, например если он создан в initState () и используется только в вашем виджете, он должен быть закрыт при удалении виджета - так в dispose ().   -  person Alexey Subbotin    schedule 24.10.2020
comment
Это в основном то, для чего используются initState () и dispose (). Отвечая на вопрос темы - да, вы должны создать экземпляр или получить свой блок от провайдера в initState ().   -  person Alexey Subbotin    schedule 24.10.2020


Ответы (1)


Написанный вами код на самом деле не создает экземпляров какого-либо объекта. Он извлекает любой доступный экземпляр LoginBloc из предоставленного контекста, так что это совершенно нормально. Однако, насколько я знаю, можно даже создавать экземпляры объектов внутри initState, но имейте в виду, что после создания экземпляра из BlocProvider вам также придется иметь дело с его закрытием.

person Amir_P    schedule 23.10.2020