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