gpt4 book ai didi

flutter - 下一个页面流不会在 Flutter 上更新

转载 作者:行者123 更新时间:2023-12-03 03:01:10 25 4
gpt4 key购买 nike

我用了两页。我在第一页中添加了 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
)),
)
],
);
},
)

最佳答案

InkWell(
onTap: ()=> Navigator.pushNamed(context, '/nextPage',arguments: Arguments(
data: snapshot.data
),
),

使用上述代码时,仅当您在InkWell点击 时才会发送数据快照。这意味着除非点击墨水瓶,否则它不会向 nextPage 提供新数据。

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

在首页

  • 创建ValueNotifier实例来观察公共(public)引用的变化:
  // 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>();
  • 从 firebase 接收数据时更新 firebaseDataNotifier 的值:
 StreamBuilder(
stream: db.getData(),
builder: (context,snapshot){
firebaseDataNotifier.value = snapshot.data;
...
  • firebaseDataNotifier 作为 data 传递给 nextPage

在下一页

  • ValueListenable 包裹下一页小部件
  ValueListenableBuilder(
valueListenable: valueNotifier,
builder: (context, firebaseData, child) {
// return your next page widget here and use firebaseData instead of snapshot.data
)

注意:确保将 ValueNotifier 实例保留在两个小部件之外,以便它们可以在没有任何依赖性的情况下访问它。

关于flutter - 下一个页面流不会在 Flutter 上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59407806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com