我正在制作一个实时聊天应用程序。以下功能是在数据库中创建一个新的聊天室。getChatRoomId
基本上为该聊天室创建一个唯一的ID,该IDchat_room_id
在数据库中分配。那chat_room_id
有一个chat_room_id
本身就是和的数组的集合users
。当我调用此函数时发生错误。如下面的方法所示,我正在打印数据。方法调用是perfect(here i am
),看起来chat_room_id
像我期望的那样chatRoomMap
。还有一个。但是,当我尝试打印出信息时,它也会打印出null
。请检查下面的错误部分以查看打印结果。
createChatRoomAndStartConversation() async{
if(username != Constants.signedUserName){
print('here i am');
String chatRoomId = getChatRoomId(username, Constants.signedUserName);
List<String> users = [username, Constants.signedUserName];
Map<String, dynamic> chatRoomMap = {
'users': users,
'chat_room_id':chatRoomId
};
print('chat room id : $chatRoomId');
dynamic result= await _db.createChatRoom(chatRoomId,chatRoomMap);
print(" result is :" +result.toString());
Navigator.push(context, MaterialPageRoute(builder: (context) =>ChatRoom()));
}else{ print('you cannot send message yourself'); }
}
这是创建Firestore集合的数据库方法
createChatRoom(String chatRoomId, chatRoomMap) {
Firestore.instance
.document(chatRoomId)
.setData(chatRoomMap)
.catchError((onError) => print(onError.toString()));
}
错误讯息
I/flutter (22917): here i am
I/flutter (22917): chat room id : ahmet_mehmet
I/flutter (22917): chat room map: {users: [ahmet, mehmet], chat_room_id: ahmet_mehmet}
I/flutter (22917): tapped
I/flutter (22917): result is :null
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): Failed to handle method call
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): java.lang.IllegalArgumentException: Invalid document reference. Document references must have an even number of segments, but ahmet_mehmet has 1
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at com.google.firebase.firestore.DocumentReference.forPath(com.google.firebase:firebase-firestore@@21.3.0:80)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at com.google.firebase.firestore.FirebaseFirestore.document(com.google.firebase:firebase-firestore@@21.3.0:249)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin.getDocumentReference(CloudFirestorePlugin.java:124)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin.onMethodCall(CloudFirestorePlugin.java:877)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at android.os.MessageQueue.next(MessageQueue.java:336)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at android.os.Looper.loop(Looper.java:174)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at android.app.ActivityThread.main(ActivityThread.java:7356)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/MethodChannel#plugins.flutter.io/cloud_firestore(22917): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
I/flutter (22917): PlatformException(error, Invalid document reference. Document references must have an even number of segments, but ahmet_mehmet has 1, null, java.lang.IllegalArgumentException: Invalid document reference. Document references must have an even number of segments, but ahmet_mehmet has 1
I/flutter (22917): at com.google.firebase.firestore.DocumentReference.forPath(com.google.firebase:firebase-firestore@@21.3.0:80)
I/flutter (22917): at com.google.firebase.firestore.FirebaseFirestore.document(com.google.firebase:firebase-firestore@@21.3.0:249)
I/flutter (22917): at io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin.getDocumentReference(CloudFirestorePlugin.java:124)
I/flutter (22917): at io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin.onMethodCall(CloudFirestorePlugin.java:877)
I/flutter (22917): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
I/flutter (22917): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
I/flutter (22917): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:6
几个月前我做了类似的项目,这就是我使用的方式。也许会帮助你
@override
createChatRoom(String chatroomId, chatroomMap) {
FirebaseFirestore.instance
.collection("ChatRoom")
.doc(chatroomId)
.set(chatroomMap)
.catchError((e) {
print(e.toString());
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句