Flutter FutureBuilder/StreamBuilder在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'/

我的FutureBuilder/StreamBuilder在使用push导航时调用了不必要的时间。是否可以停止而不更改navigator.push

构建方法


我在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));
              }
          }
        })