Moor_fuster limit()方法不起作用/正在忽略它



我正在使用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"变量提供下划线?这意味着要将变量设为私有变量。

虽然已经有一段时间了,但我忘记提供解决方案,这是我在这里发布的包中的一个错误。

最新更新