Flutter FutureBuilder/StreamBuilder在Navigator.push时调用了不必要的时间?
我的FutureBuilder/StreamBuilder在使用push导航时调用了不必要的时间。是否可以停止而不更改navigator.push 构建方法Flutter FutureBuilder/StreamBuilder在Navigator.push时调用了不必要的时间?,flutter,dart,stream-builder,Flutter,Dart,Stream Builder,我的FutureBuilder/StreamBuilder在使用push导航时调用了不必要的时间。是否可以停止而不更改navigator.push 构建方法 我在streamBuilder中添加了调试点。导航时,它会运行多次。每次getFromBloc stream changes获取新数据时都会调用pushNamed。您根本不应该在构建函数中的任何地方调用它。您可能希望这样做: getFromBloc.first.thendata=>Navigator.ofcontext.PushName'/
我在streamBuilder中添加了调试点。导航时,它会运行多次。每次getFromBloc stream changes获取新数据时都会调用pushNamed。您根本不应该在构建函数中的任何地方调用它。您可能希望这样做: getFromBloc.first.thendata=>Navigator.ofcontext.PushName'/subCategory',参数:ArgumentspostModel:post 例如,您可以在initState中执行此操作。在getFromBloc stream获得新值后,回调将只执行一次 UPD:我误解你了。每次推送新路由时,不仅StreamBuilder会重新生成,而且堆栈上的每个页面都会重新生成以更新“后退”按钮。这是有道理的 这是工作的预期。一般来说,您应该假设 小部件可以在任何时候重建,而它们通常只是一个简单的例子 优化 特别是,路线将重建,因为其导航器状态已更改 已更改,因此他们可能需要更新如何缩回按钮和 诸如此类
请再核对一下我的问题。。我在点击按钮时导航。
Stream<List<Categorie>> getFromBloc;
@override
void didChangeDependencies() {
getFromBloc = getData();
super.didChangeDependencies();
}
Stream<List<Categorie>> getData()=>
_categoryBloc.category;
StreamBuilder(
stream: getFromBloc,//_categoryBloc.category,
builder: (_, AsyncSnapshot<List<Categorie>> snapshot) {
if (snapshot.data == null) {
...
} else {
...
GestureDetector(
child:...,
onTap:(){
Navigator.of(context).pushNamed('/subCategory',arguments: Arguments(postModel: post));
}
}
})