创建聊天室应用最终以“无效的文档参考”

我正在制作一个实时聊天应用程序。以下功能是在数据库中创建一个新的聊天室。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

HakkıAkut

几个月前我做了类似的项目,这就是我使用的方式。也许会帮助你

@override
  createChatRoom(String chatroomId, chatroomMap) {
    FirebaseFirestore.instance
        .collection("ChatRoom")
        .doc(chatroomId)
        .set(chatroomMap)
        .catchError((e) {
      print(e.toString());
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章