找不到路线发电机

Gúb*_*ner 12 flutter

我是新手,在Flutter中有一个关于路线和分页的例外.

EXCEPTION CAUGHT BY GESTURE
The following assertion was thrown while handling a gesture:
Could not find a generator for route "/listadecompras" in the _MaterialAppState.
Run Code Online (Sandbox Code Playgroud)

请遵循以下代码摘录:

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()
    }
));
}
Run Code Online (Sandbox Code Playgroud)

请有人可以发一些建议吗?提前感谢您的关注

azi*_*iza 31

这是因为您已经实例化了两个MaterialApp小部件.您需要删除MyApp类中的那个,并可能将其更改为Scaffold以下内容:

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
// ...                    
                return new ListTile(
                  onTap: () {                                         
                    Navigator.pushNamed(context, "/listadecompras");
                  },
// ...
}
Run Code Online (Sandbox Code Playgroud)

您的代码中发生的是路由尝试解析最近的MaterialApp没有路由定义的路由.这就是说你应该只使用一个MaterialApp作为你的小部件树的根.

  • 非常感谢你!现在,我看到了自己的错误,并且对Flutter有了更多了解。 (2认同)

adi*_*adi 13

如果创建了一个新文件并且您正在为该新文件定义路径,最好重新运行应用程序而不是热重新加载。这对我有用!

  • “颤振干净”,然后再试一次,对我有用。 (2认同)

小智 5

尝试这个 :

onPressed: () {
    Navigator.push(
      context,
      new MaterialPageRoute(
        builder: (context) => new ListaDeCompras(),
      ),
    );
  },
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到了类似的问题,因为我将路由定义为“/listadecompras”,然后Navigator.pushNamed(context, "listadecompras");在不使用正斜杠的情况下进行调用。

这可能与这个问题不同,但它显示了相同的错误。