Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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 下一页流未在颤振上更新_Flutter_Dart - Fatal编程技术网

Flutter 下一页流未在颤振上更新

Flutter 下一页流未在颤振上更新,flutter,dart,Flutter,Dart,我用了两页纸。我在第一页添加了StreamBuilder,并将snapshot.data传递到下一页。但当第二页中的值发生变化时,值不会发生变化。如何修复它?我不能在两个页面中调用streamBuilder,因为这意味着在firebase中读取两个。有没有办法为任何地方的服务和访问创建singleton StreamBuilder( stream: db.getData(), builder: (context,snapshot){

我用了两页纸。我在第一页添加了
StreamBuilder
,并将
snapshot.data
传递到下一页。但当第二页中的值发生变化时,值不会发生变化。如何修复它?我不能在两个页面中调用
streamBuilder
,因为这意味着在
firebase
中读取两个。有没有办法为任何地方的服务和访问创建
singleton

StreamBuilder(
              stream: db.getData(),
              builder: (context,snapshot){
                return Column(
                  children: <Widget>[
                    InkWell(
                      onTap: ()=> Navigator.pushNamed(context, '/nextPage',arguments: Arguments(
                        data: snapshot.data
                      )),
                    )
                  ],
                );
              },
            )
StreamBuilder(
流:db.getData(),
生成器:(上下文,快照){
返回列(
儿童:[
墨水池(
onTap:()=>Navigator.pushName(上下文,'/nextPage',参数:参数(
数据:snapshot.data
)),
)
],
);
},
)
使用上述代码时,仅当您在
墨水池
上点击
时,才会发送数据快照。这意味着,除非在墨水池上敲击,否则不会向下一页提供新数据

为了解决这个问题,我建议如下:

在第一页中

  • 创建
    ValueNotifier
    实例以观察公共引用中的更改:
  • firebaseDataNotifier
    作为
    data
    传递给
    nextPage
在下一页中

  • ValueListenable
注意:确保将
ValueNotifier
实例放在这两个小部件之外,这样它们就可以在没有任何依赖关系的情况下访问它

InkWell(
  onTap: ()=> Navigator.pushNamed(context, '/nextPage',arguments: Arguments(
  data: snapshot.data
  ),
),
  // change Cast to type that you receive from firebase, or you can omit the cast 
 final ValueNotifier<snapshot_data_type> firebaseDataNotifier = ValueNotifier<snapshot_data_type>();
 StreamBuilder(
           stream: db.getData(),
           builder: (context,snapshot){
             firebaseDataNotifier.value = snapshot.data;
             ...
  ValueListenableBuilder(
          valueListenable: valueNotifier,
          builder: (context, firebaseData, child) {
            // return your next page widget here and use firebaseData instead of snapshot.data
        )