@@ -29,7 +29,6 @@ Map<String, dynamic> _loadYaml(String yamlString) {
29
29
class Pubspec {
30
30
final pubspek.Pubspec _inner;
31
31
final String jsonString;
32
- Map <String , dynamic >? _json;
33
32
String ? _canonicalVersion;
34
33
35
34
Pubspec ._(this ._inner, this .jsonString);
@@ -44,10 +43,9 @@ class Pubspec {
44
43
factory Pubspec .fromJson (Map <String , dynamic > map) =>
45
44
Pubspec ._(pubspek.Pubspec .fromJson (map, lenient: true ), json.encode (map));
46
45
47
- Map <String , dynamic > get asJson {
48
- _load ();
49
- return _json! ;
50
- }
46
+ late final _json = _loadYaml (jsonString);
47
+
48
+ Map <String , dynamic > get asJson => _json;
51
49
52
50
String get name => _inner.name;
53
51
@@ -84,8 +82,7 @@ class Pubspec {
84
82
.toList ();
85
83
86
84
Map <String , dynamic >? get executables {
87
- _load ();
88
- final map = _json! ['executables' ];
85
+ final map = _json['executables' ];
89
86
return map is Map <String , dynamic > ? map : null ;
90
87
}
91
88
@@ -97,7 +94,6 @@ class Pubspec {
97
94
/// Returns null if the constraint is missing or does not follow the
98
95
/// `>=<version>` pattern.
99
96
MinSdkVersion ? get minSdkVersion {
100
- _load ();
101
97
return MinSdkVersion .tryParse (_inner.environment['sdk' ]);
102
98
}
103
99
@@ -106,7 +102,6 @@ class Pubspec {
106
102
/// Returns null if the constraint is missing or does not follow the
107
103
/// `>=<version>` pattern.
108
104
late final _minFlutterSdkVersion = () {
109
- _load ();
110
105
return MinSdkVersion .tryParse (_inner.environment['flutter' ]);
111
106
}();
112
107
@@ -162,27 +157,32 @@ class Pubspec {
162
157
.intersect (VersionConstraint .parse ('<2.12.0-0' ))
163
158
.isEmpty;
164
159
165
- /// Whether the pubspec file contains a flutter.plugin entry.
166
- bool get hasFlutterPlugin {
167
- _load ();
168
- final flutter = _json ! [ 'flutter' ] ;
169
- if (flutter == null || flutter is ! Map ) return false ;
160
+ late final _flutterPluginMap = () {
161
+ final flutter = _json[ 'flutter' ];
162
+ if (flutter == null || flutter is ! Map ) {
163
+ return null ;
164
+ }
170
165
final plugin = flutter['plugin' ];
171
- return plugin != null && plugin is Map ;
172
- }
166
+ if (plugin != null && plugin is Map <String , dynamic >) {
167
+ return plugin;
168
+ } else {
169
+ return null ;
170
+ }
171
+ }();
172
+
173
+ /// Whether the pubspec file contains a flutter.plugin entry.
174
+ bool get hasFlutterPlugin => _flutterPluginMap != null ;
173
175
174
176
/// Whether the package has a dependency on flutter.
175
177
bool get dependsOnFlutter {
176
- _load ();
177
- final dependencies = _json! ['dependencies' ];
178
+ final dependencies = _json['dependencies' ];
178
179
if (dependencies == null || dependencies is ! Map ) return false ;
179
180
return dependencies.containsKey ('flutter' );
180
181
}
181
182
182
183
/// Whether the package has a dependency on flutter and it refers to the SDK.
183
184
bool get dependsOnFlutterSdk {
184
- _load ();
185
- final dependencies = _json! ['dependencies' ];
185
+ final dependencies = _json['dependencies' ];
186
186
if (dependencies == null || dependencies is ! Map ) return false ;
187
187
final flutter = dependencies['flutter' ];
188
188
if (flutter == null || flutter is ! Map ) return false ;
@@ -195,14 +195,24 @@ class Pubspec {
195
195
bool get hasOptedIntoNullSafety =>
196
196
_sdkConstraintStatus.hasOptedIntoNullSafety;
197
197
198
- void _load () {
199
- _json ?? = _loadYaml (jsonString);
200
- }
201
-
202
198
late final List <Uri > funding = _inner.funding ?? const < Uri > [];
203
199
204
200
/// Whether the pubspec has any topic entry.
205
201
bool get hasTopic => canonicalizedTopics.isNotEmpty;
202
+
203
+ /// If package is implementing a federated Flutter plugin, this will be name
204
+ /// of the plugin package, `null` otherwise.
205
+ late final implementsFederatedPluginName = () {
206
+ if (_flutterPluginMap == null ) {
207
+ return null ;
208
+ }
209
+ final implements = _flutterPluginMap['implements' ];
210
+ if (implements != null && implements is String ) {
211
+ return implements ;
212
+ } else {
213
+ return null ;
214
+ }
215
+ }();
206
216
}
207
217
208
218
class MinSdkVersion {
0 commit comments