0

Where i am going wrong it shows error whenever i try to read data from my firestore.[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Invalid document reference. Document references must have an even number of segments, but users has 1, null) The code is :

bool hasData = false;
  String number;
  var val;
  final usersRef = Firestore.instance.collection('users');

  @override
  void initState() {
    this.number = '';
    FirebaseAuth.instance.currentUser().then((value) {
      setState(() {
        val = value;
        this.number = value.phoneNumber;
      });
    }).catchError((e) {
      print(e);
    });
    checkData();
    super.initState();
  }

  checkData() async {
    DocumentSnapshot doc = await usersRef.document(this.number).get();
    if (doc.exists) {
      setState(() {
        hasData = true;
      });
    } else {
      setState(() {
        hasData = false;
      });
    }
  }

The error is:

E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166): Failed to handle method call
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166): java.lang.IllegalArgumentException: Invalid document reference. Document references must have an even number of segments, but users has 1
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at com.google.firebase.firestore.DocumentReference.forPath(com.google.firebase:firebase-firestore@@21.3.0:80)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at com.google.firebase.firestore.FirebaseFirestore.document(com.google.firebase:firebase-firestore@@21.3.0:249)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin.getDocumentReference(CloudFirestorePlugin.java:115)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin.onMethodCall(CloudFirestorePlugin.java:890)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:631)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at android.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at android.os.Looper.loop(Looper.java:160)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at android.app.ActivityThread.main(ActivityThread.java:6762)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4166):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
E/flutter ( 4166): **[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Invalid document reference. Document references must have an even number of segments, but users has 1, null)**
E/flutter ( 4166): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter ( 4166): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:18)
E/flutter ( 4166): <asynchronous suspension>
E/flutter ( 4166): #2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:329:12)
E/flutter ( 4166): #3      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:356:48)
E/flutter ( 4166): #4      MethodChannelDocumentReference.get (package:cloud_firestore_platform_interface/src/method_channel/method_channel_document_reference.dart:56:46)
E/flutter ( 4166): #5      DocumentReference.get (package:cloud_firestore/src/document_reference.dart:69:47)
E/flutter ( 4166): #6      _CreateUserState.checkData (package:knowledgehub/createuser.dart:36:65)
E/flutter ( 4166): #7      _CreateUserState.initState (package:knowledgehub/createuser.dart:31:5)
E/flutter ( 4166): #8      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4640:58)
E/flutter ( 4166): #9      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
E/flutter ( 4166): #10     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
E/flutter ( 4166): #11     Element.updateChild (package:flutter/src/widgets/framework.dart:3211:20)
E/flutter ( 4166): #12     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter ( 4166): #13     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
E/flutter ( 4166): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter ( 4166): #15     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2627:33)
E/flutter ( 4166): #16     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:883:20)
E/flutter ( 4166): #17     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:284:5)
E/flutter ( 4166): #18     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1113:15)
E/flutter ( 4166): #19     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1052:9)
E/flutter ( 4166): #20     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:968:5)
E/flutter ( 4166): #21     _rootRun (dart:async/zone.dart:1184:13)
E/flutter ( 4166): #22     _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter ( 4166): #23     _CustomZone.runGuarded (dart:async/zone.dart:979:7)
E/flutter ( 4166): #24     _invoke (dart:ui/hooks.dart:261:10)
E/flutter ( 4166): #25     _drawFrame (dart:ui/hooks.dart:219:3)
E/flutter ( 4166): 
I/flutter ( 4166): +91xxxxxxxxxx
W/IInputConnectionWrapper( 4166): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper( 4166): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper( 4166): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper( 4166): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper( 4166): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper( 4166): getTextAfterCursor on inactive InputConnection
I/flutter ( 4166): Suraj Jha
W/co.knowledgehu( 4166): Accessing hidden field Ljava/nio/Buffer;->address:J (light greylist, reflection)
W/co.knowledgehu( 4166): Accessing hidden field Ljava/net/Socket;->impl:Ljava/net/SocketImpl; (light greylist, reflection)
W/co.knowledgehu( 4166): Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (light greylist, linking)
W/co.knowledgehu( 4166): Accessing hidden method Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V (light greylist, linking)
W/co.knowledgehu( 4166): Accessing hidden field Ljava/io/FileDescriptor;->descriptor:I (light greylist, JNI)
W/co.knowledgehu( 4166): Accessing hidden method Ljava/security/spec/ECParameterSpec;->setCurveName(Ljava/lang/String;)V (light greylist, reflection)
W/co.knowledgehu( 4166): Accessing hidden method Ldalvik/system/BlockGuard;->getThreadPolicy()Ldalvik/system/BlockGuard$Policy; (light greylist, linking)
W/co.knowledgehu( 4166): Accessing hidden method Ldalvik/system/BlockGuard$Policy;->onNetwork()V (light greylist, linking)
I/flutter ( 4166): Instance of 'User'
W/co.knowledgehu( 4166): Accessing hidden method Ldalvik/system/CloseGuard;->close()V (light greylist, linking)
W/co.knowledgehu( 4166): Accessing hidden method Ldalvik/system/CloseGuard;->warnIfOpen()V (light greylist, linking)
Suraj Jha
  • 199
  • 14
  • Does this answer your question? [How to set, get and update data to the cloud firestore in flutter?](https://stackoverflow.com/questions/58077155/how-to-set-get-and-update-data-to-the-cloud-firestore-in-flutter) – Ryosuke May 23 '20 at 04:41
  • That answer didn't help. – Suraj Jha May 24 '20 at 06:05

1 Answers1

0

Your variable number doesn't have any valid value, it's just an empty String.Since you are using .then the checkData() function will be called directly without waiting for the number to be assigned. Instead of using .then you can use await

var result = await FirebaseAuth.instance.currentUser();
number = result.phoneNumber;
checkData();

I hope this helps.

Shubham Gupta
  • 1,917
  • 1
  • 10
  • 16