Я пытаюсь использовать .popUntil, но получаю! _DebugLocked - неверное утверждение. Все решения онлайн не смогли мне помочь. Я верю, что так я настраиваю навигацию.
Ниже приведен мой файл main.dart, мой route.dart (файл навигатора) и мой файл pages.dart. Обратите внимание, что это упрощенная версия моего кода. Тем не менее, структура похожа на мой фактический код. Структура моего кода должна измениться, потому что в моем коде используются вложенные навигаторы!
main.dart
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(debugShowCheckedModeBanner: false, home: Routes());
}
}
rout.dart
import 'package:flutter/material.dart';
import 'package:honeybee_flutter/screens/test/pages.dart';
class Routes extends StatelessWidget {
Routes({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Navigator(
initialRoute: 'route/one',
onGenerateRoute: (RouteSettings settings) {
switch (settings.name) {
case 'route/one':
return MaterialPageRoute(builder: (_) => Route1());
case 'route/two':
return MaterialPageRoute(builder: (_) => Route2());
case 'route/three':
return MaterialPageRoute(builder: (_) => Route3());
default:
throw MaterialPageRoute(builder: (_) => Route1());
}
});
}
}
pages.dart
import 'package:flutter/material.dart';
class Route1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FlatButton(
onPressed: () => Navigator.pushNamed(context, 'route/two'),
child: Text('route/one'))),
);
}
}
class Route2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FlatButton(
onPressed: () => Navigator.pushNamed(context, 'route/three'),
child: Text('route/two'))),
);
}
}
class Route3 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FlatButton(
onPressed: () =>
Navigator.popUntil(context, ModalRoute.withName('route/one')), // This doesn't work, gives me !_debugLocked is not true
child: Text('route/three'))),
);
}
}
При использовании popUntil в Route3 для возврата к Route1 я получаю ошибку! _DebugLocked. Я пытался использовать это решение ( Ошибка, генерируемая во всплывающем окне навигатора, до тех пор, пока: «! _DebugLocked»: не соответствует действительности. »), но я получу черный экран и« Следующее StateError было сгенерировано во время обратного вызова планировщика: flutter: Плохое состояние: Будущее уже завершено 'ошибка.
Я также пытался pushNamedAndRemoveUntil
, но это не вернется назад правильно. Например, я выскочу из Route3 в Route2 следующим образом:
class Route3 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: FlatButton(
onPressed: () => Navigator.pushNamedAndRemoveUntil(
context, 'route/two', ModalRoute.withName('route/one')),
child: Text('route/three'))),
);
}
}
Я нажимаю на маршрут два и удаляю все маршруты до маршрута один. Однако, когда я нажимаю на маршрут 2, а затем нажимаю кнопку «Назад», чтобы открыть .pop, я просто получаю черный экран вместо того, чтобы идти по маршруту 1.
Не уверен, почему это происходит.
Любая помощь приветствуется. Спасибо