Выбор ответа Middle Виджеты и три дерева обновлено

Flutter: когда элемент переиспользуется

Вопрос

При перестроении на том же месте дерева был Text, а стал другой Text с другой строкой. Что сделает Flutter?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Переиспользует элемент и рендер-объект: тип и ключ совпали, обновятся только свойства. Элемент переиспользуется, если Widget.canUpdate(old, new) истинно: совпадают runtimeType и key.

Варианты ответа

  1. Удалит старый элемент и создаст новый: виджет другой объект, значит и элемент нужен новый
  2. Переиспользует элемент и рендер-объект: тип и ключ совпали, обновятся только свойстваправильный ответ
  3. Ничего не сделает: виджеты сравниваются по ==, а у двух Text он совпадает
  4. Перестроит всё дерево приложения, начиная с MaterialApp, чтобы учесть новую строку

Разбор

Элемент переиспользуется, если Widget.canUpdate(old, new) истинно: совпадают runtimeType и key. Тогда элемент получает новый виджет и обновляет рендер-объект. Пересоздание происходит при другом типе или другом ключе. == у виджетов по умолчанию ссылочное и для этого решения не используется, а перестраивается только помеченное поддерево.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.