我正在尝试从数据库中检索数据,并在某个“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'] ?? '',
);
您应该像这样更新 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
}
}