Flutter: не удалось найти генератор для маршрута RouteSettings ("/ HomePage", null) в _WidgetsAppState
Я использую ниже в своем демонстрационном проекте для маршрутов
routes: <String, WidgetBuilder>{
'/HomePage': (BuildContext context) => HomePage()
},
И пытаясь перейти на главный экран, используя приведенный ниже код
onPressed: () {
debugPrint("Hello button is clicked");
Navigator.of(context)
.pushReplacementNamed('/HomePage');
},
Но когда моя кнопка нажата, я попадаю ниже исключения
════════ Exception caught by gesture ═══════════════════════════════════════════════════════════════
The following assertion was thrown while handling a gesture:
Could not find a generator for route RouteSettings("/HomePage", null) in the _WidgetsAppState.
Generators for routes are searched for in the following order:
1. For the "/" route, the "home" property, if non-null, is used.
2. Otherwise, the "routes" table is used, if it has an entry for the route.
3. Otherwise, onGenerateRoute is called. It should return a non-null value for any valid route not handled by "home" and "routes".
4. Finally if all else fails onUnknownRoute is called.
Unfortunately, onUnknownRoute was not set.
When the exception was thrown, this was the stack:
#0 _WidgetsAppState._onUnknownRoute.<anonymous closure> (package:flutter/src/widgets/app.dart:772:9)
#1 _WidgetsAppState._onUnknownRoute (package:flutter/src/widgets/app.dart:785:6)
#2 NavigatorState._routeNamed (package:flutter/src/widgets/navigator.dart:1625:22)
#3 NavigatorState.pushReplacementNamed (package:flutter/src/widgets/navigator.dart:1690:35)
#4 _RegisterPage.build.<anonymous closure> (package:oricon/register.dart:231:42)
Я уже проверял ниже ссылки на переполнение стека
- Не удалось найти генератор для маршрута RouteSettings("/", null) в _WidgetsAppState
- Как использовать маршруты во флаттере для перехода на страницу, отличную от основной?
- Не удалось найти генератор для маршрута "домашняя страница" в _MaterialAppState
- Почему не работает, когда я использую pushNamedReplacement вместо pushReplacement?
Если потребуется дополнительная информация, дайте мне знать. Заранее спасибо. Ваши усилия будут оценены.
6 ответов
попробуй это
Navigator.of(context, rootNavigator: true).pushNamed("/HomePage");
Вы можете использовать вместо:
Navigator.of(context)
.pushReplacementNamed('/HomePage');
Использовать это:
Navigator.push(context, new MaterialPageRoute(
builder: (context) => new MyHomePage())
);
Как вы можете видеть в этом ответе, это сработало для меня
Вы внедряете в основной класс, который получает ваши пути?
Вот пример:
void main() => runApp(MyApp()); //as you can see here, it is the main widget
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MyApp',
theme: ThemeData(
primarySwatch: Colors.green,
),
home: MyHomePage(title: 'Home Page'),
routes: {
'profile': (context) => ProfilePage(),
/*Here's where you receive your routes, and it is also the main widget*/
},
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
Кроме того, я должен добавить, что ваш вопрос помог мне найти, что не так с моим кодом. Спасибо!!!
У меня был навигационный ящик, и один из моих маршрутов шел к маршруту, на котором был другой виджет MaterialApp(), и после маршрутизации на эту страницу, если я вернусь на любую другую страницу, это произойдет через это исключение.
потому что контекст был изменен на приложение нового материала, и я пытался найти этот маршрут внутри приложения нового материала, но, очевидно, его там не было.
Вы можете искать MaterialApp в своем коде (не учитывать код плагина), а также указывать аргументы, если вы используете навигатор pushName, который может избежать проблемы с нулевым значением.
Пожалуйста, проверьте эти два MaterialApp .