我的FutureBuilder/StreamBuilder
在使用push
导航时称不必要的时间。是否可以不做任何更改就停止navigator.push
?
Stream<List<Categorie>> getFromBloc;
@override
void didChangeDependencies() {
getFromBloc = getData();
super.didChangeDependencies();
}
内部state
,外部build
方法
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));
}
}
})
我在streamBuilder
内添加了调试点。导航多次运行时。
答案 0 :(得分:0)
pushNamed。您根本不应该在build函数中的任何地方调用它。您可能想要这样做:
getFromBloc.first.then((data) => Navigator.of(context).pushNamed('/subCategory',arguments: Arguments(postModel: post)))
例如,您可以在initState中进行操作。 getFromBloc流获得新值后,回调将仅执行一次。
UPD :我错了。每次按下新路线时,不仅StreamBuilder会得到重建,而且堆栈上的每个页面也会得到重建以更新“后退”按钮。有一个issue。
这按预期工作。通常,您应该假设 窗口小部件可以随时重建,而大部分时间不是 优化。
尤其是,由于其导航器状态为 已更改,因此他们可能需要更新其退回按钮的方式,并 之类的。