如何在 Flutter 中从 Future<List> 获取值
How to get values from Future<List> in Flutter
我想从 sqflite 数据库中获取值到 flutter 中的列表。
这是我的模型 class
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,
};
}
这是用于插入和检索数据的数据库助手class。
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 tasks()) 时,它在控制台中显示 [[=19= 的实例],'Task' 的实例]。这是一个错误吗?我想知道如何使用 DatabaseHelper class.
中的 task() 函数从数据库中获取值
使用 future 构建器,它需要 future 并且会在 future 的对象发生变化时构建。
When I use print(await tasks()) it shows [Instance of 'Task', Instance
of 'Task'] in console. is it a bug?
发生这种情况是因为您没有覆盖 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!
}
I want to know how to get values form database using task()
Flutter 中等待 Future<T>
的最常见方法是使用 FutureBuilder<T>
小部件。这非常方便,因为它可以显示一个进度指示器(让用户知道后台正在发生某些事情),稍后将由实际数据替换
我想从 sqflite 数据库中获取值到 flutter 中的列表。 这是我的模型 class
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,
};
}
这是用于插入和检索数据的数据库助手class。
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 tasks()) 时,它在控制台中显示 [[=19= 的实例],'Task' 的实例]。这是一个错误吗?我想知道如何使用 DatabaseHelper class.
中的 task() 函数从数据库中获取值使用 future 构建器,它需要 future 并且会在 future 的对象发生变化时构建。
When I use print(await tasks()) it shows [Instance of 'Task', Instance of 'Task'] in console. is it a bug?
发生这种情况是因为您没有覆盖 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!
}
I want to know how to get values form database using task()
Flutter 中等待 Future<T>
的最常见方法是使用 FutureBuilder<T>
小部件。这非常方便,因为它可以显示一个进度指示器(让用户知道后台正在发生某些事情),稍后将由实际数据替换