我是新手,在Flutter中有一个关于路线和分页符的例外。
import 'package:flutter/material.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
// ...
return new ListTile(
onTap: () {
Navigator.pushNamed(context, "/listadecompras");
},
// ...
}
class ListaDeCompras extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
// ...
}
}
void main() {
runApp(new MaterialApp(
home: new MyApp(),
routes: <String, WidgetBuilder>{
"/listadecompras": (BuildContext context) => new ListaDeCompras()
}
));
}
按照代码摘录:
{{1}}
拜托,有人可以发一些建议吗? 提前感谢您的关注
答案 0 :(得分:16)
这是因为您已实例化了两个MaterialApp
小部件。您需要删除MyApp
类中的一个,并将其更改为Scaffold
,而不是这样:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
// ...
return new ListTile(
onTap: () {
Navigator.pushNamed(context, "/listadecompras");
},
// ...
}
您的代码中发生的情况是路由尝试解析最近的MaterialApp
没有路由定义。这就是说应该只使用一个MaterialApp
作为小部件树的根。
答案 1 :(得分:3)
如果创建了一个新文件,并且正在为该新文件定义路由,则最好重新运行该应用程序,而不是热重载。它对我有用!
答案 2 :(得分:2)
flutter clean
并再次运行,对我有用。
答案 3 :(得分:1)
它发生在我身上,但就我而言,实例化了一个 MaterialApp
小部件,因此我无法找到原因。
我注意到在我的应用程序中,所有对 Navigator 的调用都是一样的,使用:
Navigator.of(context).pushNamed('/route-name');
所有,除了第一个,是这样的:
Navigator.pushNamed(context, '/route-name');
将上面的行改为与其他行相等(使用.of(context)
)后,问题解决了!
直到现在我的导航都没有问题,曾经尝试从对话框导航到新视图时发生了。
如果你只有一个MaterialApp,而且你无法解决这个问题,请尝试检查你的导航链,并在每个地方使用相同的方式调用Navigator。
再见
答案 4 :(得分:0)
@aziza是正确的答案 但在其他情况下 就我而言
class RouteGenerator {
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case '/':
MaterialPageRoute(builder: (_) => MyScaffold());
break;
case '/homechart':
MaterialPageRoute(builder: (_) => analytics());
break;
}
}
}
我忘记返回关键字,并且IDE不显示任何错误。显示这种错误。
解决方案是这样的:
class RouteGenerator {
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (_) => MyScaffold());
break;
case '/homechart':
return MaterialPageRoute(builder: (_) => analytics());
break;
}
}
}
答案 5 :(得分:0)
尝试:
onPressed: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => new ListaDeCompras(),
),
);
},
答案 6 :(得分:0)
您已实例化了两个MaterialApp小部件。您需要删除MyApp类中的一个。
用于推送
Navigator.of(context).pushNamed('/screen1')
对于流行音乐:“ popAndPushNamed”
Navigator.of(context).popAndPushNamed('/screen4');
答案 7 :(得分:0)
我遇到了相同的错误,只需重启应用即可解决
答案 8 :(得分:0)
在我的情况下,错误是因为我从route
删除了main.dart
而忘了更新其他文件中的更改
答案 9 :(得分:0)
我遇到了同样的错误,我不知道为什么在创建新屏幕后 flutter 会出现这种情况,但您只需要重新构建 z 或重新运行应用程序
答案 10 :(得分:0)
我遇到了类似的问题,因为我将路由定义为“/listadecompras”,然后在没有正斜杠的情况下调用了 Navigator.pushNamed(context, "listadecompras");
。
这可能与这个问题的场景不同,但它显示了相同的错误。
答案 11 :(得分:0)
我遇到了同样的问题。问题是我有一个模板并复制了屏幕并且在一切正常工作后没有删除我的材料应用程序
答案 12 :(得分:-1)
如果您没有为 MaterialApp 定义 home 属性,您可能应该遇到这种错误。请尝试使用 Scaffold 小部件填充它。
答案 13 :(得分:-1)
如果您有多个 MaterialApp,则只需要一个 MaterialApp
,那么我建议您的项目只保留一个 MaterialApp
。