3
respostas

Não está criando uma nova lista

Eu fiz a alteração da colletion tirei a de listins e estou passando o uid do usuário mas mesmo com o usuário novo ele vindo com a colletion que está no listins

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

class ListinService {
  String uid = FirebaseAuth.instance.currentUser!.uid;

  FirebaseFirestore firestore = FirebaseFirestore.instance;

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

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

    QuerySnapshot<Map<String, dynamic>> snapshot = await firestore
        .collection(uid)
        .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(uid).doc(listinId).delete();
  }
}

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

3 respostas

Manda o codigo completo no github

Segue o meu GitHub https://github.com/diegominelli/listin_flutter.git Gostaria muito de uma ajuda pois eu segui o curso e todos as autras coisas deram certo, só deu erro nesta parte e eu ainda não consegui consertar.

Oi, Diego!

Agradeço por compartilhar o seu código, e peço desculpas pela demora.

O problema principal é que sua HomeScreen.dart ainda acessa a coleção "listins" diretamente pelo Firestore, sem levar em conta o usuário logado. Isso faz com que os dados não sejam filtrados por usuário, o que pode gerar problemas na exibição ou segurança. Podemos tentar resolver isso criando um ListinService que centraliza as operações e já usa o uid do usuário para garantir que cada um veja só as suas listas.

Para ajustar seu código, você pode criar uma instância do serviço dentro da HomeScreen:

final listinService = ListinService();

No método refresh(), substitua a leitura direta do Firestore pelo método do serviço, que já traz as listas do usuário logado:

refresh() async {
  final temp = await listinService.lerListins();
  setState(() {
    listListins = temp;
  });
}

Na hora de salvar um novo Listin, em vez de usar o Firestore direto, use o serviço para garantir que os dados vão para o lugar certo, baseado no uid:

final listin = Listin(
  id: const Uuid().v1(),
  name: nameController.text,
);

await listinService.adicionarListin(listin: listin);

E para remover, também chame o serviço:

void remove(Listin model) {
  listinService.removerListin(listinId: model.id);
  refresh();
}

Seu código agora, deve ser capaz de mostrar somente a lista do usuário em específico.

O código completo do HomeScreen atualizado está neste gist, para você dar uma olhada com calma: Código home_screen

Resultado:

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

Espero ter ajudado! Bons estudos!

Sucesso

Imagem da comunidade