【问题标题】:Flutter place filter based on variable in firestore request基于Firestore请求中的变量颤动放置过滤器
【发布时间】:2020-07-16 17:50:30
【问题描述】:

我正在开发一个应用程序,该应用程序根据注册的用户 ID 从我的 firestore 请求某些元素。

现在我正在尝试构建与此相关的通知程序,但是在将过滤器放入 firestore 请求时它会以某种方式中断

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:tutora/states/question_notifier.dart';
import 'package:tutora/models/answers.dart';
import 'package:firebase_auth/firebase_auth.dart';

Future<String> id() async {
  FirebaseUser user = await FirebaseAuth.instance.currentUser();
  String userID = user.uid.toString();
  return userID;
}

getAnswers(AnswerNotifier answerNotifier) async {
  QuerySnapshot snapshot = await Firestore.instance
      .collection('Questions')
      .where(
        'UserID',
        isEqualTo: await id(),
      )
      .getDocuments();

  List<Answer> _answerList = [];

  snapshot.documents.forEach((document) {
    Answer answer = Answer.fromMap(document.data);
    _answerList.add(answer);
  });
  answerNotifier.answerList = _answerList;
}

在我看来,这应该做的是它获取当前用户 ID,然后基于该用户 ID 仅收集与 UserID 列匹配的问题。

如果我在我的代码中手动输入用户 ID,这非常有效,但是当它从 id() 请求当前用户 ID 时,它没有找到任何匹配的问题。所以我在应用程序中的问题列表和我的 _answerList 都是空的。

此时用户已在调用此 Answernotifier 的应用中登录。

感谢您的帮助,这真的让我很烦恼,现在请退出一段时间。

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore firebase-authentication


    【解决方案1】:

    尝试以下方法:

    getAnswers(AnswerNotifier answerNotifier) async {
      String userId = await id();
      QuerySnapshot snapshot = await Firestore.instance
          .collection('Questions')
          .where('UserID',isEqualTo: userId).getDocuments();
    

    首先获取userId,然后在where() 查询中使用结果。

    【讨论】:

      猜你喜欢
      • 2020-12-05
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多