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
)