@@ -27,7 +27,7 @@ Future<FlutterArchive?> fetchFlutterArchive() async {
2727 final rs = await client.get (Uri .parse (
2828 'https://storage.googleapis.com/flutter_infra_release/releases/releases_linux.json' ));
2929 return FlutterArchive .fromJson (
30- json.decode (rs.body) as Map <String , dynamic >);
30+ json.decode (rs.body) as Map <String , Object ? >);
3131 } catch (e, st) {
3232 _logger.warning ('Unable to fetch the Flutter SDK archive' , e, st);
3333 continue ;
@@ -48,27 +48,24 @@ class FlutterArchive {
4848
4949 FlutterArchive ({this .baseUrl, this .currentRelease, this .releases});
5050
51- factory FlutterArchive .fromJson (Map <String , dynamic > json) =>
51+ factory FlutterArchive .fromJson (Map <String , Object ? > json) =>
5252 _$FlutterArchiveFromJson (json);
5353
54- Map <String , dynamic > toJson () => _$FlutterArchiveToJson (this );
54+ Map <String , Object ? > toJson () => _$FlutterArchiveToJson (this );
5555
56- late final _stableVersions = releases
57- ? .where ((e) => e.channel == 'stable' && e.version != null )
58- .toList ();
56+ late final FlutterRelease ? latestStable = _findLatestOfChannel ('stable' );
5957
60- late final latestStable = (_stableVersions? .isNotEmpty ?? false )
61- ? _stableVersions! .reduce (
62- (a, b) => a.semanticVersion.compareTo (b.semanticVersion) <= 0 ? b : a)
63- : null ;
58+ late final FlutterRelease ? latestBeta = _findLatestOfChannel ('beta' );
6459
65- late final _betaVersions =
66- releases? .where ((e) => e.channel == 'beta' && e.version != null ).toList ();
60+ FlutterRelease ? _findLatestOfChannel (String channelName) {
61+ final releasesInChannel = releases
62+ ? .where ((e) => e.channel == channelName && e.version != null )
63+ .toList (growable: false );
64+ if (releasesInChannel == null || releasesInChannel.isEmpty) return null ;
6765
68- late final latestBeta = (_betaVersions? .isNotEmpty ?? false )
69- ? _betaVersions! .reduce (
70- (a, b) => a.semanticVersion.compareTo (b.semanticVersion) <= 0 ? b : a)
71- : null ;
66+ return releasesInChannel.reduce (
67+ (a, b) => a.semanticVersion.compareTo (b.semanticVersion) <= 0 ? b : a);
68+ }
7269}
7370
7471/// The hashes of the current Flutter releases on the different channels.
@@ -80,10 +77,10 @@ class FlutterCurrentRelease {
8077
8178 FlutterCurrentRelease ({this .beta, this .dev, this .stable});
8279
83- factory FlutterCurrentRelease .fromJson (Map <String , dynamic > json) =>
80+ factory FlutterCurrentRelease .fromJson (Map <String , Object ? > json) =>
8481 _$FlutterCurrentReleaseFromJson (json);
8582
86- Map <String , dynamic > toJson () => _$FlutterCurrentReleaseToJson (this );
83+ Map <String , Object ? > toJson () => _$FlutterCurrentReleaseToJson (this );
8784}
8885
8986/// A single release for Flutter.
@@ -109,29 +106,30 @@ class FlutterRelease {
109106 this .dartSdkVersion,
110107 });
111108
112- factory FlutterRelease .fromJson (Map <String , dynamic > json) =>
109+ factory FlutterRelease .fromJson (Map <String , Object ? > json) =>
113110 _$FlutterReleaseFromJson (json);
114111
115- Map <String , dynamic > toJson () => _$FlutterReleaseToJson (this );
116-
117- late final cleanVersion =
118- version! .startsWith ('v' ) ? version! .substring (1 ) : version! ;
112+ Map <String , Object ?> toJson () => _$FlutterReleaseToJson (this );
119113
120- late final semanticVersion = Version .parse (cleanVersion);
114+ String get cleanVersion {
115+ final version = this .version! ;
116+ return version.startsWith ('v' ) ? version.substring (1 ) : version;
117+ }
121118
122- /// The Dart SDK version string may be `3.4.3` for stable versions or
123- /// `3.5.0 (build 3.5.0-180.3.beta)` for prerelease versions.
124- /// For simplicity we only parse the first part of the version string.
125- late final _extractedDartSdkVersion = dartSdkVersion? .split (' ' ).first;
119+ late final Version semanticVersion = Version .parse (cleanVersion);
126120
127121 /// The parsed Dart SDK version or `null` if we were not able to
128122 /// parse the value.
129- late final semanticDartSdkVersion = () {
130- if (_extractedDartSdkVersion == null ) {
123+ late final Version ? semanticDartSdkVersion = () {
124+ // The Dart SDK version string may be `3.4.3` for stable versions or
125+ // `3.5.0 (build 3.5.0-180.3.beta)` for prerelease versions.
126+ // For simplicity we only parse the first part of the version string.
127+ final extractedDartSdkVersion = dartSdkVersion? .split (' ' ).first;
128+ if (extractedDartSdkVersion == null ) {
131129 return null ;
132130 }
133131 try {
134- return Version .parse (_extractedDartSdkVersion );
132+ return Version .parse (extractedDartSdkVersion );
135133 } catch (_) {
136134 return null ;
137135 }
0 commit comments