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.
Вы можете попробовать эту новую версию. может быть это полезно для вас.
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.
Это решено <<Необработанное исключение: 'package:flutter/src/widgets/navigator.dart': Неудачное утверждение: строка 5238 поз. 12: '!_debugLocked': неверно.>>. Спасибо!
Альтернативой может быть использование back_button_interceptor - youtu.be/rShYGZoCFxs