From 98523055aa0e27060b2476be76b821336d607e26 Mon Sep 17 00:00:00 2001 From: Vadim <44135514+vodemn@users.noreply.github.com> Date: Mon, 19 Feb 2024 17:11:54 +0100 Subject: [PATCH] removed constants from env to the separate file --- .github/workflows/build_apk.yml | 10 ++++------ .github/workflows/build_ipa.yml | 3 +++ .github/workflows/create_release.yml | 10 ++++------ .gitignore | 1 + README.md | 13 +++++++++++++ iap/lib/src/providers/iap_products_provider.dart | 3 ++- lib/environment.dart | 16 ---------------- lib/runner.dart | 6 +++++- .../widget_list_tile_report_issue.dart | 4 ++-- .../widget_list_tile_source_code.dart | 4 ++-- .../widget_list_tile_write_email.dart | 7 +++---- pubspec.yaml | 2 +- 12 files changed, 40 insertions(+), 39 deletions(-) diff --git a/.github/workflows/build_apk.yml b/.github/workflows/build_apk.yml index 5813522..54ba110 100644 --- a/.github/workflows/build_apk.yml +++ b/.github/workflows/build_apk.yml @@ -67,12 +67,10 @@ jobs: cp $GOOGLE_SERVICES_JSON_ANDROID_PATH ./android/app - name: Restore firebase_options.dart - env: - FIREBASE_OPTIONS: ${{ secrets.FIREBASE_OPTIONS }} - run: | - FIREBASE_OPTIONS_PATH=$RUNNER_TEMP/firebase_options.dart - echo -n "$FIREBASE_OPTIONS" | base64 --decode --output $FIREBASE_OPTIONS_PATH - cp $FIREBASE_OPTIONS_PATH ./lib + run: bash .github/scripts/restore_from_base64.sh "${{ secrets.FIREBASE_OPTIONS }}" "lib/firebase_options.dart" + + - name: Restore constants.dart + run: bash .github/scripts/restore_from_base64.sh "${{ secrets.CONSTANTS }}" "lib/constants.dart" - name: Install Flutter uses: subosito/flutter-action@v2 diff --git a/.github/workflows/build_ipa.yml b/.github/workflows/build_ipa.yml index faec213..5e6bf4a 100644 --- a/.github/workflows/build_ipa.yml +++ b/.github/workflows/build_ipa.yml @@ -66,6 +66,9 @@ jobs: - name: Restore firebase_options.dart run: bash .github/scripts/restore_from_base64.sh "${{ secrets.FIREBASE_OPTIONS }}" "lib/firebase_options.dart" + - name: Restore constants.dart + run: bash .github/scripts/restore_from_base64.sh "${{ secrets.CONSTANTS }}" "lib/constants.dart" + - name: Install Flutter uses: subosito/flutter-action@v2 with: diff --git a/.github/workflows/create_release.yml b/.github/workflows/create_release.yml index 2e3ffde..0d444c6 100644 --- a/.github/workflows/create_release.yml +++ b/.github/workflows/create_release.yml @@ -86,12 +86,10 @@ jobs: cp $GOOGLE_SERVICES_JSON_ANDROID_PATH ./android/app - name: Restore firebase_options.dart - env: - FIREBASE_OPTIONS: ${{ secrets.FIREBASE_OPTIONS }} - run: | - FIREBASE_OPTIONS_PATH=$RUNNER_TEMP/firebase_options.dart - echo -n "$FIREBASE_OPTIONS" | base64 --decode --output $FIREBASE_OPTIONS_PATH - cp $FIREBASE_OPTIONS_PATH ./lib + run: bash .github/scripts/restore_from_base64.sh "${{ secrets.FIREBASE_OPTIONS }}" "lib/firebase_options.dart" + + - name: Restore constants.dart + run: bash .github/scripts/restore_from_base64.sh "${{ secrets.CONSTANTS }}" "lib/constants.dart" # This step makes sense when Github release is enabled because this release increments the build number. # Therefore here we have to increment it as well to build an apk with the same build number. diff --git a/.gitignore b/.gitignore index d031821..72e16ec 100644 --- a/.gitignore +++ b/.gitignore @@ -58,6 +58,7 @@ android/app/google-services.json ios/firebase_app_id_file.json ios/Runner/GoogleService-Info.plist /lib/firebase_options.dart +/lib/constants.dart coverage/ test/coverage_helper_test.dart diff --git a/README.md b/README.md index 8294959..1162d4c 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,19 @@ To build this app you need to install Flutter 3.10.0 stable. [How to install](ht ### 2. Project setup +#### Restore _constants.dart_ file + +Create a file _lib/constants.dart_ and paste the following content: + +```dart +const String contactEmail = ''; +const String iapServerUrl = ''; +const String issuesReportUrl = ''; +const String sourceCodeUrl = ''; +``` + +#### Stub IAP package + As part of the app's functionallity is in the private repo, you have to replace these lines in _pubspec.yaml_: ```yaml diff --git a/iap/lib/src/providers/iap_products_provider.dart b/iap/lib/src/providers/iap_products_provider.dart index 9d381ae..799e8a6 100644 --- a/iap/lib/src/providers/iap_products_provider.dart +++ b/iap/lib/src/providers/iap_products_provider.dart @@ -2,9 +2,10 @@ import 'package:flutter/material.dart'; import 'package:m3_lightmeter_iap/src/data/models/iap_product.dart'; class IAPProductsProvider extends StatefulWidget { + final String apiUrl; final Widget child; - const IAPProductsProvider({required this.child, super.key}); + const IAPProductsProvider({required this.apiUrl, required this.child, super.key}); static IAPProductsProviderState of(BuildContext context) => IAPProductsProvider.maybeOf(context)!; diff --git a/lib/environment.dart b/lib/environment.dart index 69ba143..34dc037 100644 --- a/lib/environment.dart +++ b/lib/environment.dart @@ -2,39 +2,23 @@ enum BuildType { dev, prod } class Environment { final BuildType buildType; - final String sourceCodeUrl; - final String issuesReportUrl; - final String contactEmail; - final bool hasLightSensor; const Environment({ required this.buildType, - required this.sourceCodeUrl, - required this.issuesReportUrl, - required this.contactEmail, this.hasLightSensor = false, }); const Environment.dev() : buildType = BuildType.dev, - sourceCodeUrl = 'https://github.com/vodemn/m3_lightmeter', - issuesReportUrl = 'https://github.com/vodemn/m3_lightmeter/issues/new/choose', - contactEmail = 'contact.vodemn@gmail.com', hasLightSensor = false; const Environment.prod() : buildType = BuildType.prod, - sourceCodeUrl = 'https://github.com/vodemn/m3_lightmeter', - issuesReportUrl = 'https://github.com/vodemn/m3_lightmeter/issues/new/choose', - contactEmail = 'contact.vodemn@gmail.com', hasLightSensor = false; Environment copyWith({bool? hasLightSensor}) => Environment( buildType: buildType, - sourceCodeUrl: sourceCodeUrl, - issuesReportUrl: issuesReportUrl, - contactEmail: contactEmail, hasLightSensor: hasLightSensor ?? this.hasLightSensor, ); } diff --git a/lib/runner.dart b/lib/runner.dart index 04d4321..8eb31b2 100644 --- a/lib/runner.dart +++ b/lib/runner.dart @@ -4,6 +4,7 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/widgets.dart'; import 'package:lightmeter/application.dart'; import 'package:lightmeter/application_wrapper.dart'; +import 'package:lightmeter/constants.dart'; import 'package:lightmeter/data/analytics/analytics.dart'; import 'package:lightmeter/data/analytics/api/analytics_firebase.dart'; import 'package:lightmeter/environment.dart'; @@ -27,7 +28,10 @@ Future runLightmeterApp(Environment env) async { products: [IAPProduct(storeId: IAPProductType.paidFeatures.storeId)], child: application, ) - : IAPProductsProvider(child: application), + : IAPProductsProvider( + apiUrl: iapServerUrl, + child: application, + ), ); }, _errorsLogger.logCrash, diff --git a/lib/screens/settings/components/about/components/report_issue/widget_list_tile_report_issue.dart b/lib/screens/settings/components/about/components/report_issue/widget_list_tile_report_issue.dart index 72bc1b5..b737791 100644 --- a/lib/screens/settings/components/about/components/report_issue/widget_list_tile_report_issue.dart +++ b/lib/screens/settings/components/about/components/report_issue/widget_list_tile_report_issue.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:lightmeter/constants.dart'; import 'package:lightmeter/generated/l10n.dart'; -import 'package:lightmeter/providers/services_provider.dart'; import 'package:url_launcher/url_launcher.dart'; class ReportIssueListTile extends StatelessWidget { @@ -13,7 +13,7 @@ class ReportIssueListTile extends StatelessWidget { title: Text(S.of(context).reportIssue), onTap: () { launchUrl( - Uri.parse(ServicesProvider.of(context).environment.issuesReportUrl), + Uri.parse(issuesReportUrl), mode: LaunchMode.externalApplication, ); }, diff --git a/lib/screens/settings/components/about/components/source_code/widget_list_tile_source_code.dart b/lib/screens/settings/components/about/components/source_code/widget_list_tile_source_code.dart index 4327332..ad40ce5 100644 --- a/lib/screens/settings/components/about/components/source_code/widget_list_tile_source_code.dart +++ b/lib/screens/settings/components/about/components/source_code/widget_list_tile_source_code.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:lightmeter/constants.dart'; import 'package:lightmeter/generated/l10n.dart'; -import 'package:lightmeter/providers/services_provider.dart'; import 'package:url_launcher/url_launcher.dart'; class SourceCodeListTile extends StatelessWidget { @@ -13,7 +13,7 @@ class SourceCodeListTile extends StatelessWidget { title: Text(S.of(context).sourceCode), onTap: () { launchUrl( - Uri.parse(ServicesProvider.of(context).environment.sourceCodeUrl), + Uri.parse(sourceCodeUrl), mode: LaunchMode.externalApplication, ); }, diff --git a/lib/screens/settings/components/about/components/write_email/widget_list_tile_write_email.dart b/lib/screens/settings/components/about/components/write_email/widget_list_tile_write_email.dart index b0a4391..4d2ee30 100644 --- a/lib/screens/settings/components/about/components/write_email/widget_list_tile_write_email.dart +++ b/lib/screens/settings/components/about/components/write_email/widget_list_tile_write_email.dart @@ -1,7 +1,7 @@ import 'package:clipboard/clipboard.dart'; import 'package:flutter/material.dart'; +import 'package:lightmeter/constants.dart'; import 'package:lightmeter/generated/l10n.dart'; -import 'package:lightmeter/providers/services_provider.dart'; import 'package:url_launcher/url_launcher.dart'; class WriteEmailListTile extends StatelessWidget { @@ -13,8 +13,7 @@ class WriteEmailListTile extends StatelessWidget { leading: const Icon(Icons.email), title: Text(S.of(context).writeEmail), onTap: () { - final email = ServicesProvider.of(context).environment.contactEmail; - final mailToUrl = Uri.parse('mailto:$email?subject=M3 Lightmeter'); + final mailToUrl = Uri.parse('mailto:$contactEmail?subject=M3 Lightmeter'); canLaunchUrl(mailToUrl).then((canLaunch) { if (canLaunch) { launchUrl( @@ -29,7 +28,7 @@ class WriteEmailListTile extends StatelessWidget { action: SnackBarAction( label: S.of(context).copyEmail, onPressed: () { - FlutterClipboard.copy(email).then((_) { + FlutterClipboard.copy(contactEmail).then((_) { ScaffoldMessenger.of(context).clearSnackBars(); }); }, diff --git a/pubspec.yaml b/pubspec.yaml index fa12889..5792aed 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,7 +28,7 @@ dependencies: m3_lightmeter_iap: git: url: "https://github.com/vodemn/m3_lightmeter_iap" - ref: v0.8.0 + ref: v0.8.1 m3_lightmeter_resources: git: url: "https://github.com/vodemn/m3_lightmeter_resources"