Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在flatter中使用orderBy()时,firebase firestore中没有值_Android_Firebase_Flutter_Google Cloud Firestore_Firebase Cloud Messaging - Fatal编程技术网

Android 在flatter中使用orderBy()时,firebase firestore中没有值

Android 在flatter中使用orderBy()时,firebase firestore中没有值,android,firebase,flutter,google-cloud-firestore,firebase-cloud-messaging,Android,Firebase,Flutter,Google Cloud Firestore,Firebase Cloud Messaging,我正在尝试在android studio中使用dart Flatter构建一个群组聊天应用程序。在我需要按发送的时间顺序显示消息之前,一切都很顺利。为此,我在firebase中创建了一个字段“timestamp”,并使用“FieldValue.serverTimestamp()”传递时间戳,但当我尝试使用orderBy()使用“timestamp”时。。我没有显示mesages,相反,它告诉我没有值(null),但是当我尝试在不使用orderBy()的情况下访问消息时,它工作正常 看看我将“Fi

我正在尝试在android studio中使用dart Flatter构建一个群组聊天应用程序。在我需要按发送的时间顺序显示消息之前,一切都很顺利。为此,我在firebase中创建了一个字段“timestamp”,并使用“FieldValue.serverTimestamp()”传递时间戳,但当我尝试使用orderBy()使用“timestamp”时。。我没有显示mesages,相反,它告诉我没有值(null),但是当我尝试在不使用orderBy()的情况下访问消息时,它工作正常

看看我将“FieldValue.serverTimestamp()”传递给“timestamp”的小部件:

@覆盖
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
前导:空,
行动:[
图标按钮(
图标:图标(Icons.close),
已按下:(){
_auth.signOut();
pushNamed(上下文,LoginScreen.id);
//实现注销功能
}),
],
标题:文本('⚡️聊天室),,
背景颜色:Colors.lightBlueAccent,
),
正文:安全区(
子:列(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
//忽略:缺少返回
消息流(firestore:_firestore),
容器(
装饰:kMessageContainerDecoration,
孩子:排(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
扩大(
孩子:TextField(
控制器:messageTextController,
样式:TextStyle(颜色:Colors.black),
一旦更改:(值){
messageText=值;
//对用户输入执行一些操作。
},
装饰:KMessageExtField装饰,
),
),
文本按钮(
已按下:(){
messageTextController.clear();
_firestore.collection('messages')。添加(
{'text':messageText,'sender':loggedIn.email,'timestamp':FieldValue.serverTimestamp()},
);
},
子:文本(
“发送”,
样式:ksendButtonExtStyle,
),
),
],
),
),
],
),
),
);
}
}
还要检查我尝试使用orderBy()的小部件

class messageStream扩展了无状态小部件{
消息流({
@需要这个。firestore,
}) ;
最终FirebaseFirestore firestore;
@凌驾
小部件构建(构建上下文){
返回流生成器(
流:firestore.collectionGroup('messages').orderBy('timestamp',降序:true).快照(),
//忽略:缺少返回
生成器:(上下文,快照){
最终消息=snapshot.data.docs;
列表messageBubbles=[];
for(消息中的var消息){
final messageText=message.data()['text'];
final messageSender=message.data()['sender'];
如果(_auth.currentUser.email==messageSender){
final meassageBubble=messageBubble(文本:messageText,发件人:messageSender,crossAxisAlignment:crossAxisAlignment.end,颜色:Colors.lightBlueAccent,文本颜色:Colors.white,左上角:Radius.circular(30),右上角:Radius.circular(0));
messageBubbles.add(meassageBubble);
}
否则{
final meassageBubble=messageBubble(文本:messageText,发件人:messageSender,crossAxisAlignment:crossAxisAlignment.start,颜色:Colors.white,textColor:Colors.black,左上角:半径。圆形(0),右上角:半径。圆形(30));
messageBubbles.add(meassageBubble);
}
}
扩大回报(
子:SingleChildScrollView(
相反:是的,
填充:边缘组。对称(垂直:20,水平:15),
子项:列(子项:messageBubbles)
),
);
});
}
}
最后,我还附加了聊天屏幕(仿真器)图像(屏幕截图),其中显示没有价值


此外,如果您有任何问题或需要有关代码的更多详细信息,可以询问我

您必须在firebase控制台中创建索引,Flatter将在您的日志中提供链接:

然后选择创建索引

您必须在firestore中写入索引,控制台中的链接显示了某些时间,但它需要两个字段,我只需要访问“时间戳”字段。。。我已经在另一个字段的帮助下创建了索引,但同样的错误正在发生(文档没有价值)…它将提供两个链接,然后单击“创建索引”链接在哪里?在您的颤振日志中,它将生成一个链接,请参见我的答案
        @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,
                   ),
                 ),
               ],
             ),
           ),
         ],
       ),
     ),
   );
 }
}
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)
              ),
            );

        });
  }
}