Я согласен @ CopsOnRoad спасибо за упоминание. только что обновил мой ответ.

т с состоянием определяется как любой виджет, который меняет свое состояние в течение своего времени жизни. Но это очень распространенная практика дляStatelessWidget иметьStatefulWidget как один из его детей. неStatelessWidget стать государством, если оно имеетStatefulWidget как один из его детей?

Я пытался заглянуть в документацию как часть кодаStatelessWidget, но не мог понять, какStatelessWidget может иметьStatefulwidget как его дети и до сих пор остаютсяStatelessWidget.

Каково соотношение и различие между виджетами с сохранением состояния и без сохранения состояния во Flutter?

 aziza27 нояб. 2017 г., 00:01
Вы можете составить свой макет из разных типов виджетов, однако это не означает, что вы наследуете характеристики композиции, чтобы повлиять на каждый виджет. Я имею в виду, что вы можете иметь Контейнер без состояния, который имеет дочерний элемент другого Контейнера, который объявлен как StatefulWidget где-то еще, состояние контейнера будет влиять только на этот один компонент. Итак, все дело в том, чтобы иметь композицию из разных типов виджетов, каждая из которых нужна вам.
 Rémi Rousselet27 нояб. 2017 г., 00:27
Чтобы запутать вещи еще больше, есть виджет третьего типа:InheritedWidget ; Который может сделатьStatelessWidget Обновить.

Ответы на вопрос(6)

StackOverflow вопрос о сохранении состояния без сохранения состояния.

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

Виджет с состоянием, однако, не обязательно совпадает с другим, созданным с теми же аргументами конструктора. Это может быть в другом состоянии.
На самом деле, с состояниемвиджет является неизменным (без сохранения состояния), но Флаттер управляет отдельным состояниемобъект и связывает это с виджетом, как объяснено вStatefulWidget doc, Это означает, что когда Flutter перестраивает виджет с сохранением состояния, он проверит, следует ли ему повторно использовать предыдущий объект состояния, и при желании присоединит этот объект состояния к виджету.

Родительский виджет не имеет состояния, потому что он не заботится о состоянии своего дочернего элемента. Сам ребенок с состоянием (или технически Флаттер) позаботится о своем собственном состоянии.
На высоком уровне, я согласен, что это делает родительский виджет с состоянием, потому что два родителя могут содержать двух дочерних элементов с разными состояниями и, таким образом, сами по себе технически разные. Но с точки зрения Flutter, он создает родительский виджет, не заботясь о состоянии, и только при создании дочерний элемент будет учитывать его полноту.

Виджеты без сохранения состояния статические виджеты Вам просто нужно передать несколько свойств перед инициализацией виджетов без сохранения состояния. Они не зависят от изменений данных или поведения. Например. Text, Icon, RaisedButton - это виджеты без состояния.

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

Изменить 15/11/2018

Виджеты без сохранения состояния может повторно выполнить рендеринг, если изменились входные / внешние данные (внешние данные - это данные, которые передаются через конструктор). Поскольку виджеты без состояния не имеют состояния, они будут отображаться один раз и не будут обновляться самостоятельно, а будут обновляться только при изменении внешних данных.

В то время какStateful Widgets имеют внутреннее состояние и могут выполнять повторную визуализацию при изменении входных данных или при изменении состояния виджета.

И виджеты без состояния и с состоянием имеют разный жизненный цикл.

 Hammad Tariq15 нояб. 2018 г., 12:18
Я согласен @ CopsOnRoad спасибо за упоминание. только что обновил мой ответ.
 CopsOnRoad29 окт. 2018 г., 11:08
Даже после передачи новых данных извнеStateless виджет мы можем изменить его тоже во время выполнения, но он не называетсяStateful виджет (в отличие от вашей последней строки).

В чем смысл?

Некоторые виджеты с состоянием, а некоторые без состояния. Если виджет изменяется (например, пользователь взаимодействует с ним), то он сохраняет состояние. Состояние виджета состоит из значений, которые могут изменяться, например, текущее значение ползунка или флажок. Состояние виджета сохраняется в объекте State, отделяя состояние виджета от его внешнего вида. Когда состояние виджета изменяется, объект состояния вызывает setState (), сообщая платформе о перерисовке виджета.

A виджет без состояния не имеет внутреннего состояния для управления. Icon, IconButton и Text являются примерами виджетов без состояния, которые являются подклассами StatelessWidget.

A виджет с состоянием динамично Пользователь может взаимодействовать с виджетом с отслеживанием состояния (например, вводя в форму или перемещая ползунок), или он изменяется со временем (возможно, подача данных приводит к обновлению пользовательского интерфейса). Флажок, Радио, Слайдер, InkWell, Форма и TextField являются примерами виджетов с состоянием, которые подклассируют StatefulWidget.

https://flutter.io/tutorials/interactive/#stateful-stateless

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

StatefulWidget:

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

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

Сами экземпляры StatefulWidget являются неизменяемыми и хранят свое изменяемое состояние либо в отдельных объектах State, созданных методом createState, либо в объектах, на которые подписывается это State, например объекты Stream или ChangeNotifier, ссылки на которые хранятся в конечных полях StatefulWidget сам.

StatelessWidget:

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

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

flutter.io:

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

Если вы сомневаетесь, то всегда помните это правило: если виджет изменяется (например, пользователь взаимодействует с ним), он сохраняет состояние. Однако, если ребенок реагирует на изменения, содержащийся родитель может по-прежнему быть виджетом без сохранения состояния, если родитель не реагирует на изменения.

StatelessWidget никогдаперестраивать сам по себе (но может от внешних событий).StatefulWidget Можно. Это золотое правило.

НО любой виджет может бытьперекрашенный любые времена.

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

Но тебя не должно волновать тип твоих детей. Это не имеет никакого влияния на вас.

 user46245527 нояб. 2017 г., 03:36
Также из комментариев в коде флаттера, видимоStateFulWidgets тоже неизменны.
 Rémi Rousselet27 нояб. 2017 г., 06:08
классы, которые наследуют StatefulWidget, являются неизменяемыми. Но само состояние (State <YourWidget>) изменчиво.
 user46245527 нояб. 2017 г., 03:31
(Относительно новый в рамках). В чем разница междуrebuild а такжеrepaint
 Ian17 окт. 2018 г., 12:24
Я отмечаю, что мой виджет без сохранения состояния перестраивается, но мне интересно, потому что он ссылается на виджет с контролем состояния?
 Rémi Rousselet27 нояб. 2017 г., 06:07
Сборка виджета - это, по сути, вызов метода «build» с последующим созданием / обновлением соответствующего renderbox; который сопровождается процессом покраски. Который будет печатать эти коробки визуализации на экране.

Ваш ответ на вопрос