From 45dbcc54503f1432c95813d16ec31326a5c3c1e9 Mon Sep 17 00:00:00 2001 From: Mark Probst Date: Mon, 7 Sep 2026 07:37:38 -0700 Subject: [PATCH] fix(dart): accept lowercase RFC 3339 dates --- .../src/language/Dart/DartRenderer.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/quicktype-core/src/language/Dart/DartRenderer.ts b/packages/quicktype-core/src/language/Dart/DartRenderer.ts index ea08e91091..01ada86b05 100644 --- a/packages/quicktype-core/src/language/Dart/DartRenderer.ts +++ b/packages/quicktype-core/src/language/Dart/DartRenderer.ts @@ -53,6 +53,7 @@ export class DartRenderer extends ConvenienceRenderer { >(); private _needEnumValues = false; + private _needDateTimeParser = false; private classCounter = 0; @@ -539,6 +540,7 @@ export class DartRenderer extends ConvenienceRenderer { ]; case "date-time": case "date": + this._needDateTimeParser = true; if ( (transformedStringType.isNullable || isNullable) && !this._options.requiredProperties @@ -546,13 +548,13 @@ export class DartRenderer extends ConvenienceRenderer { return [ dynamic, " == null ? null : ", - "DateTime.parse(", + "_parseDateTime(", dynamic, ")", ]; } - return ["DateTime.parse(", dynamic, ")"]; + return ["_parseDateTime(", dynamic, ")"]; default: return dynamic; } @@ -1065,5 +1067,14 @@ export class DartRenderer extends ConvenienceRenderer { if (this._needEnumValues) { this.emitEnumValues(); } + if (this._needDateTimeParser) + this.emitMultiline(` +DateTime _parseDateTime(String value) { + final date = value.substring(0, 10); + if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) { + throw FormatException('Invalid date-time', value); + } + return DateTime.parse(value.toUpperCase()); +}`); } }