Flutter ScopedModel - это круто

Архитектура Scoped model - отличный вариант для управления состоянием во флаттере. Мне это очень нравится, и вот почему вам стоит тоже!

🔥🔥🔥🔥

Модель

Модель - это класс, в котором вы можете прослушивать изменения и определять свою модель. Вы можете иметь одну или столько моделей, сколько захотите. Было бы более эффективно создавать модели, например, User Authentication, User Feed, TextController, AnimationControllers и т. Д. Сохранение всех этих моделей отдельно и соответствующее отслеживание изменений.

Пример модели

Как вы можете видеть в нашей UserModel, значение userName пусто. Так что, если мы хотим обновить значение userName? С помощью метода changeName ()! У метода есть строковый параметр newValue, который затем устанавливается в _userName. Затем уведомите всех слушателей о новом значении с помощью notifyListeners (). Довольно просто, правда? Вот как это выглядит шаг за шагом.

  1. Значение userName пусто.
  2. Мы устанавливаем _userName на новое значение, переданное changeName (String newValue)
  3. Сообщите всем слушателям о новом значении.
  4. Виджеты, для которых требуется перестройка пользовательской модели после получения уведомления.

ScopedModel

Поместите это в корень вашего приложения. Думайте об этом как о соединителе магазина от redux.

ScopedModelDescendant

Это виджет для поиска соответствующей модели в дереве виджетов. Он будет автоматически перестраиваться всякий раз, когда Модель уведомляет о том, что изменение произошло. Когда виджет обернут в ScopedModelDescendant, дочерние элементы обновятся в соответствии с изменениями в модели.

Пример ScopedModel / ScopedModelDescendant

Итак, это шаблон для пользовательской Scoped Model, но он не позволяет нам изменять значение userName. Посмотрим, как мы это сделаем.

Это так просто! Вот почему я люблю ScopedModel, его очень легко читать. Конечно, это все личные предпочтения, но если вы новичок, попробуйте ScopedModel.

Я скоро напишу сообщение о том, как иметь несколько моделей и параметров класса в приложении! Надеюсь, вам понравился этот пост :)