Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Arquivo listin_service

Olá,

Preciso de um auxílio para conseguir continuar com o curso. Até o final da aula 04 do curso: "Flutter com Firebase: autenticando usuário com Authentication" eu não vi, pelo menos, não percebi a criação do arquivo listin_service.dart nem da pasta firebase/services

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Até voltei todas as aulas desde o início do curso e no final da aula 04 dá para baixar o projeto e nele não tem o arquivo listin_service.dart, mas no início da aula 05 ele está ali.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Achei que poderia ser só mais esse arquivo e que teria explicação dele mais à frente, mas nesse print que postei o instrutor abre ele, altera e isso modifica o comportamento do aplicativo, ou seja, provavelmente há o uso desse arquivo em outro lugar que eu ainda não procurei mas gostaria de explicação pois parece que houve um corte grande aqui que não ficou disponível para nós alunos, ou pelo menos eu perdi uma parte boa do curso, mesmo assim isso não parece explicar pois, como falei, no final da aula 04 o arquivo não existe e no início da aula 05 ele está ali. Preciso de ajuda para poder entender isso para conseguir continuar com o curso.

1 resposta
solução!

Fala Alvaro, tudo bom?

Então, esse arquivo foi feito com a refatoração no final, na última aula, do curso anterior (Flutter com Firebase: evoluindo a aplicação com Cloud Firestore), mais especificamente na atividade "Para saber mais: refatorando o projeto Listin" onde apresentamos essa ideia de refatoração que separa responsabilidades de tela (que ficam com as screens) e de comunicação com o Firebase (que ficam com os services).

Nesse vídeo fazemos a refatoração de Produtos que é bem mais extensa e complexa, mas a mesma lógica deve ser aplicada para Listins.

De toda forma, posso dar uma resumida aqui também!

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter_firebase_firestore_second/firestore/models/listin.dart';

class ListinService {
  FirebaseFirestore firestore = FirebaseFirestore.instance;

  Future<void> adicionarListin({required Listin listin}) async {
    return firestore.collection("listins").doc(listin.id).set(listin.toMap());
  }

  Future<List<Listin>> lerListins() async {
    List<Listin> temp = [];

    QuerySnapshot<Map<String, dynamic>> snapshot =
        await firestore.collection("listins").get();

    for (var doc in snapshot.docs) {
      temp.add(Listin.fromMap(doc.data()));
    }

    return temp;
  }

  Future<void> removerListin({required String listinId}) async {
    return firestore.collection('listins').doc(listinId).delete();
  }
}
  1. Começamos inicializando o Firestore como um atributo da classe, afinal ele vai ser utilizado em todos os métodos;
  2. No método adicionarListins, recebemos um Listin e utilizamos a estrutura do Firestore para salvá-lo na coleção "listins" gerando um documento com o id listin.id. Note que é o método .set que salva as informações que chegam pelo método .toMap() do Listins, que basicamente converter todos os atributos em um map;
  3. No método lerListins nós usamos o .get do Firestore em uma coleção ("listins"). Isso basicamente nos retorna um QuerySnapshot que pode ser entendido como uma "foto" do estado que o banco estava no momento que aconteceu a solicitação. Em snapshot.docs temos acesso a todos os documentos nessa coleção (lembrando que um documento, na nossa estrutura no Firestore, guarda um Listin). Daí é só iterar essa lista convertendo-a de volta de map para Listin e retornar o resultado.
  4. Já no método removerListin usamos o método .delete no .doc que possui o id do Listin que queremos remover;

Note que essa refatoração se torna muito mais simples que a de Produtos por não usarmos atualização em tempo real. Notamos no nosso passo 3, lerListins, a lista em HomeScreen só será atualizada quando a pessoa usuária de nossa aplicação, manualmente, solicitar que a tela seja atualizada.

Note também que, até o curso anterior, não estávamos nos preocupando com quem via o quê. Todo mundo que tivesse o app Listin instalado, acessaria a mesma coleção "listins" no Firestore, ou seja, todo mundo veria as listas de compras de todo mundo.

Já voltando agora para o curso de Authentication, usaremos essa modularização para configurar que a pessoa logada só consiga acessar a coleção que possui seu uid e, portanto, só conseguir gerenciar seus próprios Listin.

Espero ter te ajudado, e um abraço!