Flutter: setState после Navigator.pushReplacement возвращается внутри Navigator.push - PullRequest
0 голосов
/ 04 декабря 2018
class _HomeScreenState extends State<HomeScreen> {
    ...
    onTap: () async {
        await Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => new EditScreen()),
        );
        setState(() {}); // ★
    },
    ...
}

class _EditScreenState extends State<EditScreen> {
    ...
    onPressed: () async {
        Navigator.of(context).pushReplacement(
            new MaterialPageRoute(builder: (context) => new EditCompleteScreen()),
        );
    },
    ...
}

class _EditCompleteScreenState extends State<EditCompleteScreen> {
    ...
    onPressed: () {
        Navigator.of(context).pop();
    },
    ...
}

Фон: В этом приложении есть три сцены.Нажмите на карту на домашнем экране, нажмите на экран редактирования.На экране редактирования нажатие кнопки «Назад» откроет экран редактирования, нажатие другой кнопки приведет к замене экрана редактирования на экран завершения редактирования.На экране завершения редактирования нажатие кнопки подтверждения откроет экран завершения редактирования и вернется к начальному экрану.

Требуемое поведение: Проблема в том, что я хочу setState (отмечен значком ★) для выполнения 1) после нажатия кнопки «Назад» на экране редактирования и 2) после нажатия кнопки подтверждения на экране завершения редактирования.

Текущее поведение: С помощьютекущий код, 1 правильный.Но для 2 setState выполняется после pushReplacement в EditScreenState вместо pop в EditCompleteScreenState.

Есть ли какой-нибудь способ достичь желаемого поведения?

...