Flutter BLo C: управление состоянием первичных типов данных - PullRequest
0 голосов
/ 19 апреля 2020

Я занимаюсь разработкой мобильного приложения с использованием Flutter. Я новичок во Флаттере. Я использую BLo C для управления состоянием. Я знаю, что он специально разработан для управления асин c выполнением. Но также цель BLo C для государственного управления. Но я немного запутался и не совсем уверен, как обращаться с основными типами данных в BLo C.

Давайте представим, что у меня есть кнопка и изображение. Функциональность будет заключаться в том, что при нажатии кнопки видимость изображения будет переключаться. Буквально, нам просто нужно использовать логическую переменную для управления состоянием изображения. Вот как я бы это реализовал.

У меня есть класс blo c с именем HomeBlo c со следующей реализацией.

class HomeBloc {
  bool _isImageDisplayed = true;
  bool get isImageDisplayed => _isImageDisplayed;
  void set isImageDisplayed(bool displayed) {
     this._isImageDisplayed = displayed;
  }   

  //the rest of the code for other functionalities goes here
}

final homeBloc = HomeBloc();

Затем в виджете HomePage я обновляю состояние изображения, подобное этому, в методе setState при нажатии кнопки.

 this.setState(() {        
     homeBloc.isImageDisplayed = false;
 });

Мой вопрос заключается в том, что "это стандартный способ управления первичным типом данных в BLo C во флаттере"? Это лучшая практика? Нужно ли использовать StreamBuilder? Нужно ли нам управлять этим внутри BLo C?

1 Ответ

1 голос
/ 19 апреля 2020

Я полагаю, что это не лучшая практика, так как использование setState становится очень сложным для больших приложений и повторного рендеринга виджетов, которые не меняются без причины. Представьте себе, что вы создаете приложение для электронной коммерции, и вы просто go на странице продукта, вы добавляете понравившийся продукт в корзину, но вы создали на своей домашней странице значок корзины с красной точкой с номером внутри, чтобы указать сколько товаров у вас в корзине, поэтому вы обрабатываете состояние этого значка в файле main.dart, передавая функцию, которая задает маршрут домашней страницы или, возможно, целое приложение, это сложно, не так ли?

К счастью, шаблоны BLo C и Provider в основном используют setState, но лучше, так что вам не нужно повторно визуализировать всю страницу только для небольшого изменения текста или чего-то еще, но вы просто повторно отобразить указанный c виджет в вашем дереве виджетов.

Я также рекомендую использовать BLo C Provider, который построен на Provider и RxDart (Streams), поскольку он обеспечивает большую изоляцию между кодом пользовательского интерфейса и бизнес-кодом .

Проверка Провайдер и BLo C Провайдер .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...