我正在使用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
方法起作用。谢谢你,非常感谢。
为什么要在'limit'变量下划线,这意味着您正在将该变量设为私有。