1
Hello, good afternoon!
I am trying to make a query on firebase using Listen to be notified every time a document is changed. However, Listen is always notified but the widget itself is not, even using Observer.
The widget is only changed with the firebase update if I change tab and return to it, which shouldn’t be happening. Yeah, I’m looking at the list with the mobx..
Initstate:
@override
  void initState() {
    super.initState();
    addPedidosListener();
  }
Build:
@override
  Widget build(BuildContext context) {
    final _pedidosBloc = BlocProvider.of<PedidosBloc>(context);
    return Observer(
      builder: (_){
        return ListView.builder(
          itemCount: pedidosModel.listPedidos.length,
          itemBuilder: (context, index){
            if(index == 0){
              return Column(
                children: [
                  _parteFiltro(_pedidosBloc),
                  CardPedido(pedidosModel.listPedidos[index])
                ],
              );
            }
            return CardPedido(pedidosModel.listPedidos[index]);
          },
        );
      },
    );
  } 
Listen:
Future<void> addPedidosListener() async{
Pedido pedido;
FirebaseFirestore.instance.collection("pedidos").doc("Kwdqc77luBnyPdS2AqD4").collection("pedidos").snapshots().listen((snapshot) {
  snapshot.docChanges.forEach((change) {
    String pedidoId = change.doc.id;
    pedido = Pedido.fromDocumentSnapshot(change.doc);
    switch(change.type){
      case DocumentChangeType.added:
      //========== quando um pedido for adicionado ==========
        pedidosModel.addPedido(pedido);
        break;
      case DocumentChangeType.modified:
      //========== modificado ==========
        print("modificou");
        print(pedido.status);
        Pedido pedidoGlobal = Pedido.recuperarPedidoGlobal();
        if(pedidoGlobal != null && pedido.idPedido == pedidoGlobal.idPedido){
          Pedido.setarPedidoGlobal(pedido);
        }
        pedidosModel.removeWhere(pedidoId);
        pedidosModel.addPedido(pedido);
        break;
      case DocumentChangeType.removed:
      //========== removido ==========
        pedidosModel.removeWhere(pedidoId);
        break;
    }
  });
  //_sort();
});
}
Mobx:
part 'PedidosModel.g.dart';
class PedidosModel = _PedidosModel with _$PedidosModel;
abstract class _PedidosModel with Store{
  @observable
  List<Pedido> listPedidos = [];
  @action
  void addPedido(Pedido value){
    listPedidos.add(value);
  }
  @action
  void removeWhere(pedidoId){
    listPedidos.removeWhere((pedido) => pedido.idPedido == pedidoId);
  }
}