@@ -37,14 +37,26 @@ class NativeAssetsBuildPlanner {
3737 required PackageLayout packageLayout,
3838 required FileSystem fileSystem,
3939 }) async {
40- final workingDirectory = packageConfigUri.resolve ('../' );
41- final result = await Process .run (dartExecutable.toFilePath (), [
42- 'pub' ,
43- 'deps' ,
44- '--json' ,
45- ], workingDirectory: workingDirectory.toFilePath ());
46- final packageGraph = PackageGraph .fromPubDepsJsonString (
47- result.stdout as String ,
40+ final packageGraphJsonFile = fileSystem.file (
41+ packageConfigUri.resolve ('package_graph.json' ),
42+ );
43+ final String packageGraphJson;
44+ if (packageGraphJsonFile.existsSync ()) {
45+ packageGraphJson = await packageGraphJsonFile.readAsString ();
46+ } else {
47+ // TODO: Either bump SDK constraint to dev release (but we can't while
48+ // flutter_tools requires published stable packages). Or wait for Dart 3.8
49+ // to be released to remove this fallback.
50+ final workingDirectory = packageConfigUri.resolve ('../' );
51+ final result = await Process .run (
52+ dartExecutable.toFilePath (),
53+ ['pub' , 'deps' , '--json' ],
54+ workingDirectory: workingDirectory.toFilePath (),
55+ );
56+ packageGraphJson = result.stdout as String ;
57+ }
58+ final packageGraph = PackageGraph .fromPackageGraphJsonString (
59+ packageGraphJson,
4860 );
4961 final packageGraphFromRunPackage = packageGraph.subGraph (
5062 packageLayout.runPackageName,
@@ -144,12 +156,12 @@ class PackageGraph {
144156
145157 PackageGraph (this .map);
146158
147- /// Constructs a graph from the JSON produced by `dart pub deps --json` .
148- factory PackageGraph .fromPubDepsJsonString (String json) =>
149- PackageGraph .fromPubDepsJson (jsonDecode (json) as Map <dynamic , dynamic >);
159+ factory PackageGraph .fromPackageGraphJsonString (String json) =>
160+ PackageGraph .fromPackageGraphJson (
161+ jsonDecode (json) as Map <dynamic , dynamic >,
162+ );
150163
151- /// Constructs a graph from the JSON produced by `dart pub deps --json` .
152- factory PackageGraph .fromPubDepsJson (Map <dynamic , dynamic > map) {
164+ factory PackageGraph .fromPackageGraphJson (Map <dynamic , dynamic > map) {
153165 final result = < String , List <String >> {};
154166 final packages = map['packages' ] as List <dynamic >;
155167 for (final package in packages) {
0 commit comments