类型“Future<List<SurveyData>>”不是类型转换 (DART) 中类型“List<SurveyData>”的子类型

问题描述 投票:0回答:1

我正在尝试从数据库中检索数据,并在某个“TodoDB”类中创建了这两个方法:

  Future<List<SurveyData>> fetchAll() async {
    final database = await DatabaseService().database;
    final survey = await database.rawQuery('''SELECT * from $tableName''');
    return survey.map((survey) => SurveyData.fromSqfliteDatabase(survey)).toList();
  }

  Future<SurveyData> fetchById(int id) async {
    final database = await DatabaseService().database;
    final survey = await database.rawQuery('''SELECT * from $tableName WHERE id = ?''', [id]);
    return SurveyData.fromSqfliteDatabase(survey.first);
  }

稍后,我调用另一个类中的上层方法:

class SurveyUtilities {

  final todoDB = TodoDB();

  /// function that retrieves and parses all surveys data from database *
  Future<List<SurveyData>> getSurveys() async {
    return todoDB.fetchAll();
  }

  /// function that retrieves and parses a certain survey data from database *
  Future<SurveyData> getSurveyData(int id) async {
    return todoDB.fetchById(id);
  }

}

我在网上尝试了很多解决方案,但总是收到此错误消息: “类型‘Future’不是类型转换中‘List’类型的子类型”。

我也尝试过像这样编写 getSurveys() 方法:

  Future<List<SurveyData>> getSurveys() async {
    final allSurveys = await todoDB.fetchAll();
    return allSurveys;
  }

但结果总是一样的。

我之前没有使用过 dart、数据库或 sql,所以如果有一些明显的错误,我很抱歉(我还在学习!)

对于上下文,我的 SurveyDaya 的格式如下:

  SurveyData({required this.id, required this.title, required this.description, required this.questions});

  factory SurveyData.fromSqfliteDatabase(Map<String, dynamic> map) => SurveyData(
    id: map['id']?.toInt() ?? 0,
    title: map['title'] ?? '',
    description: map['description'] ?? '',
    questions: map['questions'] ?? '',
  );
database flutter list dart casting
1个回答
0
投票

您应该像这样更新 SurveyUtilities 类,它将解决问题

class SurveyUtilities {

  final todoDB = TodoDB();

  /// function that retrieves and parses all surveys data from database *
  Future<List<SurveyData>> getSurveys() async {
    return await todoDB.fetchAll(); //you must have to use await before calling method
  }

  /// function that retrieves and parses a certain survey data from database *
  Future<SurveyData> getSurveyData(int id) async {
    return await todoDB.fetchById(id); //you must have to use await before calling method
  }

}
© www.soinside.com 2019 - 2024. All rights reserved.