Skip to content

Commit 8b58627

Browse files
authored
Reduce late and dynamic usages in flutter_archive.dart (#8143)
1 parent bd08432 commit 8b58627

File tree

1 file changed

+29
-31
lines changed

1 file changed

+29
-31
lines changed

pkg/_pub_shared/lib/utils/flutter_archive.dart

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)