我想从sqflite数据库中获取价值,快速获得清单。 这是我的模特班
class Task {
final int id;
final String title;
final String description;
final String dateTime;
Task({this.id, this.title, this.description, this.dateTime});
Map<String, dynamic> toMap() {
return {
'id':id,
'title': title,
'description': description,
'dateTime': dateTime,
};
}
这是用于插入和检索数据的databaseHelper类。
class DatabaseHelper {
DatabaseHelper._();
static final DatabaseHelper db = DatabaseHelper._();
Database _database;
Future<Database> get database async {
if (_database != null) return _database;
_database = await _createDatabase();
return _database;
}
Future<Database> _createDatabase() async {
return await openDatabase(join(await getDatabasesPath(), 'task.db'),
onCreate: (db, version) {
return db.execute(
"CREATE TABLE tasks(id INTEGER PRIMARY KEY AUTO_INCREMENT , title TEXT, description TEXT, dateTime TEXT)",
);
}, version: 1);
}
Future<List<Task>> tasks() async {
final Database db = await database;
final maps = await db.query('tasks');
return List.generate(maps.length, (i) {
return Task(
id: maps[i]['id'],
title: maps[i]['title'],
description: maps[i]['description'],
dateTime: maps[i]['dateTime']
);
});
}
Future<void> insertTask(Task task) async {
final db = await database;
await db.insert(
'tasks',
task.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
}
当我使用print(await task())时,它在控制台中显示[Task的实例,Task的实例]。这是一个错误吗?我想知道如何使用DatabaseHelper类中的task()函数从数据库获取值。
答案 0 :(得分:1)
使用将来的构建器,它需要将来并且将在将来的对象发生更改时进行构建。
答案 1 :(得分:1)
当我使用print(await task())时,它显示['Task'的实例,实例 控制台中的“任务”]。是虫子吗?
发生这种情况是因为您没有覆盖toString()
。如果没有toString()
,您将只获得默认的字符串转换“ XXX的实例”:
class Example {}
void main() async {
print(Example()); // Instance of 'Example'
}
通过覆盖toString()
,您可以自定义输出:
class Example {
@override
String toString() => "My custom Example!";
}
void main() async {
print(Task()); // My custom Example!
}
我想知道如何使用task()从数据库获取值
在Flutter中等待Future<T>
的最常见方法是使用FutureBuilder<T>
小部件。这非常方便,因为它可以显示进度指示器(让用户知道后台发生了什么事情),稍后将由实际数据代替