From 7c0374855a7ef216466a1178c73d29b23229c1de Mon Sep 17 00:00:00 2001 From: Prajapati Chintan Date: Mon, 10 Oct 2022 14:05:21 +0530 Subject: [PATCH 1/4] added: different environments and updated readme. --- README.md | 36 +++++++++++++++- lib/env.dart | 38 ++++++++++++++++ lib/main.dart | 27 ++++++++++-- .../controllers/env_controller.dart | 24 +++++++++++ .../environment/env_helpers.dart | 43 +++++++++++++++++++ pubspec.lock | 7 +++ pubspec.yaml | 1 + 7 files changed, 171 insertions(+), 5 deletions(-) create mode 100644 lib/env.dart create mode 100644 lib/vaahextendflutter/environment/controllers/env_controller.dart create mode 100644 lib/vaahextendflutter/environment/env_helpers.dart diff --git a/README.md b/README.md index e9fd894b..95178e85 100644 --- a/README.md +++ b/README.md @@ -14,17 +14,49 @@ to change minimum requirement of dart and flutter change the `sdk and flutter` v ## Setup run the command: `flutter pub get` + +- Environments + + - The app can be run in three different environments - Production, Staging/ QA, and Development. + + - To run app in `production` mode use command `flutter run --dart-define=environment='prod'` + + - To run app in `staging/ QA` mode use command `flutter run --dart-define=environment='stag'` + + - To run app in `development` mode use command `flutter run --dart-define=environment='dev'` + + - For Production build(Android) use `flutter build apk --dart-define=environment='prod'` + + - For Production build(iOS) use `flutter build ipa --dart-define=environment='prod'` + +To change environment configuration change constants in `lib/env.dart` file. +Environment module is made of 3 files, +``` +lib/env.dart, +lib/vaahextendflutter/environment/env_helpers.dart, and +lib/vaahextendflutter/environment/controllers/env_controller.dart. +```
-### Packages: +## Packages: In pubspec.yaml file > Add essential packages in dependencies, and packages that a developer need in dev_dependencies. To automatically upgrade your package dependencies to the latest versions consider running `flutter pub upgrade --major-versions`. To see which dependencies have newer versions available, run `flutter pub outdated`
-### Project structure: +## Project structure and coding conventions: - 2 spaces for indentation - test files have `_test.ext` suffix in the file name > example `widget_test.dart` +- Libraries, packages, directories, and source files name convention: snake_case(lowercase_with_underscores). +- Classes, enums, typedefs, and extensions naming conevntion: UpperCamelCase. +- Variables, constants, parameters naming convention: lowerCamelCase. +- Method/ functions naming conevntion: lowerCamelCase. +- Use relative path + - ✘ import 'package:demo/home.dart'; -> This should be avoided. + - ✔ import './home.dart'; -> Correct way + - to fix imports you can use [dart-import](https://marketplace.visualstudio.com/items?itemName=luanpotter.dart-import) +- Avoid using as instead, use is operator +- Avoid print()/ debugPrint() calls Android Production - universal package: `com.webreinvent.team` diff --git a/lib/env.dart b/lib/env.dart new file mode 100644 index 00000000..e38f663f --- /dev/null +++ b/lib/env.dart @@ -0,0 +1,38 @@ +import 'vaahextendflutter/environment/env_helpers.dart'; + +const AppVersion version = AppVersion(version: '1.0.0', build: '2022100901'); + +// After changing any const you will need to restart the app (Hot-reload won't work). + +// Production config +const EnvironmentConfig prodEnvConfig = EnvironmentConfig( + envType: 'prod', + version: version, + baseUrl: '', + apiBaseUrl: '', + analyticsID: '', + enableConsoleLogs: false, + enableLocalLogs: false, +); + +// Staging/ QA config +const EnvironmentConfig stagEnvConfig = EnvironmentConfig( + envType: 'stag', + version: version, + baseUrl: '', + apiBaseUrl: '', + analyticsID: '', + enableConsoleLogs: true, + enableLocalLogs: false, +); + +// Development config +const EnvironmentConfig devEnvConfig = EnvironmentConfig( + envType: 'dev', + version: version, + baseUrl: '', + apiBaseUrl: '', + analyticsID: '', + enableConsoleLogs: true, + enableLocalLogs: true, +); diff --git a/lib/main.dart b/lib/main.dart index 00148c9a..0a873452 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,13 +1,25 @@ import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'vaahextendflutter/environment/controllers/env_controller.dart'; +import 'vaahextendflutter/environment/env_helpers.dart'; void main() { + String environment = getEnvFromCommandLine(); + final EnvController envController = Get.put( + EnvController( + environment, + ), + ); + if (envController.config.envType != 'prod') { + print('>>>>>${envController.config.envType}'); + print('>>>>>${envController.config.version.version}'); + } runApp(const TeamApp()); } class TeamApp extends StatelessWidget { const TeamApp({super.key}); - // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( @@ -28,12 +40,21 @@ class TeamHomePage extends StatefulWidget { } class _TeamHomePageState extends State { + late EnvController envCtrl; + + @override + void initState() { + envCtrl = Get.find(); + super.initState(); + } + @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), - body: const Center( - child: Text('WebReinvent'), + body: Center( + child: Text( + '${envCtrl.config.envType} ${envCtrl.config.version.version}+${envCtrl.config.version.build}'), ), ); } diff --git a/lib/vaahextendflutter/environment/controllers/env_controller.dart b/lib/vaahextendflutter/environment/controllers/env_controller.dart new file mode 100644 index 00000000..264f92cb --- /dev/null +++ b/lib/vaahextendflutter/environment/controllers/env_controller.dart @@ -0,0 +1,24 @@ +import 'package:get/get.dart'; + +import '../../../env.dart'; +import '../env_helpers.dart'; + +class EnvController extends GetxController { + EnvironmentConfig _config = devEnvConfig; + EnvironmentConfig get config => _config; + + EnvController(String environment) { + switch (environment) { + case 'prod': + _config = prodEnvConfig; + break; + case 'stag': + _config = stagEnvConfig; + break; + default: + _config = devEnvConfig; + break; + } + update(); + } +} diff --git a/lib/vaahextendflutter/environment/env_helpers.dart b/lib/vaahextendflutter/environment/env_helpers.dart new file mode 100644 index 00000000..31d6066d --- /dev/null +++ b/lib/vaahextendflutter/environment/env_helpers.dart @@ -0,0 +1,43 @@ +// **************************************** +// Main.dart Environment helpers starts +// **************************************** + +String getEnvFromCommandLine() { + String environment = + const String.fromEnvironment('environment', defaultValue: 'dev'); + if (!(environment == 'prod' || environment == 'stag')) { + environment = 'dev'; + } + return environment; +} + +// **************************************** +// Main.dart helpers ends +// **************************************** + +class AppVersion { + final String build; // build no format '2022010101' + final String version; // version format 1.0.0 (major.minor.patch) + + const AppVersion({required this.build, required this.version}); +} + +class EnvironmentConfig { + final String envType; + final AppVersion version; + final String baseUrl; + final String apiBaseUrl; + final String analyticsID; + final bool enableConsoleLogs; + final bool enableLocalLogs; + + const EnvironmentConfig({ + required this.envType, + required this.version, + required this.baseUrl, + required this.apiBaseUrl, + required this.analyticsID, + required this.enableConsoleLogs, + required this.enableLocalLogs, + }); +} diff --git a/pubspec.lock b/pubspec.lock index d4c4f3e6..c5e41d22 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -67,6 +67,13 @@ packages: description: flutter source: sdk version: "0.0.0" + get: + dependency: "direct main" + description: + name: get + url: "https://pub.dartlang.org" + source: hosted + version: "4.6.5" lints: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index dd3ab0d1..8c55ddef 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,6 +13,7 @@ dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 + get: ^4.6.5 dev_dependencies: flutter_test: From a7f42e30e79b2ff74058d929c351b60d07fd8582 Mon Sep 17 00:00:00 2001 From: Prajapati Chintan Date: Mon, 10 Oct 2022 15:44:10 +0530 Subject: [PATCH 2/4] updated: refactored code and removed unnecessary code. updated readme. --- README.md | 51 ++++++++++++++----- lib/env.dart | 37 ++++++++++++-- lib/main.dart | 11 ++-- .../controllers/env_controller.dart | 24 --------- .../environment/env_helpers.dart | 17 +++---- 5 files changed, 83 insertions(+), 57 deletions(-) delete mode 100644 lib/vaahextendflutter/environment/controllers/env_controller.dart diff --git a/README.md b/README.md index 95178e85..f9033024 100644 --- a/README.md +++ b/README.md @@ -13,35 +13,60 @@ to change minimum requirement of dart and flutter change the `sdk and flutter` v ## Setup -run the command: `flutter pub get` +run the command: +``` +flutter pub get +``` - Environments - The app can be run in three different environments - Production, Staging/ QA, and Development. - - To run app in `production` mode use command `flutter run --dart-define=environment='prod'` + - To run app in `production` mode use command + ``` + flutter run --dart-define=environment='production' + ``` - - To run app in `staging/ QA` mode use command `flutter run --dart-define=environment='stag'` + - To run app in `staging/ QA` mode use command + ``` + flutter run --dart-define=environment='staging' + ``` - - To run app in `development` mode use command `flutter run --dart-define=environment='dev'` + - To run app in `development` mode use command + ``` + flutter run --dart-define=environment='development' + ``` - - For Production build(Android) use `flutter build apk --dart-define=environment='prod'` + - For Android production build use command + ``` + flutter build apk --dart-define=environment='production' + ``` - - For Production build(iOS) use `flutter build ipa --dart-define=environment='prod'` + - For iOS production build use command + ``` + flutter build ipa --dart-define=environment='production' + ``` To change environment configuration change constants in `lib/env.dart` file. -Environment module is made of 3 files, +Environment module is made of 2 files, ``` lib/env.dart, -lib/vaahextendflutter/environment/env_helpers.dart, and -lib/vaahextendflutter/environment/controllers/env_controller.dart. +lib/vaahextendflutter/environment/env_helpers.dart. ```
## Packages: -In pubspec.yaml file > Add essential packages in dependencies, and packages that a developer need in dev_dependencies. +In `pubspec.yaml` file > Add essential packages in dependencies, and packages that a developer need in dev_dependencies. -To automatically upgrade your package dependencies to the latest versions consider running `flutter pub upgrade --major-versions`. To see which dependencies have newer versions available, run `flutter pub outdated` +To automatically upgrade your package dependencies to the latest versions consider running +``` +flutter pub upgrade --major-versions +``` + +To see which dependencies have newer versions available, run +``` +flutter pub outdated +```
## Project structure and coding conventions: @@ -52,8 +77,8 @@ To automatically upgrade your package dependencies to the latest versions consid - Variables, constants, parameters naming convention: lowerCamelCase. - Method/ functions naming conevntion: lowerCamelCase. - Use relative path - - ✘ import 'package:demo/home.dart'; -> This should be avoided. - - ✔ import './home.dart'; -> Correct way + - ✘ `import 'package:demo/home.dart';` -> This should be avoided. + - ✔ `import './home.dart';` -> Correct way - to fix imports you can use [dart-import](https://marketplace.visualstudio.com/items?itemName=luanpotter.dart-import) - Avoid using as instead, use is operator - Avoid print()/ debugPrint() calls diff --git a/lib/env.dart b/lib/env.dart index e38f663f..b174b74a 100644 --- a/lib/env.dart +++ b/lib/env.dart @@ -1,13 +1,18 @@ -import 'vaahextendflutter/environment/env_helpers.dart'; +import 'package:get/get.dart'; -const AppVersion version = AppVersion(version: '1.0.0', build: '2022100901'); +import 'vaahextendflutter/environment/env_helpers.dart'; // After changing any const you will need to restart the app (Hot-reload won't work). +// Version and build +const String version = '1.0.0'; // version format 1.0.0 (major.minor.patch) +const String build = '2022100901'; // build no format '2022010101' + // Production config const EnvironmentConfig prodEnvConfig = EnvironmentConfig( - envType: 'prod', + envType: 'production', version: version, + build: build, baseUrl: '', apiBaseUrl: '', analyticsID: '', @@ -17,8 +22,9 @@ const EnvironmentConfig prodEnvConfig = EnvironmentConfig( // Staging/ QA config const EnvironmentConfig stagEnvConfig = EnvironmentConfig( - envType: 'stag', + envType: 'staging', version: version, + build: build, baseUrl: '', apiBaseUrl: '', analyticsID: '', @@ -28,11 +34,32 @@ const EnvironmentConfig stagEnvConfig = EnvironmentConfig( // Development config const EnvironmentConfig devEnvConfig = EnvironmentConfig( - envType: 'dev', + envType: 'development', version: version, + build: build, baseUrl: '', apiBaseUrl: '', analyticsID: '', enableConsoleLogs: true, enableLocalLogs: true, ); + +class EnvController extends GetxController { + EnvironmentConfig _config = devEnvConfig; + EnvironmentConfig get config => _config; + + EnvController(String environment) { + switch (environment) { + case 'production': + _config = prodEnvConfig; + break; + case 'staging': + _config = stagEnvConfig; + break; + default: + _config = devEnvConfig; + break; + } + update(); + } +} diff --git a/lib/main.dart b/lib/main.dart index 0a873452..8432f68e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'vaahextendflutter/environment/controllers/env_controller.dart'; + +import 'env.dart'; import 'vaahextendflutter/environment/env_helpers.dart'; void main() { @@ -11,8 +12,10 @@ void main() { ), ); if (envController.config.envType != 'prod') { - print('>>>>>${envController.config.envType}'); - print('>>>>>${envController.config.version.version}'); + print('>>>>> ${envController.config.envType}'); + print( + '>>>>> ${envController.config.version}+${envController.config.build}', + ); } runApp(const TeamApp()); } @@ -54,7 +57,7 @@ class _TeamHomePageState extends State { appBar: AppBar(), body: Center( child: Text( - '${envCtrl.config.envType} ${envCtrl.config.version.version}+${envCtrl.config.version.build}'), + '${envCtrl.config.envType} ${envCtrl.config.version}+${envCtrl.config.build}'), ), ); } diff --git a/lib/vaahextendflutter/environment/controllers/env_controller.dart b/lib/vaahextendflutter/environment/controllers/env_controller.dart deleted file mode 100644 index 264f92cb..00000000 --- a/lib/vaahextendflutter/environment/controllers/env_controller.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:get/get.dart'; - -import '../../../env.dart'; -import '../env_helpers.dart'; - -class EnvController extends GetxController { - EnvironmentConfig _config = devEnvConfig; - EnvironmentConfig get config => _config; - - EnvController(String environment) { - switch (environment) { - case 'prod': - _config = prodEnvConfig; - break; - case 'stag': - _config = stagEnvConfig; - break; - default: - _config = devEnvConfig; - break; - } - update(); - } -} diff --git a/lib/vaahextendflutter/environment/env_helpers.dart b/lib/vaahextendflutter/environment/env_helpers.dart index 31d6066d..217c4a21 100644 --- a/lib/vaahextendflutter/environment/env_helpers.dart +++ b/lib/vaahextendflutter/environment/env_helpers.dart @@ -4,9 +4,9 @@ String getEnvFromCommandLine() { String environment = - const String.fromEnvironment('environment', defaultValue: 'dev'); - if (!(environment == 'prod' || environment == 'stag')) { - environment = 'dev'; + const String.fromEnvironment('environment', defaultValue: 'development'); + if (!(environment == 'production' || environment == 'staging')) { + environment = 'development'; } return environment; } @@ -15,16 +15,10 @@ String getEnvFromCommandLine() { // Main.dart helpers ends // **************************************** -class AppVersion { - final String build; // build no format '2022010101' - final String version; // version format 1.0.0 (major.minor.patch) - - const AppVersion({required this.build, required this.version}); -} - class EnvironmentConfig { final String envType; - final AppVersion version; + final String version; + final String build; final String baseUrl; final String apiBaseUrl; final String analyticsID; @@ -34,6 +28,7 @@ class EnvironmentConfig { const EnvironmentConfig({ required this.envType, required this.version, + required this.build, required this.baseUrl, required this.apiBaseUrl, required this.analyticsID, From ff229f2854293e0c393a42338d0e022edd95d90a Mon Sep 17 00:00:00 2001 From: Prajapati Chintan Date: Mon, 10 Oct 2022 17:50:47 +0530 Subject: [PATCH 3/4] updated: refactored code. added: central log library --- README.md | 60 ++++++------ lib/env.dart | 92 ++++++++++++++----- lib/main.dart | 14 +-- .../environment/env_helpers.dart | 38 -------- lib/vaahextendflutter/log/console.dart | 75 +++++++++++++++ lib/vaahextendflutter/log/local.dart | 1 + pubspec.lock | 7 ++ pubspec.yaml | 1 + 8 files changed, 190 insertions(+), 98 deletions(-) delete mode 100644 lib/vaahextendflutter/environment/env_helpers.dart create mode 100644 lib/vaahextendflutter/log/console.dart create mode 100644 lib/vaahextendflutter/log/local.dart diff --git a/README.md b/README.md index f9033024..7b12bebf 100644 --- a/README.md +++ b/README.md @@ -13,50 +13,44 @@ to change minimum requirement of dart and flutter change the `sdk and flutter` v ## Setup -run the command: +Run the command: ``` flutter pub get ``` -- Environments +## Environments - - The app can be run in three different environments - Production, Staging/ QA, and Development. - - To run app in `production` mode use command - ``` - flutter run --dart-define=environment='production' - ``` - - - To run app in `staging/ QA` mode use command - ``` - flutter run --dart-define=environment='staging' - ``` +### To run app in `production` mode use command +``` +flutter run --dart-define=environment='production' +``` - - To run app in `development` mode use command - ``` - flutter run --dart-define=environment='development' - ``` +### To run app in `staging/ QA` mode use command +``` +flutter run --dart-define=environment='stage' +``` - - For Android production build use command - ``` - flutter build apk --dart-define=environment='production' - ``` +### To run app in `develop` mode use command +``` +flutter run --dart-define=environment='develop' +``` - - For iOS production build use command - ``` - flutter build ipa --dart-define=environment='production' - ``` +### For Android production build use command +``` +flutter build apk --dart-define=environment='production' +``` -To change environment configuration change constants in `lib/env.dart` file. -Environment module is made of 2 files, +### For iOS production build use command ``` -lib/env.dart, -lib/vaahextendflutter/environment/env_helpers.dart. +flutter build ipa --dart-define=environment='production' ``` + +To change environment configuration change constants in `lib/env.dart` file.
## Packages: -In `pubspec.yaml` file > Add essential packages in dependencies, and packages that a developer need in dev_dependencies. +In `pubspec.yaml` file > Add essential packages in `dependencies`, and packages that a developer need in `dev_dependencies`. To automatically upgrade your package dependencies to the latest versions consider running ``` @@ -87,4 +81,10 @@ Android Production - universal package: `com.webreinvent.team` iOS Production -- universal package: `com.webreinvent.team` \ No newline at end of file +- universal package: `com.webreinvent.team` + +## VaahExtendedFlutter + +### Central log library: + +Can be used for logging different details. All methods are static thus no instance of Console is required. Console.info() method will print info in blue color font, Console.success() method will print log in green color font, Console.warning() method will print log in yellow color font, and Console.danger() method will print log in red color font. The files reside in `lib/vaahextendflutter/log/` folder. \ No newline at end of file diff --git a/lib/env.dart b/lib/env.dart index b174b74a..22702686 100644 --- a/lib/env.dart +++ b/lib/env.dart @@ -1,65 +1,111 @@ import 'package:get/get.dart'; -import 'vaahextendflutter/environment/env_helpers.dart'; - // After changing any const you will need to restart the app (Hot-reload won't work). // Version and build const String version = '1.0.0'; // version format 1.0.0 (major.minor.patch) const String build = '2022100901'; // build no format '2022010101' -// Production config -const EnvironmentConfig prodEnvConfig = EnvironmentConfig( - envType: 'production', +// Default config +const EnvironmentConfig defaultEnvironmentConfig = EnvironmentConfig( + envType: 'default', version: version, build: build, baseUrl: '', apiBaseUrl: '', - analyticsID: '', - enableConsoleLogs: false, - enableLocalLogs: false, + analyticsId: '', + enableConsoleLogs: true, + enableLocalLogs: true, +); + +// Develop config +const EnvironmentConfig developEnvironmentConfig = EnvironmentConfig( + envType: 'develop', + version: version, + build: build, + baseUrl: '', + apiBaseUrl: '', + analyticsId: '', + enableConsoleLogs: true, + enableLocalLogs: true, ); // Staging/ QA config -const EnvironmentConfig stagEnvConfig = EnvironmentConfig( - envType: 'staging', +const EnvironmentConfig stageEnvironmentConfig = EnvironmentConfig( + envType: 'stage', version: version, build: build, baseUrl: '', apiBaseUrl: '', - analyticsID: '', + analyticsId: '', enableConsoleLogs: true, enableLocalLogs: false, ); -// Development config -const EnvironmentConfig devEnvConfig = EnvironmentConfig( - envType: 'development', +// Production config +const EnvironmentConfig productionEnvironmentConfig = EnvironmentConfig( + envType: 'production', version: version, build: build, baseUrl: '', apiBaseUrl: '', - analyticsID: '', - enableConsoleLogs: true, - enableLocalLogs: true, + analyticsId: '', + enableConsoleLogs: false, + enableLocalLogs: false, ); class EnvController extends GetxController { - EnvironmentConfig _config = devEnvConfig; + EnvironmentConfig _config = defaultEnvironmentConfig; EnvironmentConfig get config => _config; EnvController(String environment) { switch (environment) { - case 'production': - _config = prodEnvConfig; + case 'develop': + _config = developEnvironmentConfig; break; - case 'staging': - _config = stagEnvConfig; + case 'stage': + _config = stageEnvironmentConfig; + break; + case 'production': + _config = productionEnvironmentConfig; break; default: - _config = devEnvConfig; + _config = defaultEnvironmentConfig; break; } update(); } } + +String getEnvFromCommandLine() { + String environment = + const String.fromEnvironment('environment', defaultValue: 'default'); + if (!(environment == 'develop' || + environment == 'stage' || + environment == 'production')) { + environment = 'default'; + } + return environment; +} + +class EnvironmentConfig { + final String envType; + final String version; + final String build; + final String baseUrl; + final String apiBaseUrl; + final String analyticsId; + final bool enableConsoleLogs; + final bool enableLocalLogs; + + const EnvironmentConfig({ + required this.envType, + required this.version, + required this.build, + required this.baseUrl, + required this.apiBaseUrl, + required this.analyticsId, + required this.enableConsoleLogs, + required this.enableLocalLogs, + }); +} diff --git a/lib/main.dart b/lib/main.dart index 8432f68e..eb6be979 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'env.dart'; -import 'vaahextendflutter/environment/env_helpers.dart'; +import 'vaahextendflutter/log/console.dart'; void main() { String environment = getEnvFromCommandLine(); @@ -11,9 +11,9 @@ void main() { environment, ), ); - if (envController.config.envType != 'prod') { - print('>>>>> ${envController.config.envType}'); - print( + if (envController.config.envType != 'production') { + Console.info('>>>>> ${envController.config.envType}'); + Console.info( '>>>>> ${envController.config.version}+${envController.config.build}', ); } @@ -43,11 +43,11 @@ class TeamHomePage extends StatefulWidget { } class _TeamHomePageState extends State { - late EnvController envCtrl; + late EnvController envController; @override void initState() { - envCtrl = Get.find(); + envController = Get.find(); super.initState(); } @@ -57,7 +57,7 @@ class _TeamHomePageState extends State { appBar: AppBar(), body: Center( child: Text( - '${envCtrl.config.envType} ${envCtrl.config.version}+${envCtrl.config.build}'), + '${envController.config.envType} ${envController.config.version}+${envController.config.build}'), ), ); } diff --git a/lib/vaahextendflutter/environment/env_helpers.dart b/lib/vaahextendflutter/environment/env_helpers.dart deleted file mode 100644 index 217c4a21..00000000 --- a/lib/vaahextendflutter/environment/env_helpers.dart +++ /dev/null @@ -1,38 +0,0 @@ -// **************************************** -// Main.dart Environment helpers starts -// **************************************** - -String getEnvFromCommandLine() { - String environment = - const String.fromEnvironment('environment', defaultValue: 'development'); - if (!(environment == 'production' || environment == 'staging')) { - environment = 'development'; - } - return environment; -} - -// **************************************** -// Main.dart helpers ends -// **************************************** - -class EnvironmentConfig { - final String envType; - final String version; - final String build; - final String baseUrl; - final String apiBaseUrl; - final String analyticsID; - final bool enableConsoleLogs; - final bool enableLocalLogs; - - const EnvironmentConfig({ - required this.envType, - required this.version, - required this.build, - required this.baseUrl, - required this.apiBaseUrl, - required this.analyticsID, - required this.enableConsoleLogs, - required this.enableLocalLogs, - }); -} diff --git a/lib/vaahextendflutter/log/console.dart b/lib/vaahextendflutter/log/console.dart new file mode 100644 index 00000000..db742c6e --- /dev/null +++ b/lib/vaahextendflutter/log/console.dart @@ -0,0 +1,75 @@ +import 'package:colorize/colorize.dart'; +import 'package:flutter/material.dart'; + +class Console { + static void printChunks(Colorize text) { + final RegExp pattern = RegExp('.{1,800}'); // 800 is the size of each chunk + pattern.allMatches(text.toString()).forEach( + (RegExpMatch match) => debugPrint( + match.group(0), + ), + ); + } + + static void printLog(Colorize text) { + Console.printChunks(text); + } + + static void log(String text, [Object? data]) { + Colorize txt = Colorize(text); + Console.printLog(txt); + + if (data != null) { + Colorize dataColor = Colorize(data.toString()); + Console.printLog(dataColor); + } + } + + static void info(String text, [Object? data]) { + Colorize txt = Colorize(text); + txt.blue(); + Console.printLog(txt); + + if (data != null) { + Colorize dataColor = Colorize(data.toString()); + dataColor.blue(); + Console.printLog(dataColor); + } + } + + static void success(String text, [Object? data]) { + Colorize txt = Colorize(text); + txt.green(); + Console.printLog(txt); + + if (data != null) { + Colorize dataColor = Colorize(data.toString()); + dataColor.green(); + Console.printLog(dataColor); + } + } + + static void warning(String text, [Object? data]) { + Colorize txt = Colorize(text); + txt.yellow(); + Console.printLog(txt); + + if (data != null) { + Colorize dataColor = Colorize(data.toString()); + dataColor.yellow(); + Console.printLog(dataColor); + } + } + + static void danger(String text, [Object? data]) { + Colorize txt = Colorize(text); + txt.red(); + Console.printLog(txt); + + if (data != null) { + Colorize dataColor = Colorize(data.toString()); + dataColor.red(); + Console.printLog(dataColor); + } + } +} diff --git a/lib/vaahextendflutter/log/local.dart b/lib/vaahextendflutter/log/local.dart new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/lib/vaahextendflutter/log/local.dart @@ -0,0 +1 @@ + diff --git a/pubspec.lock b/pubspec.lock index c5e41d22..bb494082 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -36,6 +36,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.16.0" + colorize: + dependency: "direct main" + description: + name: colorize + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" cupertino_icons: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 8c55ddef..ec6e6ae7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: sdk: flutter cupertino_icons: ^1.0.2 get: ^4.6.5 + colorize: ^3.0.0 dev_dependencies: flutter_test: From 72971754b9b8381470355bee032aceb1929901d4 Mon Sep 17 00:00:00 2001 From: Prajapati Chintan Date: Tue, 11 Oct 2022 12:47:44 +0530 Subject: [PATCH 4/4] updated: can create new environments more dynamically --- README.md | 21 ++-- lib/env.dart | 140 ++++++++++++------------- lib/main.dart | 14 +-- lib/vaahextendflutter/log/console.dart | 7 ++ 4 files changed, 96 insertions(+), 86 deletions(-) diff --git a/README.md b/README.md index 7b12bebf..429dfeb1 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Dart and flutter versions: the project requires and flutter version >=3.3.4 ``` -to change minimum requirement of dart and flutter change the `sdk and flutter` versions under `environment` in the `pubspec.yaml` file. +To change minimum requirement of dart and flutter change the `sdk and flutter` versions under `environment` in the `pubspec.yaml` file.
## Setup @@ -20,33 +20,38 @@ flutter pub get ## Environments - ### To run app in `production` mode use command ``` -flutter run --dart-define=environment='production' +flutter run --dart-define="environment=production" ``` ### To run app in `staging/ QA` mode use command ``` -flutter run --dart-define=environment='stage' +flutter run --dart-define="environment=stage" ``` ### To run app in `develop` mode use command ``` -flutter run --dart-define=environment='develop' +flutter run --dart-define="environment=develop" ``` ### For Android production build use command ``` -flutter build apk --dart-define=environment='production' +flutter build apk --dart-define="environment=production" ``` ### For iOS production build use command ``` -flutter build ipa --dart-define=environment='production' +flutter build ipa --dart-define="environment=production" ``` -To change environment configuration change constants in `lib/env.dart` file. +### How to create a new environment: + +Go to `lib/env.dart`, find `envConfigs` variable and add configuration for the environment you want to create. example: for `testing` environment add `'testing'` key and value. And in commands pass your environment name +``` +// for example if environment name is testing then +flutter run --dart-define="environment=testing" +```
## Packages: diff --git a/lib/env.dart b/lib/env.dart index 22702686..9642ef26 100644 --- a/lib/env.dart +++ b/lib/env.dart @@ -1,13 +1,15 @@ +import 'dart:io'; + import 'package:get/get.dart'; +import 'package:team/vaahextendflutter/log/console.dart'; // After changing any const you will need to restart the app (Hot-reload won't work). // Version and build const String version = '1.0.0'; // version format 1.0.0 (major.minor.patch) -const String build = '2022100901'; // build no format '2022010101' +const String build = '2022100901'; // build no format 'YYYYMMDDNUMBER' -// Default config -const EnvironmentConfig defaultEnvironmentConfig = EnvironmentConfig( +EnvironmentConfig defaultConfig = EnvironmentConfig( envType: 'default', version: version, build: build, @@ -18,87 +20,61 @@ const EnvironmentConfig defaultEnvironmentConfig = EnvironmentConfig( enableLocalLogs: true, ); -// Develop config -const EnvironmentConfig developEnvironmentConfig = EnvironmentConfig( - envType: 'develop', - version: version, - build: build, - baseUrl: '', - apiBaseUrl: '', - analyticsId: '', - enableConsoleLogs: true, - enableLocalLogs: true, -); - -// Staging/ QA config -const EnvironmentConfig stageEnvironmentConfig = EnvironmentConfig( - envType: 'stage', - version: version, - build: build, - baseUrl: '', - apiBaseUrl: '', - analyticsId: '', - enableConsoleLogs: true, - enableLocalLogs: false, -); - -// Production config -const EnvironmentConfig productionEnvironmentConfig = EnvironmentConfig( - envType: 'production', - version: version, - build: build, - baseUrl: '', - apiBaseUrl: '', - analyticsId: '', - enableConsoleLogs: false, - enableLocalLogs: false, -); +// To add new configuration add new key, value pair in envConfigs +Map envConfigs = { + // Do not remove default config + 'default': defaultConfig.copyWith( + envType: 'default', + ), + 'develop': defaultConfig.copyWith( + envType: 'develop', + enableLocalLogs: false, + ), + 'stage': defaultConfig.copyWith( + envType: 'stage', + enableLocalLogs: false, + ), + 'production': defaultConfig.copyWith( + envType: 'production', + enableConsoleLogs: false, + enableLocalLogs: false, + ), +}; class EnvController extends GetxController { - EnvironmentConfig _config = defaultEnvironmentConfig; + late EnvironmentConfig _config; EnvironmentConfig get config => _config; EnvController(String environment) { - switch (environment) { - case 'develop': - _config = developEnvironmentConfig; - break; - case 'stage': - _config = stageEnvironmentConfig; - break; - case 'production': - _config = productionEnvironmentConfig; - break; - default: - _config = defaultEnvironmentConfig; - break; + try { + _config = getSpecificConfig(environment); + update(); + } catch (e) { + Console.danger(e.toString()); + exit(0); } - update(); } -} -String getEnvFromCommandLine() { - String environment = - const String.fromEnvironment('environment', defaultValue: 'default'); - if (!(environment == 'develop' || - environment == 'stage' || - environment == 'production')) { - environment = 'default'; + EnvironmentConfig getSpecificConfig(String key) { + bool configExists = envConfigs.containsKey(key); + if (configExists) { + return envConfigs[key]!; + } + throw Exception('Environment configuration not found for key: $key'); } - return environment; } class EnvironmentConfig { - final String envType; - final String version; - final String build; - final String baseUrl; - final String apiBaseUrl; - final String analyticsId; - final bool enableConsoleLogs; - final bool enableLocalLogs; + String envType; + String version; + String build; + String baseUrl; + String apiBaseUrl; + String analyticsId; + bool enableConsoleLogs; + bool enableLocalLogs; - const EnvironmentConfig({ + EnvironmentConfig({ required this.envType, required this.version, required this.build, @@ -108,4 +84,26 @@ class EnvironmentConfig { required this.enableConsoleLogs, required this.enableLocalLogs, }); + + EnvironmentConfig copyWith({ + String? envType, + String? version, + String? build, + String? baseUrl, + String? apiBaseUrl, + String? analyticsId, + bool? enableConsoleLogs, + bool? enableLocalLogs, + }) { + return EnvironmentConfig( + envType: envType ?? this.envType, + version: version ?? this.version, + build: build ?? this.build, + baseUrl: baseUrl ?? this.baseUrl, + apiBaseUrl: apiBaseUrl ?? this.apiBaseUrl, + analyticsId: analyticsId ?? this.analyticsId, + enableConsoleLogs: enableConsoleLogs ?? this.enableConsoleLogs, + enableLocalLogs: enableLocalLogs ?? this.enableLocalLogs, + ); + } } diff --git a/lib/main.dart b/lib/main.dart index eb6be979..32cd9204 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,18 +5,18 @@ import 'env.dart'; import 'vaahextendflutter/log/console.dart'; void main() { - String environment = getEnvFromCommandLine(); + WidgetsFlutterBinding.ensureInitialized(); + String environment = + const String.fromEnvironment('environment', defaultValue: 'default'); final EnvController envController = Get.put( EnvController( environment, ), ); - if (envController.config.envType != 'production') { - Console.info('>>>>> ${envController.config.envType}'); - Console.info( - '>>>>> ${envController.config.version}+${envController.config.build}', - ); - } + Console.info('>>>>> ${envController.config.envType}'); + Console.info( + '>>>>> ${envController.config.version}+${envController.config.build}', + ); runApp(const TeamApp()); } diff --git a/lib/vaahextendflutter/log/console.dart b/lib/vaahextendflutter/log/console.dart index db742c6e..e7a9c7be 100644 --- a/lib/vaahextendflutter/log/console.dart +++ b/lib/vaahextendflutter/log/console.dart @@ -1,5 +1,7 @@ import 'package:colorize/colorize.dart'; import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import '../../env.dart'; class Console { static void printChunks(Colorize text) { @@ -12,6 +14,11 @@ class Console { } static void printLog(Colorize text) { + bool envControllerExists = Get.isRegistered(); + if (envControllerExists) { + EnvController envController = Get.find(); + if (envController.config.enableConsoleLogs == false) return; + } Console.printChunks(text); }