【发布时间】:2020-07-22 08:19:48
【问题描述】:
如何在 Flutter 应用中使用 Timer 功能从 firebase 数据库中检索数据?
P.S.用户请求数据将在 5 分钟后从 firebase 数据库中检索出来。
谢谢
【问题讨论】:
标签: database firebase flutter timer
如何在 Flutter 应用中使用 Timer 功能从 firebase 数据库中检索数据?
P.S.用户请求数据将在 5 分钟后从 firebase 数据库中检索出来。
谢谢
【问题讨论】:
标签: database firebase flutter timer
我的代码如下所示。正如您在上面指出的那样,我也更新了数据库,但仍然是白屏
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: Firestore.instance
.collection('fortunepool')
.where('index', isGreaterThanOrEqualTo: 0)
.orderBy('index')
.limit(1)
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container(child: CircularProgressIndicator());
} else {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
List<DocumentSnapshot> listedQS =
snapshot.data.documents; //listed documents
DocumentSnapshot mypost = listedQS[0];
return Stack(
【讨论】:
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: Firestore.instance.collection('fortunepool').where('index', isGreaterThanOrEqualTo: 0).orderBy('index').limit(1).snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container(child: CircularProgressIndicator());
} else {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
List<DocumentSnapshot> listedQS =
snapshot.data.documents; //listed documents
var random = new Random(); //dart math
for (var i = listedQS.length - 1; i > 0; i--) {
var n = random.nextInt(i + 1);
var temp = listedQS[i];
listedQS[i] = listedQS[n];
listedQS[n] = temp;
}
DocumentSnapshot mypost = listedQS[0];
return Stack(
【讨论】:
addEntry 函数,因此每个文档都有一个从 0、1、2、3 开始的索引,...然后您的 StreamBuilder 将听Firestore.instance .collection('//Collection name') .where('index', isGreaterThanOrEqualTo: 0) .orderBy('index') .limit(1) .snapshots(),
我的代码如下所示,如何使用 Querysnapshot 方法显示文本和图像值?您在 brew 代码中提到的内容!我无法使用您的代码结构如下...
您的代码:@wcyankees424
snapshot = await Firestore.instance
.collection('//Collection name')
.where('index', isGreaterThanOrEqualTo: 0)
.orderBy('index')
.limit(1)
.getDocuments();
我的代码:
body: StreamBuilder(
stream: qs.collection('collection').limit(1).snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
const Text('Loading');
} else {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
List<DocumentSnapshot> listedQS =
snapshot.data.documents; //listed documents
var random = new Random(); //dart math
for (var i = listedQS.length - 1; i > 0; i--) {
var n = random.nextInt(i + 1);
var temp = listedQS[i];
listedQS[i] = listedQS[n];
listedQS[n] = temp;
}
DocumentSnapshot mypost = listedQS[0];
return Stack(
children: <Widget>[
Container(
width: MediaQuery.of(context).size.width,
height: 350,
child: Padding(
padding: EdgeInsets.only(top: 8.0, bottom: 8.0),
child: Material(
color: Colors.white,
elevation: 14.0,
shadowColor: Color(0x882196F3),
child: Center(
child: Padding(
padding: EdgeInsets.all(8.0),
child: Column(
children: <Widget>[
Container(
width:
MediaQuery.of(context).size.width,
height: 200,
child: Image.network(
'${mypost['image']}',
fit: BoxFit.fill),
),
SizedBox(height: 10.0),
Text(
'${mypost['title']}',
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold),
),
SizedBox(height: 10.0),
Text(
'${mypost['subtitle']}',
style: TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.bold,
color: Colors.blueGrey),
),
],
),
),
),
),
),
),
【讨论】:
Future<void> addEntry(Brew newBrew) async {
//value you want saved are stored in newBrew and passed in
Map<String, Object> entryData = {
'name': newBrew.name,
'strength': newBrew.strength,
'sugars': newBrew.sugars,
'index': newBrew.index,
};
await Firestore.instance.collection('//collection name').add(entryData);
}
Future<Brew> getEntries(Brew newBrew) async {
QuerySnapshot snapshot = await Firestore.instance
.collection('//Collection name')
.where('index', isGreaterThanOrEqualTo: Random().nextInt('//this number should be higher than the number of documents'))
.orderBy('index')
.limit(1)
.getDocuments();
if (snapshot.documents.isNotEmpty) {
Map<String, dynamic> documentData = snapshot.documents[0].data;
return Brew(
strength: documentData['strngth'],
sugars: documentData['sugars'],
name: documentData['name'],
index: documentData['index'],
);
} else {
snapshot = await Firestore.instance
.collection('//Collection name')
.where('index', isGreaterThanOrEqualTo: 0)
.orderBy('index')
.limit(1)
.getDocuments();
Map<String, dynamic> documentData = snapshot.documents[0].data;
return Brew(
strength: documentData['strngth'],
sugars: documentData['sugars'],
name: documentData['name'],
index: documentData['index'],
);
}
}
class Brew {
final String name;
final String sugars;
final int strength;
final int index;
Brew({
this.name,
this.sugars,
this.strength,
this.index,
});
}
您将为每个调用的索引创建一个字段,该索引将从 0 开始,为您数据库中的每个条目递增 1。 This might help you
【讨论】:
Future.delayed(Duration(minutes: 5), () {
Timer.periodic(Duration(minutes: 5), (Timer t) {
setState(() {});
});
});
好的,把它和你一起放在有状态的小部件中 StreamBuilder 这在我的模拟器上工作。让我知道它是否适合你。
【讨论】:
Future.delayed
我的代码如下所示,但它不适用于您的代码。@wcyankees424
body: StreamBuilder(
stream: qs.collection('collection').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
const Text('Loading');
return Center(
child: CircularProgressIndicator(),
);
} else {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
List<DocumentSnapshot> listedQS = snapshot.data.documents;
var random = new Random();
for (var i = listedQS.length - 1; i > 0; i--) {
var n = random.nextInt(i + 1);
var temp = listedQS[i];
listedQS[i] = listedQS[n];
listedQS[n] = temp;
}
DocumentSnapshot mypost = listedQS[0];
【讨论】: