1

我正在使用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方法奏效。谢谢你,太爱了。

4

2 回答 2

0

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

于 2021-02-08T11:38:57.117 回答
0

为什么要为“限制”变量提供下划线,这意味着您将变量设为私有。

于 2020-03-04T08:46:43.670 回答