当前位置: 首页 > 知识库问答 >
问题:

Cloud fiRecovery Flutter无法在文档上设置数据

刘泰
2023-03-14

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

我面临的问题是,我无法在这样一个既不存在特定文档也不存在集合的文档上设置数据。现在,这实际上不是问题的原因,因为它在使用云firestore的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;
  }
}

我的火力规则:

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.

请注意,我可以从firestore读取数据。这里没有错误。因此,安全规则也不是问题。此外,在运行该函数时,集合用户,因此其中不存在文档。

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

我需要有能力为文档定制ID,以便以后高效检索。

共有1个答案

鲁涵意
2023-03-14

代码看起来不错(虽然有点过时),但问题可能是由于使用了过时版本的cloud\u firestore插件造成的。

目前,代码应该类似于

Future<bool> storeStudentData(Map<String, dynamic> data) async {
  String uid = authenticatedUser.id;

  DocumentReference docRef = FirebaseFirestore.instance.collection('users').document(uid);

  try {
    await docRef.set(data);
    debugPrint('Done setting data');
    return true;
  } catch (err) {
    debugPrint('EERRRR setting data');
    return false;
  }
}
 类似资料:
  • 输入示例:12345.1 期望输出总计金额DueTextField: 12,345.10 实际结果 系统出来println(格式化文本):12345.10//OK totalAmountDueTextField。setText(formattedText):12345.1//这就是问题所在。 以及如何将初始值设置为0.00(当前为0.0)?

  • 我正在尝试使用NodeJS v8在Firestore上创建一个引用文档。6.0。像这样 虽然ref是一个文档参考,但它会导致 错误:参数“data”不是有效文档。输入对象深度超过20层或包含一个循环。 有无论如何要做的NodeJS(管理)SDK? 此外,代码中使用的包是 和 输出 完整的错误消息是

  • Mybatis抛出一个错误,该错误表示设置参数有问题。会出什么问题?我测试了SQL查询,它很好。我在用graddle和Spring。 控制器 表

  • 我已经做了很多关于这个主题的研究,但我发现的一切都是每次“使用的函数getOverContent的压模”。我做了这个,但还是不行。 我做了一个程序,合并在一起的PDF的汇编,然后它分页这个新的文件(我希望你可以跟随我写的)。原始PDF是自制的(直接保存在PDF中)或不是(扫描)。这是最后几个有麻烦的地方。分页显示在第一个,但不是在秒(它可能存在,但它应该在图像后面)! 这里是分页的代码,有人知道我

  • 我是一个新的git和GitHub用户。我已经在Windows上使用GitHub一段时间了,但想尝试更多的命令行,同时学习如何在我想要改进的存储库上分叉和提交拉取请求。 我所看到的是,“上游”似乎被定义为不可用,我想了解发生了什么。我想当我想请求将我的更改拉入上游存储库时,这将是一个问题。 我在GitHub上分叉了存储库,然后将其克隆到我的计算机上: git克隆https://github.com/

  • 打印复合图稿 复合图是一种单页图稿,与您在插图窗口中看到效果的一致 — 换言之,就是直观的打印作业。复合图像还可用于校样整体页面设计、验证图像分辨率以及查找照排机上可能发生的问题(如 PostScript 错误)。 1选择 “文件 ”>“打印 ”。 2从 “打印机 ”菜单中选择一种打印机。若要打印到文件而不是打印机,请选择 “Adobe PostScript® 文件 ”或 “Adobe PDF”。