如何解决从Flutter中的快照创建自己的流列表
背景: 我正在开发一个Flutter应用,该应用可以跟踪房租付款。我得到了一个列表,列出了租户尚未支付租金的月份(dueMonths),代码如下。
问题: 我受困的地方是,快照{}之后快照中的付款清单为空,但值在{}内部。如果Payments集合中有任何更改,则列表不会更新。
我想实现什么? 当用户付款时,我希望快照更新付款清单,然后更新notifyList(必须从该清单中删除月份)。我无法完成这项工作,并且浪费了过去两天的时间。请帮助我。
Stream<List> getNoPaymentList() {
StreamController<List> controller = new StreamController<List>(); //Add .broadcast here
// list of units rented by the tenant. He has rented 4A and G3
List units = [
{'unitId': '4hFIcmbKhJgyrppsTBOc','unitName': '4A','propertyId': 'YF5k6D2abFsczVxSmLZu','rent': 6000},{'unitId': 'zDyCfrFYnsHIE2nAuP7B','unitName': 'G3','propertyId': 'IDroypXJyzMIb7a6jUqH','rent': 6000}
];
// checking the payments for the past three months
List dueMonths = ['2020-07','2020-06','2020-05'];
List payments = [];
List notifyList = [];
//document id of the user
String currentUid = 'kEamSzzDt4Yb9PgPGCg8AxDPrrp2';
//get list of payments done by the tenant for the due months
Stream<QuerySnapshot> paymentSS = Firestore.instance.collection('payment')
.where('paid_for',whereIn: dueMonths)
.where('tenant_id',isEqualTo: currentUid)
.snapshots();
paymentSS.forEach((snapshot) {
snapshot.documents.forEach((doc) { //when there is a change in docs,this is working and payments list is added. notifyList is not updated.
payments.add(
{'unitId': doc.data['unit_id'],'paidFor': doc.data['paid_for']}
);
});
});
// payments list is EMPTY outside the loop
units.forEach((unit) {
dueMonths.forEach((month) {
bool paid = false;
payments.forEach((pay) {print('no pay');
if(unit['unitId'] == pay['unitId'] && month == pay['paidFor']){
paid = true;
}
});
if(paid == false){
notifyList.add({
'unitId' : unit['unitId'],'unitName' : unit['unitName'],'propertyId' : unit['propertyId'],'rent' : unit['rent'],'notPaidFor' : month
});
}
});
});
controller.sink.add(notifyList);
return controller.stream;
}
我正在使用以下代码收听流
StreamBuilder(
stream: NotificationService().getNoPaymentList(),builder: (context,snapshot) {
if(!snapshot.hasData){
return Text('Loading...');
}
var data = snapshot.data;
//print(data);
//print('status is'+ snapshot.connectionState.toString());
return Text('Stream Here');
},),
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。