mobile - 如何在flutter离线时向firestore集合添加新字段?
问题描述
我正在使用颤振和 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,
});
});
}
预期的结果将是添加到 Firestore 的数据,即使在离线时也是如此。
我在控制台中遇到的错误:
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)
解决方案
我刚刚想通了,Widget现在是这样的(改变了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);
}
推荐阅读
- google-apps-script - 仅通过按钮复制值的脚本
- notifications - 为什么我的 userNotificationCenter didReceive 在被解雇时没有运行
- node.js - Angular 7 HttpClient get - 你可以访问和处理返回对象吗?
- openscad - how to import an image into openjscad
- ios - Can not add iOS bundle identifier
- ruby-on-rails - build step 0 "gcr.io/google-appengine/exec-wrapper:latest" failed: exit status 1
- java - How to check if current phones date is today or not
- excel-formula - 如何让 VLookup 为不在 Excel 2010 列表中的条目返回零?
- python - 如何从具有特定度数的节点创建 NetworkX 子图?
- javascript - 对类使用泛型类型