微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 mobx 检索 firebase 列表时出现问题

如何解决使用 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 举报,一经查实,本站将立刻删除。