diff --git a/packages/cloud_firestore/cloud_firestore/example/integration_test/field_value_e2e.dart b/packages/cloud_firestore/cloud_firestore/example/integration_test/field_value_e2e.dart index 5a0c51c3de6c..20ac0efd9878 100644 --- a/packages/cloud_firestore/cloud_firestore/example/integration_test/field_value_e2e.dart +++ b/packages/cloud_firestore/cloud_firestore/example/integration_test/field_value_e2e.dart @@ -29,6 +29,8 @@ void runFieldValueTests() { await doc.update({'foo': FieldValue.increment(1)}); DocumentSnapshot> snapshot = await doc.get(); expect(snapshot.data()!['foo'], equals(3)); + // Expect it to be a int + expect(snapshot.data()!['foo'], isA()); }); testWidgets('increments a big number if it exists', (_) async { diff --git a/packages/cloud_firestore/cloud_firestore_platform_interface/lib/src/method_channel/utils/firestore_message_codec.dart b/packages/cloud_firestore/cloud_firestore_platform_interface/lib/src/method_channel/utils/firestore_message_codec.dart index 579e88773dc4..552808364d54 100644 --- a/packages/cloud_firestore/cloud_firestore_platform_interface/lib/src/method_channel/utils/firestore_message_codec.dart +++ b/packages/cloud_firestore/cloud_firestore_platform_interface/lib/src/method_channel/utils/firestore_message_codec.dart @@ -82,8 +82,9 @@ class FirestoreMessageCodec extends StandardMessageCodec { } else if (value is FieldValuePlatform) { MethodChannelFieldValue delegate = FieldValuePlatform.getDelegate(value); final int code = _kFieldValueCodes[delegate.type]!; - // We turn int into double here to avoid precision loss. - if (delegate.type == FieldValueType.incrementInteger) { + // We turn int superior to 2^32 into double here to avoid precision loss. + if (delegate.type == FieldValueType.incrementInteger && + (delegate.value > 2147483647 || delegate.value < -2147483648)) { buffer.putUint8(_kIncrementDouble); writeValue(buffer, (delegate.value as int).toDouble()); } else {