Какие типы виджетов есть во Flutter
Что проверяют
Понимаете ли вы модель Flutter: виджет это неизменяемое описание интерфейса, а не сам элемент на экране. Следом спрашивают, чем StatefulWidget отличается от StatelessWidget и что происходит при вызове setState.
Как отвечать
Базовое деление идёт по тому, от какого класса наследуется виджет:
StatelessWidget: всё берёт из конструктора и контекста,buildзависит только от них.Text,Icon, большинство ваших презентационных компонентов;StatefulWidget: сам виджет неизменяем, а состояние живёт в отдельном объектеState, который переживает перестроения. Жизненный цикл:initState,didUpdateWidget,build,dispose. ВызовsetStateпомечает элемент грязным, и в следующем кадре вызываетсяbuild;InheritedWidget: передаёт данные вниз по дереву, потомки подписываются черезcontext.dependOnInheritedWidgetOfExactType. На нём построеныTheme.of,MediaQuery.ofи пакет Provider. Ближайший аналог в React это Context;RenderObjectWidget: создаютRenderObject, который отвечает за раскладку и отрисовку. ЭтоPadding,Row,Stack,Opacity;ParentDataWidget: сообщают родителю параметры раскладки ребёнка, напримерExpandedвнутриFlexилиPositionedвнутриStack.
Сильный ответ объясняет три дерева: виджеты, элементы и объекты рендера. Виджеты дёшево пересоздаются на каждый build, элементы сопоставляют старое и новое дерево по типу и Key, а тяжёлые RenderObject переиспользуются. Отсюда совет ставить const у конструкторов: такой экземпляр не пересобирается при перестроении родителя. Анимации тоже укладываются в схему: неявные (AnimatedContainer) и явные на AnimationController с FadeTransition.
Где спотыкаются
Делят виджеты на «статические и динамические» и перечисляют Container и ListView. Это каталог, а не типы, интервьюер ждёт иерархию классов.
Считают, что setState перерисовывает весь экран. Перестраивается поддерево этого State, поэтому состояние держат как можно ниже.
Забывают dispose у AnimationController, TextEditingController и подписок на стримы, получая утечки и исключения после ухода с экрана.