无需重新加载的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) {
...
}
}
我正在使用 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) {
...
}
}