Виджеты без состояния и с состоянием во Flutter

Что такое виджеты?

Во Flutter виджеты являются строительными блоками пользовательского интерфейса. Их можно разделить на два типа: без сохранения состояния и с сохранением состояния.

Виджеты без сохранения состояния — это неизменяемые компоненты, которые отображаются на основе предоставленных данных. Они представляют собой статические элементы пользовательского интерфейса.

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

Используя оба типа виджетов, разработчики могут создавать универсальные и интерактивные пользовательские интерфейсы во Flutter.

Что такое контекст?

Во Flutter «контекст» относится к объекту, который обеспечивает доступ к состоянию, конфигурации и окружающей среде дерева виджетов. Это позволяет виджетам взаимодействовать с другими элементами, получать доступ к ресурсам и выполнять действия в зависимости от их положения в иерархии. Контекст играет решающую роль в создании динамичных и отзывчивых приложений Flutter.

В этом примере мы видим два экрана. Итак, как мы узнаем, что пользователь в каком экране.

Что такое эшафот?

Во Flutter Scaffold — это виджет, который обеспечивает основу для создания макетов в стиле Material Design. Это упрощает процесс организации элементов пользовательского интерфейса, таких как панели приложений, панели навигации и плавающие кнопки действий. С помощью Scaffold разработчики могут легко создавать визуально привлекательные и интерактивные пользовательские интерфейсы, уделяя особое внимание реализации уникальных функций приложений.

Виджеты без сохранения состояния, как следует из их названия, представляют собой неизменяемые компоненты, которые нельзя изменить после создания. Эти виджеты не имеют изменяемого состояния, что означает, что любые изменения переменных, значков, кнопок или получения данных не повлияют на состояние приложения. Они идеально подходят для ситуаций, когда пользовательский интерфейс опирается исключительно на внутреннюю информацию объекта. Примеры виджетов без сохранения состояния включают, среди прочего, текст, значки и выпуклые кнопки. Думайте о них как о неизменных статических элементах пользовательского интерфейса вашего приложения.

В этом примере MyStatelessWidget — это класс, представляющий виджет без сохранения состояния. Он расширяет StatelessWidget и переопределяет метод build(), в котором реализован код рендеринга виджета.

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

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

С другой стороны, виджеты с отслеживанием состояния — это динамические существа, которые можно изменять, и их свойства могут быть изменены даже после создания. Эти виджеты поддерживают изменяемые состояния, что позволяет динамически изменять различные части пользовательского интерфейса. Виджеты с отслеживанием состояния вступают в игру, когда вам нужно обновить определенные компоненты пользовательского интерфейса в зависимости от действий пользователя или изменения данных. У них есть внутренний метод `setState()`, который запускает повторную визуализацию виджета всякий раз, когда изменяются входные данные. Некоторыми примерами виджетов с состоянием являются флажки и переключатели.

В этом примере MyStatefulWidget — это класс виджета, расширяющий StatefulWidget. Он переопределяет метод createState(), возвращая экземпляр _MyStatefulWidgetState, который является сопутствующим классом состояния.

Класс _MyStatefulWidgetState расширяет класс State и содержит свойства и методы, связанные с состоянием. Метод build() также переопределяется для определения кода рендеринга виджета.

Отделяя класс виджета от его класса состояния, Flutter гарантирует, что состояние сохраняется даже при перестроении виджета, что позволяет динамически обновлять и взаимодействовать с приложением.

Основные различия между виджетами без состояния и виджетами с состоянием заключаются в их неизменности и изменчивости соответственно. Виджеты без сохранения состояния являются статичными и не изменяются во время выполнения, в то время как виджеты с сохранением состояния могут динамически обновляться во время работы приложения. В то время как виджеты без состояния не имеют метода setState(), виджеты с состоянием используют его для инициации повторного рендеринга и реагирования на изменения в данных или действиях пользователя.

Понимание различий между этими двумя типами виджетов жизненно важно для создания эффективных и отзывчивых приложений Flutter. Используя возможности как виджетов без сохранения состояния, так и виджетов с отслеживанием состояния, вы можете создавать интуитивно понятные пользовательские интерфейсы, которые легко адаптируются к изменяющимся условиям и обеспечивают исключительный пользовательский опыт.

Ниже вы найдете ссылку на YouTube с руководством по виджетам без сохранения состояния и с отслеживанием состояния: [Учебник YouTube: Виджеты без сохранения состояния и с отслеживанием состояния]

Вывод:

Понимание разницы между виджетами без состояния и виджетами с состоянием во Flutter имеет решающее значение. Виджеты без состояния являются неизменяемыми и представляют собой статические компоненты пользовательского интерфейса, в то время как виджеты с состоянием являются динамическими, и их свойства и состояния могут обновляться с течением времени. Выбор правильного типа виджета необходим для создания эффективных и отзывчивых приложений Flutter.