Flutter——数据库Drift开发详细教程(二)
目录
- 1.核心API
- 1.1查询数据列表分页
- 1.2 列表排序
- 1.3推迟获取与观察
1.核心API
1.1查询数据列表分页
限制返回的结果数量limit,从某一位置开始查询offset
///limit=10, offset=10
Future<List<TodoItem>> limitTodos(int limit, {int? offset}) {return (select(todoItems)..limit(limit, offset: offset)).get();
}
1.2 列表排序
使用该orderBy方法。它需要一个函数列表,用于从表中提取各个排序项。您可以使用任何表达式作为排序项。
///根据对象字段title,字母排序Future<List<TodoItem>> sortEntriesAlphabetically() {return (select(todoItems)..orderBy([// (t) => OrderingTerm(expression: t.title, mode: OrderingMode.desc),(t) => OrderingTerm(expression: t.title),])).get();}///下图是结果,左1 mode: OrderingMode.desc 反向排序///左2 默认顺序排序
1.3推迟获取与观察
如果您希望使查询可作为Future或 来使用,则可以使用其中一个抽象基类Stream来优化返回类型;Selectable ,返回数据对象或者流类型 自行选择
// Exposes `get` and `watch`
MultiSelectable<TodoItem> pageOfTodos(int page, {int pageSize = 10}) {return select(todoItems)..limit(pageSize, offset: page);
}// Exposes `getSingle` and `watchSingle`
SingleSelectable<TodoItem> selectableEntryById(int id) {return select(todoItems)..where((t) => t.id.equals(id));
}// Exposes `getSingleOrNull` and `watchSingleOrNull`
SingleOrNullSelectable<TodoItem> entryFromExternalLink(int id) {return select(todoItems)..where((t) => t.id.equals(id));
}