У меня есть список предметов из магазина, и я отображаю их в виде списка, когда пользователь нажимает на элемент, он вызывает диалоговое окно, чтобы показать детали, и все идеально.
У меня есть кнопка удаления в диалоговое окно, при нажатии которого вызывается этот метод:
await Firestore.instance.collection("Accessories").document(orderId).delete()
Объявляю глобальную переменную под названием orders
List<OrdersModel> orders = List<OrdersModel>();
, использую этот метод для инициализации списка
Future<List<OrdersModel>> getOrdersList()async{
if(isActive){
await OrdersApi().getAllOrders(widget.user.uid,'Active').then((v){
setState(() {
orders = v;
});
});
return orders;
}else{
await OrdersApi().getAllOrders(widget.user.uid,'Completed').then((v){
setState(() {
orders = v;
});
});
return orders;
}
}
и отображение списка с помощью построителя потоков, используя это:
getListOfOrders(){
return StreamBuilder<List<OrdersModel>>(
stream: getOrdersList().asStream(),
builder: (context, snapshot) {
if(snapshot.hasData == false ){
return Expanded(
child: ListView.builder(
scrollDirection: Axis.vertical,
itemCount: 10,
itemBuilder: (context,index){
return Shimmer.fromColors(
baseColor: Color(0xFFB5B5B5),
highlightColor: Color(0xFF707070),
child: Padding(padding: EdgeInsets.only(bottom: 1)
,
child: getOrderListItem("","","","",""),
),
);
}),
);
}
return Expanded(
child: ListView.builder(
scrollDirection: Axis.vertical,
itemCount: snapshot.data.length,
itemBuilder: (context,index){
retur Padding(padding: EdgeInsets.only(bottom: 1)
,
child: getOrderListItem(snapshot.data[index].orderType,snapshot.data[index].status,snapshot.data[index].date,snapshot.data[index].time,snapshot.data[index].orderId),
),
);
});
}
);
}
Я называю будущее потоком для прослушивания изменений, но когда кнопка удаления нажимается на документ удаляется в firestore, но остается в списке не обновленным, и я не хочу принудительно обновлять его.