diff --git a/packages/firebase_build/lib/app_build.dart b/packages/firebase_build/lib/app_build.dart index b953a1c..6678f78 100644 --- a/packages/firebase_build/lib/app_build.dart +++ b/packages/firebase_build/lib/app_build.dart @@ -5,4 +5,6 @@ export 'src/app_build.dart' flutterWebAppBuildAndServe, flutterWebAppClean, FlutterFirebaseWebAppOptions, + FlutterWebAppBuildOptions, + FlutterWebRenderer, FlutterFirebaseWebAppBuilder; diff --git a/packages/firebase_build/lib/src/app_build.dart b/packages/firebase_build/lib/src/app_build.dart index 0263938..d195cfc 100644 --- a/packages/firebase_build/lib/src/app_build.dart +++ b/packages/firebase_build/lib/src/app_build.dart @@ -38,12 +38,31 @@ Future flutterWebAppBuildAndServe(String directory, deployDir: deployDir); } +enum FlutterWebRenderer { html, canvasKit } + +class FlutterWebAppBuildOptions { + FlutterWebRenderer? renderer; + FlutterWebAppBuildOptions({this.renderer}); +} + /// Web app options class FlutterFirebaseWebAppOptions { final String path; + final FlutterWebAppBuildOptions? buildOptions; final FirebaseDeployOptions deployOptions; - FlutterFirebaseWebAppOptions({this.path = '.', required this.deployOptions}); + FlutterFirebaseWebAppOptions( + {this.path = '.', required this.deployOptions, this.buildOptions}); + + FlutterFirebaseWebAppOptions copyWith( + {String? path, + FlutterWebAppBuildOptions? buildOptions, + FirebaseDeployOptions? deployOptions}) { + return FlutterFirebaseWebAppOptions( + path: path ?? this.path, + buildOptions: buildOptions ?? this.buildOptions, + deployOptions: deployOptions ?? this.deployOptions); + } } /// Convenient builder. @@ -53,6 +72,18 @@ class FlutterFirebaseWebAppBuilder { FlutterFirebaseWebAppBuilder({required this.options}); Future build() async { + var shell = Shell().cd(options.path); + var renderOptions = ''; + switch (options.buildOptions?.renderer) { + case FlutterWebRenderer.html: + renderOptions = ' --web-renderer html'; + break; + case FlutterWebRenderer.canvasKit: + renderOptions = ' --web-renderer canvaskit'; + break; + default: + } + await shell.run('flutter build web$renderOptions'); await flutterWebAppBuild(options.path); await firebaseWebAppBuildToDeploy(options.path); } diff --git a/packages/firebase_build/lib/src/firebase_deploy.dart b/packages/firebase_build/lib/src/firebase_deploy.dart index fd76918..9fe20d8 100644 --- a/packages/firebase_build/lib/src/firebase_deploy.dart +++ b/packages/firebase_build/lib/src/firebase_deploy.dart @@ -22,6 +22,19 @@ class FirebaseDeployOptions { required this.hostingId, required this.target, }); + + /// Copy with new values. + FirebaseDeployOptions copyWith({ + String? projectId, + String? hostingId, + String? target, + }) { + return FirebaseDeployOptions( + projectId: projectId ?? this.projectId, + hostingId: hostingId ?? this.hostingId, + target: target ?? this.target, + ); + } } String _fixFolder(String path, String folder) { diff --git a/packages/firebase_build/pubspec.yaml b/packages/firebase_build/pubspec.yaml index 8b1fb64..560be40 100644 --- a/packages/firebase_build/pubspec.yaml +++ b/packages/firebase_build/pubspec.yaml @@ -1,6 +1,6 @@ name: tekartik_firebase_build description: Firebase build and deploy helpers -version: 0.1.1 +version: 0.1.2 publish_to: none environment: