如何解决Flutter GetX - 使用 bindStream 的 Firebase 分页
我不确定我哪里出错了。
我正在尝试使用 GetX bindStream 从 firebase 流式传输项目,这是我的代码。我能够获得第一批 (10) 项,但无法弄清楚如何将新列表附加到现有流中。
listenToItems() 在控制器初始化时首先被调用,然后从屏幕调用以进行分页,这就是我期望新列表附加到现有 _streamItems 的时候。
class HomeController extends GetxController {
static HomeController get to => Get.find();
@override
void onInit() {
_streamItems.bindStream(listenToItems());
super.onInit();
}
/// Obs
Rxn<List<ItemModel>> _streamItems = Rxn<List<ItemModel>>();
/// getters
List<ItemModel> get streamedItemList => _streamItems.value;
bool _initialLoad = true;
bool _isFinished = false;
Stream<List<ItemModel>> listenToItems() {
Stream<QuerySnapshot> _newStream;
if (_initialLoad == true) {
_initialLoad = false;
_newStream = kFireBaseInstance
.collection(APIPath.itemPath())
.where('status',isEqualTo: 'active')
.orderBy('timeStampInMilli',descending: true)
.limit(10)
.snapshots();
} else {
if (_isFinished != true) {
print('streamItems != null');
_newStream = kFireBaseInstance
.collection(APIPath.itemPath())
.where('status',isEqualTo: 'active')
.orderBy('timeStampInMilli',descending: true)
.startAfterDocument(
streamedItemList[streamedItemList.length - 1].lastDocument)
.limit(10)
.snapshots();
}
if (_newStream == null) {
_isFinished = true;
}
}
return _newStream.map((list) => list.docs
.map(
(doc) => ItemModel.fromSnapshot(doc),)
.toList());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。