在颤振中使用 orderBy() 时,firebase firestore 没有任何值
Posted
技术标签:
【中文标题】在颤振中使用 orderBy() 时,firebase firestore 没有任何值【英文标题】:no value from firebase firestore when using orderBy() in flutter 【发布时间】:2021-08-01 00:42:44 【问题描述】:我正在尝试在 android studio 中使用 dart-flutter 构建一个群聊应用。一切都很顺利,直到我需要按发送时间的顺序显示消息。为此,我在firebase中创建了一个字段“时间戳”,并且我还使用“FieldValue.serverTimestamp()”传递了时间戳,但是当我尝试通过使用orderBy()来使用“时间戳”时......我没有得到消息显示,而是告诉没有值(null),但是当我尝试在不使用 orderBy() 的情况下访问消息时,它工作正常
看看我将“FieldValue.serverTimestamp()”传递给“timestamp”的小部件:
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
leading: null,
actions: <Widget>[
IconButton(
icon: Icon(Icons.close),
onPressed: ()
_auth.signOut();
Navigator.pushNamed(context, LoginScreen.id);
//Implement logout functionality
),
],
title: Text('⚡️Chat'),
backgroundColor: Colors.lightBlueAccent,
),
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
// ignore: missing_return
messageStream(firestore: _firestore),
Container(
decoration: kMessageContainerDecoration,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: TextField(
controller: messageTextController,
style: TextStyle(color: Colors.black),
onChanged: (value)
messageText = value;
//Do something with the user input.
,
decoration: kMessageTextFieldDecoration,
),
),
TextButton(
onPressed: ()
messageTextController.clear();
_firestore.collection('messages').add(
'text': messageText, 'sender': loggedIn.email,'timestamp':FieldValue.serverTimestamp(),
);
,
child: Text(
'Send',
style: kSendButtonTextStyle,
),
),
],
),
),
],
),
),
);
还要检查我尝试使用 orderBy() 的小部件
class messageStream extends StatelessWidget
messageStream(
@required this.firestore,
) ;
final FirebaseFirestore firestore;
@override
Widget build(BuildContext context)
return StreamBuilder<QuerySnapshot>(
stream: firestore.collectionGroup('messages').orderBy('timestamp', descending: true).snapshots(),
// ignore: missing_return
builder: (context, snapshot)
final messages = snapshot.data.docs;
List<messageBubble> messageBubbles = [];
for (var message in messages)
final messageText = message.data()['text'];
final messageSender = message.data()['sender'];
if(_auth.currentUser.email == messageSender)
final meassageBubble = messageBubble(text: messageText, sender: messageSender , crossAxisAlignment: CrossAxisAlignment.end,color: Colors.lightBlueAccent,textColor: Colors.white , topLeft: Radius.circular(30),topRight: Radius.circular(0),);
messageBubbles.add(meassageBubble);
else
final meassageBubble = messageBubble(text: messageText, sender: messageSender , crossAxisAlignment: CrossAxisAlignment.start,color: Colors.white,textColor: Colors.black , topLeft: Radius.circular(0),topRight: Radius.circular(30));
messageBubbles.add(meassageBubble);
return Expanded(
child: SingleChildScrollView(
reverse: true ,
padding: EdgeInsets.symmetric(vertical: 20 ,horizontal: 15),
child: Column(children: messageBubbles)
),
);
);
最后我还附上了聊天屏幕(模拟器)图像(截图),它告诉我没有价值
如果您有任何问题或需要有关代码的更多详细信息,可以问我
【问题讨论】:
你必须在firestore中写一个索引,有时会在控制台中显示为链接 【参考方案1】:您必须在 firebase 控制台中创建索引,flutter 会在您的日志中提供链接:
然后选择创建索引
【讨论】:
但它需要两个字段,我只需要访问“时间戳”字段...我在另一个字段的帮助下创建了索引,但同样的错误即将到来(文档没有价值) .. 它将提供两个链接跟随两者并点击创建索引 链接在哪里? 在你的颤动日志中它会生成一个链接,看看我的答案以上是关于在颤振中使用 orderBy() 时,firebase firestore 没有任何值的主要内容,如果未能解决你的问题,请参考以下文章
使用颤振(Windows)应用程序进行firebase匿名登录时出现MissingPluginException异常