Flutter PopScope не работает при использовании popUntil

class MainScreen extends StatelessWidget {
  const MainScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return PopScope(
      canPop: false, // false or true
      onPopInvoked: (bool didPop) {
        Navigator.popUntil(
            context, ModalRoute.withName(RouterHelper.logInScreen));
      },
      child: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          backgroundColor: Colors.white,
          elevation: 0,
        ),
        body: SafeArea(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              SizedBox(
                width: 312,
                child: 'Main Screeen'.toText(
                  textAlign: TextAlign.center,
                  maxLine: 2,
                  fontSize: 18,
                  fontFamily: poppinsMedium,
                  color:Colors.black,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Хотя мы используем canPop false или true, оба имеют тот же сценарий, что popUntil не работает в onPopInvoked.

Я попытался изменить canPop: true, но все равно получил тот же результат, это приведет к сбою приложения. и маршрут не маршрутизируется. А еще я использую canPop: false и пишу

canPop: false,
onPopInvoked: (bool didPop) {
        Navigator.pop(context);
}

в PopScope то же самое приводит к сбою приложения. Я не могу использовать Navigator.pop и Navigator.popUntil в PopScope.

Альтернативой может быть использование back_button_interceptor - youtu.be/rShYGZoCFxs

Tawanda Muzavazi 21.05.2024 10:06
0
1
487
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать эту новую версию. может быть это полезно для вас.

PopScope(
          canPop: false,
          onPopInvoked: (bool didPop) {
            if (didPop) {
              return;
            }
             Navigator.popUntil(context, ModalRoute.withName(RouterHelper.logInScreen));
          },
  ),

Функция onWillPop устарела после версии Flutter v3.12.0-1.0.pre. Я говорю о последней функции onPopInvoked, которая теперь является последней функцией PopScope.

Muhammad Saim Arshad 14.03.2024 13:18

Это решено <<Необработанное исключение: 'package:flutter/src/widgets/navigator.dart': Неудачное утверждение: строка 5238 поз. 12: '!_debugLocked': неверно.>>. Спасибо!

elmontoya7 09.04.2024 22:13

Другие вопросы по теме