【发布时间】:2021-08-26 14:12:09
【问题描述】:
我想要什么
根据服务器时间戳排序 ListView
我的代码
添加到 Firestore 集合:
onPressed: () {
FirebaseFirestore.instance.collection('things').add(
{
// some code
'timestamp': FieldValue.serverTimestamp(),
},
);
从 firestore 获取数据并根据服务器时间戳对其进行排序
return StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection('things').orderBy('timestamp').snapshots(),
预期行为
列表视图根据服务器时间戳排序显示
我得到了什么
这个错误:
需要一个“字符串”类型的值,但得到一个“时间戳”类型的值
我的尝试
我尝试在将数据发送到 Firestore 时添加toString():'timestamp': FieldValue.serverTimestamp().toString(),但后来 Firestore 上的数据没有存储时间戳,而是存储了 FieldValue(Instance of 'FieldValueWeb')。
我知道当我从 firestore 获取数据时,我可能必须将它们转换为 String,但我不知道该怎么做。我尝试在将数据输入流时添加toString():
stream: FirebaseFirestore.instance.collection('things').orderBy('timestamp').toString().snapshots()
但随后它显示以下错误并且不会编译。
没有为“String”类型定义方法“snapshots”。
官方文档也没有说要转成String。
如果有人知道如何解决这个问题,请帮助我,我真的被困在这里了。
完整的 StreamBuilder 和 ListView 代码
return StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('things').orderBy('timestamp').snapshots(),
builder: (context, snapshot) {
List<Text> putDataHere = [];
final things = snapshot.data.docs;
for (var thing in things) {
final myData = Map<String, String>.from(thing.data());
final myThing = myData['dataTitle'];
final thingWidget = Text(myThing);
putDataHere.add(thingWidget);
}
return Expanded(
child: ListView(
children: putDataHere,
),
);
},
);
【问题讨论】:
-
你想要实现的是将所有元素按时间顺序排列对吧?
-
您可以发布您的
ListView代码吗? -
@VictorEronmosele 我编辑了我的问题以包含 ListView
标签: firebase flutter dart google-cloud-firestore flutter-streambuilder