如何解决使用 mobx 检索 firebase 列表时出现问题
考虑到我的产品包含从 Firebase 加载的多个项目/附加组件..
每件商品都有一个复选框,用于标记用户是否将此商品添加到订单中。并且,状态控制是使用 mobx 完成的,只重做已更改的项目。
但是,使用附加组件列表它可以完美运行,问题是当我有多个附加组件(包含多个项目)时,mobx 会丢失引用哪个列表的引用并最终给出错误从列表中选择项目时。
附加组件列表:
recuperarComplementos(){
//print("chamou recuperar complementos");
return StreamBuilder(
stream: FirebaseFirestore.instance
.collection("complementos")
.doc(widget.produto.idProduto)
.collection("complementos")
.orderBy("posicao")
.snapshots(),builder: (context,snapshot){
switch(snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
return carregandoDados;
break;
case ConnectionState.active:
case ConnectionState.done:
QuerySnapshot querySnapshot = snapshot.data;
if(querySnapshot.docs.length == 0){
return Container(
padding: EdgeInsets.all(25),child: Center(
child: Text("Nenhum complemento!",style: TextStyle(
fontSize: 18,fontWeight: FontWeight.bold
),),);
}
return Container(
width: double.infinity,child: ListView.builder(
//reverse: true,scrollDirection: Axis.vertical,shrinkWrap: true,physics: ScrollPhysics(),itemCount: querySnapshot.docs.length,itemBuilder: (context,indice){
List<DocumentSnapshot> complementos = querySnapshot.docs.toList();
DocumentSnapshot documentSnapshot = complementos[indice];
Complemento complemento = Complemento.fromDocumentSnapshot(documentSnapshot);
return Column(
children: [
listaItensComplemento(complemento),],);
},);
}
return Container();
},);
}
附加项目列表:
listaItensComplemento(Complemento complemento){
return StreamBuilder(
stream: FirebaseFirestore.instance
.collection("complementos")
.doc(widget.produto.idProduto)
.collection("complementos")
.doc(complemento.idComplemento)
.collection("itens")
.orderBy("posicao",descending: false)
//.limit(3)
.snapshots(),child: Center(
child: Text("Nenhum item disponível!",indice){
//print(indice);
List<DocumentSnapshot> complementos =
querySnapshot.docs.toList();
DocumentSnapshot documentSnapshot = complementos[indice];
final ItemComplemento itemComplemento =
ItemComplemento.fromDocumentSnapshot(documentSnapshot);
Map<String,dynamic> novoItem = {
"marcou": false,"titulo": 5,};
itemComplemento.marcado = false;
itemComplementoModel.addItem(novoItem);
if(indice == 0){
return Column(
crossAxisAlignment: CrossAxisAlignment.start,children: [
CardComplemento(complemento),Column(
crossAxisAlignment: CrossAxisAlignment.start,children: [
PartComplemento(
indice: indice,itemComplemento: itemComplemento,carrinhoModel: carrinhoModel,itemComplementoModel: itemComplementoModel,complemento: complemento,Container(
margin: EdgeInsets.only(left: 16,right: 16),child: Divider(color: Colors.grey[300],)),);
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,children: [
PartComplemento(
indice: indice,complemento: complemento
),Container(
margin: EdgeInsets.only(left: 16,);
},);
}
物品补充模型(mobx):
abstract class _ItemComplementoModel with Store{
@observable
ObservableList<Map<String,dynamic>> listaItens = ObservableList<Map<String,dynamic>>();
@observable
int qtdSelecionada = 0;
@action
void addItem(Map<String,dynamic> novoItem){
listaItens.add(novoItem);
}
@action
void marcarItem(
{int indice,bool marcou,CarrinhoModel carrinhoModel,ItemComplemento itemComplemento,Complemento complemento
}){
if(marcou == true){
listaItens[indice] = {"marcou": true};
qtdSelecionada++;
}else{
listaItens[indice] = {"marcou": false};
qtdSelecionada--;
}
}
}
我的问题是:如何使用 firebase 自动在 mobx 中为每个附加组件添加一个列表,以便 mobx 知道每个附加组件及其各自项目的引用.. >
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。