Метод limit () Moor_flutter не работает / игнорируется - PullRequest
0 голосов
/ 03 марта 2020

Я работаю с базой данных sqlite, используя для этого пакет moor_flutter . Я пытался применить метод 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 работать. Спасибо вам большое, Любовь.

1 Ответ

0 голосов
/ 04 марта 2020

Почему вы указываете на подчеркивание переменной 'limit', это означает, что вы делаете переменную приватной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...