0

我使用 Flutter 和 Firestore 来制作投资应用程序。 在此处输入图像描述 在此页面中,我在 Streambuilder 中获取 Firestore 的数据。我收到的数据用 Inkwell 显示在 Listview 中。我想要做的是当我单击 Inkwell 时,然后将左下角的 Text Widget 的文本更改为 Listview 的编号。所以,我在 FutureBuilder 中使用了 setstate 方法。它有效,但存在一些问题。当我单击 Inkwell 时,整个页面都会重新加载。因此,我的 Streambuilder 小部件显示 circleprogressindicator 短。但是我认为这对用户不利。我想解决这个问题。有什么解决办法吗?我的代码在这里。我很抱歉我的英语不好,我希望我的问题得到了适当的沟通。 https://github.com/RGLie/Investing-Game-ICISTS/blob/main/lib/startup_1_trade.dart

4

1 回答 1

0

build您可以通过将流存储在方法外部的变量中并在小部件中使用它们来修复重建StreamBuilder

class Startup1Trade extends StatefulWidget {
  ...
}

class _Startup1TradeState extends State<Startup1Trade> {
  ...

  CollectionReference prices = FirebaseFirestore.instance.collection('startup_1');
  CollectionReference users = FirebaseFirestore.instance.collection('users');

  final Stream priceStream = prices.doc('price').snapshots();
  final Stream userStream = users.doc(widget.user.uid).snapshots();
  
  @override
  Widget build(BuildContext context) {
    ...
  }
  

}

像这样使用它们:

StreamBuilder<DocumentSnapshot>(
  stream: priceStream,
  builder: (context, snap) {
    ...
  }
}

StreamBuilder<DocumentSnapshot>(
  stream: userStream,
  builder: (context, snap) {
    ...
  }
}
于 2021-08-26T11:53:29.633 回答