Выбор ответа Middle Навигация обновлено

Flutter: перехват кнопки «назад»

Вопрос

Чем сейчас заменён WillPopScope для подтверждения выхода с экрана с несохранёнными изменениями?

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

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

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

Коротко

Правильный ответ: PopScope с canPop: false, а диалог показывают в колбэке onPopInvokedWithResult. WillPopScope устарел: его асинхронная модель несовместима с предиктивным жестом «назад» Android 14+, где система должна заранее знать, можно ли уйти.

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

  1. PopScope с canPop: false, а диалог показывают в колбэке onPopInvokedWithResultправильный ответ
  2. BackButtonListener в main, который перехватывает кнопку «назад» для всего приложения
  3. WillPopScope, он по-прежнему рекомендуемый способ и работает с жестом «назад»
  4. Navigator.preventPop() в initState экрана, пока есть несохранённые изменения

Разбор

WillPopScope устарел: его асинхронная модель несовместима с предиктивным жестом «назад» Android 14+, где система должна заранее знать, можно ли уйти. PopScope объявляет это заранее через canPop, а колбэк сообщает о попытке ухода и результате. BackButtonListener существует, но решает другую задачу (вложенные роутеры), а Navigator.preventPop не существует.

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

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

Термины по теме