type 'RxList<Map<String, String>>' 不是'function result' 的 'RxList<Faq>' 类型的子类型

type 'RxList<Map<String, String>>' is not a subtype of type 'RxList<Faq>' of 'function result'

提问人:Rafo 提问时间:11/17/2023 最后编辑:Frank van PuffelenRafo 更新时间:11/17/2023 访问量:45

问:

我想从firestore获取数据,但出现此错误:

type 'RxList<Map<String, String>>' 不是 'function result' 的 'RxList' 类型的子类型

我试图解决,但我一无所获 因此,请使用 GetX 作为我的管理状态 这是我的控制器代码

import 'package:get/get.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class Faqs {
  final String quetions;
  final String answers;

  Faqs({required this.quetions, required this.answers});
}

class FaqController extends GetxController {
  var faqList = <Faqs>[].obs;
  FirebaseFirestore firestore = FirebaseFirestore.instance;

  @override
  void onInit() {
    super.onInit();
    fetchFaqList();
  }

  Future<void> fetchFaqList() async {
    CollectionReference faqs = firestore.collection('faqs');
    QuerySnapshot querySnapshot = await faqs.get();

    List<Faqs> fetchedFaqList = querySnapshot.docs.map((doc) {
      Map<String, dynamic> data = doc.data()! as Map<String, dynamic>;
      return Faqs(
        quetions: data['quetions'],
        answers: data['answer'],
      );
    }).toList();

    faqList.assignAll(fetchedFaqList);
  }
}

Flutter Firebase 飞镖 google-cloud-firestore flutter-getx

评论


答:

0赞 Dhanusha Dilshan 11/17/2023 #1

您的 Faqs 类定义了两个字段:和 .但是,您遇到的错误表明从 Firestore 获取的类型与您的 Faqs 类预期的类型不匹配。questionsanswers

将类想象成一个蓝图,用于定义预期接收的数据的结构。在您的例子中,类需要 和 ,两者都是字符串。FaqsFaqsquestionsanswers

例如,如果 Firestore 包含字段名称为字段名称(问题拼写错误)和答案的数据,则需要将这些数据与类的结构保持一致。确保 Firestore 中的字段名称与您尝试在 Faqs 类中使用的字段名称匹配。quetionsFaqs

所以解决这个问题,

1.检查 Firestore 数据:确保 Firestore 中的字段名称与您在 Faqs 类(问题和答案)中定义的结构匹配。

2.更新数据映射:更正方法中的映射,以匹配 Firestore 中的实际字段名称。fetchFaqList()

让我们看看下面更新的代码段,

class Faqs {
  final String questions;
  final String answers;

  Faqs({required this.questions, required this.answers});
}

然后 yu 应该更新方法,参见下面的代码,fetchFaqList()

Future<void> fetchFaqList() async {
  CollectionReference faqs = firestore.collection('faqs');
  QuerySnapshot querySnapshot = await faqs.get();

  List<Faqs> fetchedFaqList = querySnapshot.docs.map((doc) {
    Map<String, dynamic> data = doc.data()! as Map<String, dynamic>;
    return Faqs(
      questions: data['quetions'], // Correct to 'questions'
      answers: data['answer'],     // Correct to 'answers'
    );
  }).toList();

  faqList.assignAll(fetchedFaqList);
}

确保方法内部映射中的字段名称(问题到问题和答案到答案)与 Firestore 数据库中的实际字段名称一致。fetchFaqList()