代码之家  ›  专栏  ›  技术社区  ›  Abhishek Mehandiratta

cloudfirestoreflatter不能在文档上设置数据

  •  0
  • Abhishek Mehandiratta  · 技术社区  · 6 年前

    我正在尝试制作一个flutter应用程序,收集一些学生数据并将其存储到firestore。我想在名为users的集合中添加有关用户的文档,并在具有自定义id(比如uid)的文档中添加。

    我面临的问题是,我无法在这样一个文档上设置数据,因为该文档和集合都不存在。现在,这实际上并不是问题的原因,因为它在使用CloudFireStore的JavaScript库时工作。

    我的依赖项:

    dependencies:
      flutter:
        sdk: flutter
      google_sign_in: ^4.0.1+1
      scoped_model: ^1.0.1
      http: ^0.12.0+1
      shared_preferences: ^0.4.2
      rxdart: ^0.20.0
      file_picker: ^1.2.0
      flutter_pdf_viewer: ^0.2.0
      firebase_auth: ^0.8.1+4
      firebase_core: ^0.3.1+1
      firebase_messaging: ^4.0.0+1
      firebase_storage: ^2.1.0+1
      cloud_firestore: ^0.9.5+2
    

    迄今为止的代码:

    Future<bool> storeStudentData(Map<String, Object> data) async {
      String uid = authenticatedUser.id;
    
      DocumentReference docRef = db.collection('users').document(uid);
    
      try {
        await docRef.setData(data);
        print('Done setting data');
        return true;
      } catch (err) {
        print('EERRRR setting data');
        return false;
      }
    }
    

    我的firestore规则:

    service cloud.firestore {
      match /databases/{database}/documents {
      match /{document=**} {
        allow read, write: if request.auth != null;
        }
      }
    }
    

    [ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(40)] 
    java.lang.NoSuchMethodError: No virtual method 
    set(Ljava/util/Map;)Lcom/google/android/gms/tasks/Task; in class 
    Lcom/google/firebase/firestore/DocumentReference; or its super classes 
    (declaration of 'com.google.firebase.firestore.DocumentReference' appears in 
    /data/app/com.example.rla_official-1/base.apk:classes2.dex)
    E/flutter (24452):      at 
    io.flutter.plugins.firebase.cloudfirestore.
    CloudFirestorePlugin.onMethodCall(CloudFirestorePlugin.java:523)
    E/flutter (24452):      at 
    io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler
    .onMessage(MethodChannel.java:201)
    E/flutter (24452):      at 
    io.flutter.view.FlutterNativeView$PlatformMessageHandlerImpl
    .handleMessageFromDart(FlutterNativeView.java:188)
    E/flutter (24452):      at io.flutter.embedding.engine.FlutterJNI.
    handlePlatformMessage(FlutterJNI.java:202)
    E/flutter (24452):      at android.os.MessageQueue.nativePollOnce(Native 
    Method)
    E/flutter (24452):      at 
    android.os.MessageQueue.next(MessageQueue.java:328)
    E/flutter (24452):      at android.os.Looper.loop(Looper.java:148)
    E/flutter (24452):      at 
    android.app.ActivityThread.main(ActivityThread.java:6339)
    E/flutter (24452):      at java.lang.reflect.Method.invoke(Native Method)
    E/flutter (24452):      at 
    com.android.internal.os.
    ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084)
    E/flutter (24452):      at 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945)
    E/flutter (24452):
    F/flutter (24452): 
    [FATAL:flutter/shell/platform/android/platform_view_android_jni.cc(77)] 
    Check failed: CheckException(env).
    F/libc    (24452): Fatal signal 6 (SIGABRT), code -6 in tid 24452 
    (le.rla_official)
    Lost connection to device.
    

    另外,集合中没有用户,因此在运行函数时,集合中不存在文档。

    我在其他一些android(java)项目中进行了尝试,效果很好。

    0 回复  |  直到 6 年前