无需重新加载的Flutter更新文本小部件变量

Flutter Update Text Widget Variable without Reloading

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

您可以通过将流存储在 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) {
    ...
  }
}