Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在没有状态的情况下使用Navigator 2.0进行导航?_Flutter_Flutter Navigation - Fatal编程技术网

Flutter 如何在没有状态的情况下使用Navigator 2.0进行导航?

Flutter 如何在没有状态的情况下使用Navigator 2.0进行导航?,flutter,flutter-navigation,Flutter,Flutter Navigation,我有一个非常简单的场景。一个按钮,按下该按钮将切换到下一个屏幕。在Navigator 1.0中,执行以下操作非常简单: ElevatedButton( onPressed: () { // Navigate to next screen. Navigator.push( context, MaterialPageRoute(builder: (context) => NextScreen()), ); }, child:

我有一个非常简单的场景。一个按钮,按下该按钮将切换到下一个屏幕。在Navigator 1.0中,执行以下操作非常简单:

ElevatedButton(
  onPressed: () {
    // Navigate to next screen.
    Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => NextScreen()),
    );
  },
  child: Text('Next Screen!'),
)
似乎使用
Navigator 2.0
我需要一个状态来跟踪当前屏幕

...
Navigator(
    pages: [
        MainScreenPageRoute()

        if (state.isNextScreen) {
            NextScreenPageRoute()
        }
    ],
    onPopPage: (route, result) {
        // would have to keep track of this value
        state.isNextScreen = false; 
        return route.didPop(result); 
    },
)
...
至于以前,我不必仅仅为了导航而跟踪状态,在
Navigator 2.0
中,它似乎是必需的。真的是这样吗?如果是这样的话,你们对如何正确处理这个问题有什么建议吗

附言。
这也让我感觉现在我必须跟踪状态,这比以前增加了更多的工作。

是的,在navigator 2中,当您更改状态时,您会更改页面

有一些软件包可以帮助您避免这种情况,如

看这个例子

导入“包装:颤振/材料.省道”;
导入“包:qlevar_路由器/qlevar_路由器.dart”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
期末书籍=[
书(《异乡的陌生人》,《罗伯特·a·海因莱因》),
书籍(“基金会”、“艾萨克·阿西莫夫”),
书(‘华氏451度’、‘雷·布拉德伯里’),
];
@凌驾
小部件构建(构建上下文)=>MaterialApp.router(
routeInformationParser:QRouteInformationParser(),
routerDelegate:QRouterDelegate([
Q路由(路径:“/”,生成器:()=>BookListScreen(书籍)),
路线(
路径:
“/books/:id([0-${books.length-1}]),//唯一可用的页面是列表中的页面
生成器:()=>BookDetailsScreen(books[QR.params['id']!.asInt!]),
]));
}
课堂用书{
最后的字符串标题;
最终字符串作者;
书(这个标题,这个作者);
}
类BooksListScreen扩展了无状态小部件{
最终书目;
BookListScreen(this.books);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:ListView(
儿童:[
for(账簿中的账簿)
列表砖(
标题:文本(书名),
字幕:文本(书、作者),
onTap:()=>QR.to('/books/${books.indexOf(book)}'))
],
),
);
}
}
类BookDetailsScreen扩展了无状态小部件{
最后一本书;
BookDetailsScreen(this.book);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
主体:填充物(
填充:常数边集全部(8.0),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
文本(书名,样式:Theme.of(context.textTheme.headline6),
Text(book.author,style:Theme.of(context.textTheme.subtitle1),
],
),
),
);
}
}

别忘了在
pubspec.yaml

中添加
qlevaru路由器:1.4.0
,问题是当你已经有一个状态需要跟踪时(在你的例子中选择了一本书),这是有意义的,但是如果你只需简单地推到下一个屏幕而不传递状态,这感觉就像是一种过度杀戮。