@@ -19,7 +19,11 @@ const pyodideLockFile = "pyodide-lock.json";
19
19
const buildPythonVersion = "3.12.6" ;
20
20
const buildPythonReleaseDate = "20240909" ;
21
21
const defaultSitePackagesDir = "__pypackages__" ;
22
- const sitePackageEnvironmentVariable = "SERIOUS_PYTHON_SITE_PACKAGES" ;
22
+ const sitePackagesEnvironmentVariable = "SERIOUS_PYTHON_SITE_PACKAGES" ;
23
+ const flutterPackagesFlutterEnvironmentVariable =
24
+ "SERIOUS_PYTHON_FLUTTER_PACKAGES" ;
25
+ const allowSourceDistrosEnvironmentVariable =
26
+ "SERIOUS_PYTHON_ALLOW_SOURCE_DISTRIBUTIONS" ;
23
27
24
28
const platforms = {
25
29
"iOS" : {
@@ -227,6 +231,7 @@ class PackageCommand extends Command {
227
231
if (requirements.isNotEmpty) {
228
232
String ? sitePackagesRoot;
229
233
bool sitePackagesRootDeleted = false ;
234
+ bool flutterPackagesCopied = false ;
230
235
// invoke pip for every platform arch
231
236
for (var arch in platforms[platform]! .entries) {
232
237
if (archArg != null && arch.key != archArg) {
@@ -266,13 +271,13 @@ class PackageCommand extends Command {
266
271
267
272
if (isMobile) {
268
273
if (! Platform .environment
269
- .containsKey (sitePackageEnvironmentVariable )) {
270
- throw "Environment variable is not set: $sitePackageEnvironmentVariable " ;
274
+ .containsKey (sitePackagesEnvironmentVariable )) {
275
+ throw "Environment variable is not set: $sitePackagesEnvironmentVariable " ;
271
276
}
272
277
sitePackagesRoot =
273
- Platform .environment[sitePackageEnvironmentVariable ];
278
+ Platform .environment[sitePackagesEnvironmentVariable ];
274
279
if (sitePackagesRoot! .isEmpty) {
275
- throw "Environment variable cannot be empty: $sitePackageEnvironmentVariable " ;
280
+ throw "Environment variable cannot be empty: $sitePackagesEnvironmentVariable " ;
276
281
}
277
282
} else {
278
283
sitePackagesRoot =
@@ -298,7 +303,9 @@ class PackageCommand extends Command {
298
303
299
304
List <String > pipArgs = ["--disable-pip-version-check" ];
300
305
301
- if (isMobile || isWeb) {
306
+ if ((isMobile || isWeb) &&
307
+ ! Platform .environment
308
+ .containsKey (allowSourceDistrosEnvironmentVariable)) {
302
309
pipArgs.addAll (["--only-binary" , ":all:" ]);
303
310
}
304
311
@@ -317,6 +324,29 @@ class PackageCommand extends Command {
317
324
...requirements
318
325
], environment: pipEnv);
319
326
327
+ // move $sitePackagesDir/flutter if env var is defined
328
+ if (Platform .environment
329
+ .containsKey (flutterPackagesFlutterEnvironmentVariable)) {
330
+ var flutterPackagesRoot = Platform
331
+ .environment[flutterPackagesFlutterEnvironmentVariable];
332
+ var flutterPackagesRootDir = Directory (flutterPackagesRoot! );
333
+ var sitePackagesFlutterDir =
334
+ Directory (path.join (sitePackagesDir, "flutter" ));
335
+ if (await sitePackagesFlutterDir.exists ()) {
336
+ if (! flutterPackagesCopied) {
337
+ stdout.writeln (
338
+ "Copying Flutter packages to $flutterPackagesRoot " );
339
+ if (! await flutterPackagesRootDir.exists ()) {
340
+ await flutterPackagesRootDir.create (recursive: true );
341
+ }
342
+ await copyDirectory (sitePackagesFlutterDir,
343
+ flutterPackagesRootDir, sitePackagesFlutterDir.path, []);
344
+ flutterPackagesCopied = true ;
345
+ }
346
+ await sitePackagesFlutterDir.delete (recursive: true );
347
+ }
348
+ }
349
+
320
350
// compile packages
321
351
if (compilePackages) {
322
352
stdout.writeln ("Compiling app packages at $sitePackagesDir " );
0 commit comments