设置MaterialApp initRoute为'/', 提示这个错误'Could not find a generator for route RouteSettings("/", null) in the _WidgetsAppState.'
main.dart
import 'package:flutter/material.dart';
import 'package:flutter_demo/pages/Tabs.dart';
import 'package:flutter_demo/routes/Routes.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
// home: TabPage(),
// routes: {
// '/form': (context) => FormsPage(),
// '/search': (context) => SearchPage()
// },
initialRoute: '/',
onGenerateRoute: onGenerateRoute,
theme: ThemeData(primarySwatch: Colors.blue),
);
}
}
Route.dart
import 'package:flutter/material.dart';
import 'package:flutter_demo/pages/Tabs.dart';
import 'package:flutter_demo/pages/users/Login.dart';
final routes = {
'/': (context) => TabPage(),
'/login': (context) => LoginPage(),
};
var onGenerateRoute = (RouteSettings settings) {
final String name = settings.name;
final Function pageContentBuilder = routes[name];
if (pageContentBuilder != null) {
if (settings.arguments != null) {
final Route route = MaterialPageRoute(
builder: (context) =>
pageContentBuilder(context, arguments: settings.arguments));
return route;
}
} else {
final Route route =
MaterialPageRoute(builder: (context) => pageContentBuilder(context));
return route;
}
};
Tab.dart
import 'package:flutter/material.dart';
import 'package:flutter_demo/pages/tabs/Category.dart';
import 'package:flutter_demo/pages/tabs/Home.dart';
import 'package:flutter_demo/pages/tabs/Setting.dart';
class TabPage extends StatefulWidget {
final index;
TabPage({Key key, this.index = 0}) : super(key: key);
@override
_TabPageState createState() => _TabPageState(this.index);
}
class _TabPageState extends State<TabPage> {
int _currIndex;
_TabPageState(index) {
this._currIndex = index;
}
List _pageList = [HomePage(), CategoryPage(), SettingPage()];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo'),
),
body: this._pageList[this._currIndex],
bottomNavigationBar: BottomNavigationBar(
currentIndex: this._currIndex,
onTap: (int index) {
setState(() {
this._currIndex = index;
});
},
fixedColor: Colors.green,
items: [
BottomNavigationBarItem(
icon: Icon(
Icons.home,
),
label: '首页'),
BottomNavigationBarItem(
icon: Icon(
Icons.category,
),
label: '分类'),
BottomNavigationBarItem(
icon: Icon(
Icons.settings,
),
label: '首设置页')
],
),
);
}
}
the Error:
════════ Exception caught by widgets library ═══════════════════════════════════
The following assertion was thrown building IconTheme(color: Color(0xdd000000)):
Could not find a generator for route RouteSettings("/", null) in the _WidgetsAppState.
Make sure your root app widget has provided a way to generate
this route.
Generators for routes are searched for in the following order:
- For the "/" route, the "home" property, if non-null, is used.
- Otherwise, the "routes" table is used, if it has an entry for the route.
- Otherwise, onGenerateRoute is called. It should return a non-null value for any valid route not handled by "home" and "routes".
- Finally if all else fails onUnknownRoute is called.
Unfortunately, onUnknownRoute was not set.
The relevant error-causing widget was
我将Navigator.pushNamed(context, '/login')
改为
navigator.push(context, MaterialPageRoute(
builder: (context) => LoginPage()
))
并且设置MaterialApp(home: TabPage())可以正常跳转.
所以为什么设置MaterialApp(initRoute: '/')
并且用navigator.pushNamed()
会得到上面的错误.
onGeneratePageRoute()内部逻辑错误