Flutter Firestore分页(添加/删除项目)



我正在努力完成这项工作,两天后我决定向你们寻求帮助。我使用Mobx作为状态管理,问题与向列表添加/从列表中删除项目有关,例如,如果我根据限制检索两个查询,每个查询5个项目,然后从第一个查询中删除一个项目,则第二个查询中的第一个项目重复,如果我添加新项目,则隐藏第二个询问中的第一项。我还为ListView.builder设置了一个scrollListener,以获取列表的底部并调用更多项。

提前感谢

@override
Stream<QuerySnapshot> teste(DocumentSnapshot lastDoc) {
if (lastDoc == null) {
return firestore.collection('teste')
.orderBy('name')
.limit(5)
.snapshots();
} else {
return firestore.collection('teste')
.orderBy('name')
.limit(5)
.startAfterDocument(lastDoc)
.snapshots();
}
}
@observable
ObservableList<List<TesteModel>> allPagedResults = ObservableList<List<TesteModel>>();
@observable
ObservableList<TesteModel> listTeste = ObservableList<TesteModel>();
@observable
DocumentSnapshot lastDoc;
@observable
bool hasMoreItem;
@action
void teste() {
var _currentRequestIndex = allPagedResults.length;

primaryRepository.teste(lastDoc).listen((query) {
if (query.docs.isNotEmpty) {
var _query = query.docs.map((doc) => TesteModel.fromFirestore(doc))
.toList();
var _pageExists = _currentRequestIndex < allPagedResults.length;
if (_pageExists) allPagedResults[_currentRequestIndex] = _query;
else allPagedResults.add(_query);
listTeste = allPagedResults.fold<List<TesteModel>>(<TesteModel>[],
(initialValue, pageItems) => initialValue..addAll(pageItems)).asObservable();
if (_currentRequestIndex == allPagedResults.length - 1) lastDoc = query.docs.last;

hasMoreItem = _query.length == 5;
}
});
}

这个问题运气好吗?

对于添加新项目和拥有多个页面,您可以这样做:

if (allPagedResults.contains(allPagedResults[0].last) == false) {
allPagedResults.last.add(allPagedResults[0].last);
allPagedResults.last.remove(allPagedResults[0].first);
}

相关内容

最新更新