diff --git a/packages/cloud_firestore/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/firestore/FlutterFirebaseFirestoreException.java b/packages/cloud_firestore/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/firestore/FlutterFirebaseFirestoreException.java index 7caa39dc96e5..39823ce0e2e7 100644 --- a/packages/cloud_firestore/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/firestore/FlutterFirebaseFirestoreException.java +++ b/packages/cloud_firestore/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/firestore/FlutterFirebaseFirestoreException.java @@ -219,6 +219,12 @@ public FlutterFirebaseFirestoreException( } } + if (nativeException != null + && nativeException.getMessage() != null + && !nativeException.getMessage().isEmpty()) { + message = nativeException.getMessage(); + } + this.code = code; this.message = message; } diff --git a/packages/cloud_firestore/cloud_firestore/example/integration_test/document_reference_e2e.dart b/packages/cloud_firestore/cloud_firestore/example/integration_test/document_reference_e2e.dart index fd611f7f0ef7..cf47634c2a95 100644 --- a/packages/cloud_firestore/cloud_firestore/example/integration_test/document_reference_e2e.dart +++ b/packages/cloud_firestore/cloud_firestore/example/integration_test/document_reference_e2e.dart @@ -268,6 +268,30 @@ void runDocumentReferenceTests() { }); group('DocumentReference.get()', () { + test( + 'preserves native error messages when offline', + () async { + final document = + await initializeTest('document-get-server-while-offline'); + await firestore.disableNetwork(); + addTearDown(firestore.enableNetwork); + + await expectLater( + document.get(const GetOptions(source: Source.server)), + throwsA( + isA() + .having((error) => error.code, 'code', 'unavailable') + .having( + (error) => error.message, + 'message', + contains('offline'), + ), + ), + ); + }, + skip: kIsWeb, + ); + test('gets a document from server', () async { DocumentReference> document = await initializeTest('document-get-server'); diff --git a/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirebaseFirestoreUtils.m b/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirebaseFirestoreUtils.m index db06c89e52a0..c1e557790706 100644 --- a/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirebaseFirestoreUtils.m +++ b/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirebaseFirestoreUtils.m @@ -253,6 +253,10 @@ + (NSArray *)ErrorCodeAndMessageFromNSError:(NSError *)error { break; } + if (error.localizedDescription.length > 0) { + message = error.localizedDescription; + } + return @[ code, message ]; }