diff --git a/packages/flutter/lib/src/foundation/diagnostics.dart b/packages/flutter/lib/src/foundation/diagnostics.dart index 5a04e7f788d..3e12b10bd3f 100644 --- a/packages/flutter/lib/src/foundation/diagnostics.dart +++ b/packages/flutter/lib/src/foundation/diagnostics.dart @@ -2669,7 +2669,11 @@ class DiagnosticsProperty extends DiagnosticsNode { json['defaultLevel'] = describeEnum(_defaultLevel); if (value is Diagnosticable || value is DiagnosticsNode) json['isDiagnosticableValue'] = true; - if (value is num || value is String || value is bool || value == null) + if (v is num) + // Workaround for https://github.com/flutter/flutter/issues/39937#issuecomment-529558033. + // JSON.stringify replaces infinity and NaN with null. + json['value'] = v.isFinite ? v : v.toString(); + if (value is String || value is bool || value == null) json['value'] = value; return json; } diff --git a/packages/flutter/test/foundation/diagnostics_test.dart b/packages/flutter/test/foundation/diagnostics_test.dart index 3a1937d9bb7..e340a946ac8 100644 --- a/packages/flutter/test/foundation/diagnostics_test.dart +++ b/packages/flutter/test/foundation/diagnostics_test.dart @@ -1050,6 +1050,15 @@ void main() { validateDoublePropertyJsonSerialization(doubleWithUnit); }); + test('double.infinity serialization test', () { + final DoubleProperty infProperty1 = DoubleProperty('double1', double.infinity); + validateDoublePropertyJsonSerialization(infProperty1); + expect(infProperty1.toString(), equals('double1: Infinity')); + + final DoubleProperty infProperty2 = DoubleProperty('double2', double.negativeInfinity); + validateDoublePropertyJsonSerialization(infProperty2); + expect(infProperty2.toString(), equals('double2: -Infinity')); + }); test('unsafe double property test', () { final DoubleProperty safe = DoubleProperty.lazy(