我正在使用moor_flutter包处理 sqlite 数据库。我一直在尝试将limit
方法应用于某个查询,但它不起作用。在limit
方法内部,我正在解析int _limit
参数值以及可选offset: int _offset
参数值。
我没有收到任何错误,我不确定为什么这不起作用。请参阅下面的代码。
Stream<List<PersonWithProducts>> watchAllPersons(int _limit, int _offset) {
return (select(persons)
..orderBy(
[
(t) =>
OrderingTerm(expression: t.created, mode: OrderingMode.desc),
(t) => OrderingTerm(expression: t.name),
],
)..limit(_limit, offset: _offset))
.join(
[
leftOuterJoin(products, products.guest_person_id.equalsExp(persons.id)),
],
)
.watch()
.map((rows) => rows.map(
(row) {
return PersonWithProuducts(
person: row.readTable(persons),
product: row.readTable(products),
);
},
).toList());
}
注意表中有多个20
记录。当我调用上面的函数时,从数据库表中获取所有数据而不是指定的限制,就像该limit()
方法被忽略了一样。
请参见下面的代码,这是我调用上述函数的地方
int limit = 5;
int offset = 0;
return StreamBuilder(
stream: personDao.watchAllPersons(limit, offset),
builder: (context, AsyncSnapshot<List<PersonWithProducts>> snapshot) {
final persons = snapshot.data ?? List();
// print('snapshot data: ${snapshot.data}');
if (snapshot.hasData) {
return ListView.builder(
itemCount: persons.length,
itemBuilder: (_, index) {
final personInfo = persons[index];
return _buildListItem(
personInfo, personDao);
},
);
} else {
return Center(
child: AwesomeLoader(
loaderType: AwesomeLoader.AwesomeLoader4,
color: Colors.blue,
),
);
}
},
);
我想要的是watchAllPersons
根据指定获取数据的功能limit
。我想让这个limit
方法奏效。谢谢你,太爱了。