Как добавить новое поле в коллекцию пожарных в автономном режиме с флаттером? - PullRequest
0 голосов
/ 01 июля 2019

Я использую флаттер и Google Firestore, и мне нужно обновить коллекцию (добавить новое поле), когда в автономном режиме я тестирую в режиме полета.Когда я нажимаю на кнопку, приложение вылетает, и данные не отправляются в базу данных.Он отлично работает в Интернете.

Я думаю, что это происходит из-за асинхронности / ожидания, однако, если я их не использую, приложение даже не сохраняет в Интернете.

Виджет, где находитсяфункция, которая вызывает функцию обновления (я использую FutureBuilder):

var formataData = new DateFormat('y/MM/dd');
var data = formataData.format(new DateTime.now());
final _funcao = funcoesBanco();

 child: RaisedButton(
   shape: RoundedRectangleBorder(
   borderRadius: BorderRadius.circular(25)),
   child: Text(
    "Registrar", style: TextStyle(fontSize: 17),),
    onPressed: () {
     _funcao.atualizaCampos(data, 'saida1', snapshot.data[index]);
    },
   ),

Функция обновления:

atualizaCampos(String dataHoraAtual, String campo, DocumentSnapshot document){
    Firestore.instance.runTransaction((transaction) async{
      DocumentSnapshot freshSnap = await transaction.get(document.reference);
      await transaction.update(freshSnap.reference , {
        campo: dataHoraAtual,
      });
    });
  }

Ожидаемым результатом будут данные, добавленные в хранилище, дажев автономном режиме.

Ошибки, которые я получаю в консоли:

V/NativeCrypto(19561): Read error: ssl=0x740b0778c8: I/O error during system call, Software caused connection abort
V/NativeCrypto(19561): Write error: ssl=0x740b0778c8: I/O error during system call, Broken pipe
V/NativeCrypto(19561): Write error: ssl=0x740b0778c8: I/O error during system call, Broken pipe
I/OkHttpClientTransport(19561): Failed closing connection

E/flutter (19561): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(Error performing transaction, java.lang.Exception: Do transaction failed., null)

1 Ответ

1 голос
/ 02 июля 2019

Я только что понял, виджет теперь так (изменил onPressed):

var formataData = new DateFormat('y/MM/dd');
var data = formataData.format(new DateTime.now());
final _funcao = funcoesBanco();
final docID = snapshot.data[index].reference.documentID;

 child: RaisedButton(
   shape: RoundedRectangleBorder(
   borderRadius: BorderRadius.circular(25)),
   child: Text(
    "Registrar", style: TextStyle(fontSize: 17),),
    _funcao.atualizaCampos(docID,{
     'saida2': data
    });
   ),

И функция такая:

atualizaCampos(document, novoCampo){
 _firestore.collection('horarios').document(document).updateData(novoCampo);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...