我遇到了最奇怪的问题。有一天,runTransaction突然停止了完全运行。没有错误。没有消息。我放在那里的任何打印声明永远不会运行。没有。就像根本没有runTransaction语句一样。
我的代码与酒吧中的示例代码完全一样。如果我只是运行update
或set
或add
而没有事务,则它运行完美。
final DocumentReference postRef = Firestore.instance.document('all_tokens/123');
Firestore.instance.runTransaction((Transaction tx) async {
DocumentSnapshot postSnapshot = await tx.get(postRef);
if (postSnapshot.exists) {
await tx.update(postRef, <String, dynamic>{'likesCount': postSnapshot.data['likesCount'] + 1});
}else{
await tx.set(postRef, <String, dynamic>{'likesCount': postSnapshot.data['likesCount'] + 1});
}
});
完全没有错误消息。 catch
中没有任何内容,then
中没有任何内容。整个事情永远不会进行。就像被跳过
这是我的pubspeck.yaml:
dependencies:
flutter:
sdk: flutter
http: ^0.12.0
font_awesome_flutter: ^8.2.0
fluttertoast: ^3.0.4
datetime_picker_formfield: ^0.1.7
flutter_image_compress: ^0.4.0
cloud_firestore: ^0.11.0+2
firebase_auth: ^0.11.1
google_sign_in: ^4.0.1+3
firebase_messaging: ^4.0.0+3
shared_preferences: ^0.5.2
firebase_storage: ^3.0.0
flutter_rating: ^0.0.2
flutter_typeahead: ^1.4.0
url_launcher: ^4.0.3
flutter_facebook_login: ^2.0.0
algolia: ^0.1.5
geolocator: ^4.0.3
provider: ^2.0.1
答案 0 :(得分:0)
您有没有发现这个问题?我也遇到了同样的问题。
我的交易代码已经运行了好几个月,突然之间,交易根本就没有运行。没有例外,没有logcat输出,什么也没有。只是永不返回或调用回调。似乎等待中。据我所知,同时没有发生其他的Firestore操作,因此它没有被阻止。
再次运行了好几个月,然后突然停止了。
Future<void> transactionUpdate(String path, Map<String, dynamic> json) async {
DocumentReference doc = firestore.document(path);
firestore.runTransaction((Transaction tx) async {
DocumentSnapshot snapshot = await tx.get(doc);
if (snapshot.exists) {
await tx.update(doc, json);
} else {
await tx.set(doc, json);
}
});
}
我正在使用cloud_firestore:0.12.0
[√] Flutter (Channel master, v1.6.6-pre.15, on Microsoft Windows [Version 10.0.17134.765], locale en-US)
• Flutter version 1.6.6-pre.15 at C:\dev\libraries\flutter2\flutter
• Framework revision 8139a368ea (7 hours ago), 2019-05-29 10:08:58 -0700
• Engine revision 8dc3a4cde2
• Dart version 2.3.2 (build 2.3.2-dev.0.0 e3edfd36b2)
[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
• Android SDK at C:\dev\libraries\android-sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• ANDROID_HOME = C:\dev\libraries\android-sdk
• Java binary at: C:\dev\tools\android-studio-ide-171.4402976-windows\android-studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
• All Android licenses accepted.
[√] Android Studio (version 3.4)
• Android Studio at C:\dev\tools\android-studio-ide-171.4402976-windows\android-studio
• Flutter plugin version 35.3.1
• Dart plugin version 183.6270
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
答案 1 :(得分:0)
我得出结论,这是Flutter的最新版本引起了此问题。我最近升级到主频道中的最新频道,开始遇到同样的问题。一旦我在Stable频道中降级到最新版本,问题就消失了。
感谢crushman1 for reporting,并补充说降级对他有用。降级到最新的稳定版本对我也是如此。
可以找到降级步骤HERE