Atualizar os dados do mapa de um Array dentro do Firestore - Flutter

Oct 20 2020

Tenho tentado criar uma demonstração "Schedule-App" com o Firebase do Google, mas estou enfrentando algumas dificuldades para atualizar valores específicos de um Array com valores de mapa no Firestore.

Como você pode ver na imagem a seguir, o que queremos alcançar é que onButtonPressesse valor específico seja atualizado.

Eu criei um fluxo de dados e gerenciei via StreamProvider.

StreamProvider<DocumentSnapshot>.value(
        value: FirebaseFirestore.instance.collection('schedule').doc(FirebaseAuth.instance.currentUser.uid).snapshots(),

Estou usando o seguinte método para atualizar os dados do Array, mas não funciona.

  Future<void> updateUserData(int index, String title, String text, int hour, bool check) async {
    DocumentReference snapshots = FirebaseFirestore.instance.collection('schedule').doc(FirebaseAuth.instance.currentUser.uid);
    snapshots.update({
      ['standard_schedule'][index]: {'title': title, 'text': text, 'hour': hour, 'check': check}
    });
  }

Que alterações devo fazer no método acima, para que o valor bool seja atualizado, toda vez que o botão for pressionado?

=====================================================

SOLUÇÃO (24/10/2020): O Firestore não fornece uma maneira de atualizar um elemento de matriz em um índice. Você tem que ler o documento inteiro, modificar o array na memória e então escrever o array inteiro de volta no documento.

Respostas

Foudas Oct 28 2020 at 21:36

O Firestore não fornece uma maneira de atualizar um elemento da matriz em um índice . Você tem que ler o documento inteiro, modificar o array na memória e então escrever o array inteiro de volta no documento .

Tom Dec 23 2020 at 02:22

Esta é a minha solução.

var array=[{'title': title, 'text': text, 'hour': hour, 'check': check}];
snapshots.update({'standard_schedule': FieldValue.arrayUnion(scores)});