diff --git a/lib/app_config.dart b/lib/app_config.dart index e9c788aa..43289a41 100644 --- a/lib/app_config.dart +++ b/lib/app_config.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:team/app_theme.dart'; -import 'package:team/env.dart'; import 'package:team/routes/middleware.dart'; +import 'package:team/vaahextendflutter/app_theme.dart'; +import 'package:team/vaahextendflutter/env.dart'; import 'package:team/vaahextendflutter/widgets/debug.dart'; final _navigatorKey = GlobalKey(); diff --git a/lib/controllers/base_controller.dart b/lib/controllers/base_controller.dart deleted file mode 100644 index 50e5eeae..00000000 --- a/lib/controllers/base_controller.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:get/get.dart'; -import 'package:get_storage/get_storage.dart'; -import 'package:team/app_theme.dart'; -import 'package:team/controllers/root_assets_controller.dart'; -import 'package:team/env.dart'; -import 'package:team/vaahextendflutter/helpers/console.dart'; -import 'package:team/vaahextendflutter/services/api.dart'; - -class BaseController extends GetxController { - Future init() async { - await GetStorage.init(); - initEnvController(); - AppTheme.init(); - await Api.init(); - Get.put(RootAssetsController()); - } -} - -void initEnvController() { - String environment = const String.fromEnvironment('environment', defaultValue: 'default'); - final EnvController envController = Get.put(EnvController(environment)); - Console.info('Env Type: ${envController.config.envType}'); - Console.info('Version: ${envController.config.version}+${envController.config.build}'); -} diff --git a/lib/main.dart b/lib/main.dart index f3e83704..5e3a2a9f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:team/app_config.dart'; -import 'package:team/controllers/base_controller.dart'; +import 'package:team/vaahextendflutter/base/base_controller.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); BaseController baseController = Get.put(BaseController()); await baseController.init(); runApp(const AppConfig()); -} \ No newline at end of file +} diff --git a/lib/models/user.dart b/lib/models/user.dart index 5a596b57..49a968df 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -26,11 +26,11 @@ class User { static Future forgotPassword(String identifier) async { await Api.ajax( - url: apiEndPoint, // TODO: change end point + url: apiEndPoint, method: 'post', params: {"identifier": identifier}, ); - // TODO: On the same page of the call Show enter otp, reset pass + // TODO: On the same page of the call Show enter otp, reset pass return; } @@ -41,7 +41,7 @@ class User { static Future createItem(Map item) async { return await Api.ajax( - url: apiEndPoint, // TODO: change end point + url: apiEndPoint, method: 'post', params: item, ); @@ -49,7 +49,7 @@ class User { static Future?> getList(Map query) async { return await Api.ajax( - url: apiEndPoint, // TODO: change end point + url: apiEndPoint, method: 'get', query: query, ); @@ -57,7 +57,7 @@ class User { static Future?> updateList(String type, List items) async { return await Api.ajax( - url: apiEndPoint, // TODO: change end point + url: apiEndPoint, method: 'post', params: {'type': type, 'data': items}, ); @@ -65,7 +65,7 @@ class User { static Future?> deleteList(String type, List items) async { return await Api.ajax( - url: apiEndPoint, // TODO: change end point + url: apiEndPoint, method: 'delete', params: {'type': type, 'data': items}, ); @@ -73,7 +73,7 @@ class User { static Future?> listAction(String type, List items) async { return await Api.ajax( - url: apiEndPoint, // TODO: change end point + url: apiEndPoint, method: 'patch', params: {'type': type, 'data': items}, ); @@ -81,7 +81,7 @@ class User { static Future getItem(String id) async { return await Api.ajax( - url: apiEndPoint, // TODO: change end point + url: apiEndPoint, method: 'get', query: {"id": id}, ); @@ -89,7 +89,7 @@ class User { static Future updateItem(String id, Map item) async { return await Api.ajax( - url: apiEndPoint, // TODO: change end point + url: apiEndPoint, method: 'patch', params: {'id': id, 'item': item}, ); @@ -97,7 +97,7 @@ class User { static Future deleteItem(String id) async { return await Api.ajax( - url: apiEndPoint, // TODO: change end point + url: apiEndPoint, method: 'delete', params: {"id": id}, ); @@ -105,7 +105,7 @@ class User { static Future itemAction(String id, String type) async { return await Api.ajax( - url: apiEndPoint, // TODO: change end point + url: apiEndPoint, method: 'post', params: {'id': id, 'type': type}, ); diff --git a/lib/routes/middleware.dart b/lib/routes/middleware.dart index b5f62f2f..d8720ee3 100644 --- a/lib/routes/middleware.dart +++ b/lib/routes/middleware.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:team/routes/routes.dart'; -import 'package:team/view/pages/not_found.dart'; +import 'package:team/views/pages/not_found.dart'; Route? routeMiddleware(RouteSettings route) { if (!routes.containsKey(route.name)) { diff --git a/lib/routes/routes.dart b/lib/routes/routes.dart index 918bf80f..23cc3e61 100644 --- a/lib/routes/routes.dart +++ b/lib/routes/routes.dart @@ -1,11 +1,13 @@ import 'package:flutter/material.dart'; -import 'package:team/view/pages/home.dart'; -import 'package:team/view/pages/not_found.dart'; -import 'package:team/view/pages/permission_denied.dart'; +import 'package:team/views/pages/home.dart'; +import 'package:team/views/pages/not_found.dart'; +import 'package:team/views/pages/permission_denied.dart'; +import 'package:team/views/pages/ui/index.dart'; final Map Function()> routes = { '/': HomePage.route, HomePage.routePath: HomePage.route, NotFoundPage.routePath: NotFoundPage.route, PermissionDeniedPage.routePath: PermissionDeniedPage.route, -}; \ No newline at end of file + UIPage.routePath: UIPage.route, +}; diff --git a/lib/app_theme.dart b/lib/vaahextendflutter/app_theme.dart similarity index 73% rename from lib/app_theme.dart rename to lib/vaahextendflutter/app_theme.dart index 95f1c475..d297f63f 100644 --- a/lib/app_theme.dart +++ b/lib/vaahextendflutter/app_theme.dart @@ -4,6 +4,16 @@ import 'package:team/vaahextendflutter/base/base_theme.dart'; class AppTheme { static final Map colors = Map.of(BaseTheme.colors); + static const panelBorder = Border(); + + static const int precision = 2; + + static const double extraSmall = 12; + static const double small = 14; + static const double medium = 16; + static const double large = 18; + static const double extraLarge = 20; + static void init() { // colors['primary'] = pink; // colors['secondary'] = gray; diff --git a/lib/vaahextendflutter/base/base_controller.dart b/lib/vaahextendflutter/base/base_controller.dart new file mode 100644 index 00000000..53f3f273 --- /dev/null +++ b/lib/vaahextendflutter/base/base_controller.dart @@ -0,0 +1,16 @@ +import 'package:get/get.dart'; +import 'package:get_storage/get_storage.dart'; +import 'package:team/controllers/root_assets_controller.dart'; +import 'package:team/vaahextendflutter/app_theme.dart'; +import 'package:team/vaahextendflutter/env.dart'; +import 'package:team/vaahextendflutter/services/api.dart'; + +class BaseController extends GetxController { + Future init() async { + await GetStorage.init(); + EnvironmentConfig.setEnvConfig(); + AppTheme.init(); + Api.init(); + Get.put(RootAssetsController()); + } +} diff --git a/lib/env.dart b/lib/vaahextendflutter/env.dart similarity index 78% rename from lib/env.dart rename to lib/vaahextendflutter/env.dart index 26474fe4..b4236638 100644 --- a/lib/env.dart +++ b/lib/vaahextendflutter/env.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:team/app_theme.dart'; +import 'package:team/vaahextendflutter/app_theme.dart'; import 'package:team/vaahextendflutter/helpers/console.dart'; // After changing any const you will need to restart the app (Hot-reload won't work). @@ -18,14 +18,14 @@ final EnvironmentConfig defaultConfig = EnvironmentConfig( version: version, build: build, backendUrl: '', - apiUrl: 'https://apivoid.herokuapp.com', + apiUrl: '', timeoutLimit: 60 * 1000, // 60 seconds firebaseId: '', enableConsoleLogs: true, enableLocalLogs: true, enableApiLogs: true, - showEnvAndVersionTag: true, - envAndVersionTagColor: AppTheme.colors['black']!.withOpacity(0.7), + showDebugPanel: true, + debugPanelColor: AppTheme.colors['black']!.withOpacity(0.7), ); // To add new configuration add new key, value pair in envConfigs @@ -46,7 +46,7 @@ Map envConfigs = { envType: 'production', enableConsoleLogs: false, enableLocalLogs: false, - showEnvAndVersionTag: false, + showDebugPanel: false, ), }; @@ -86,8 +86,8 @@ class EnvironmentConfig { final bool enableConsoleLogs; final bool enableLocalLogs; final bool enableApiLogs; - final bool showEnvAndVersionTag; - final Color envAndVersionTagColor; + final bool showDebugPanel; + final Color debugPanelColor; const EnvironmentConfig({ required this.appTitle, @@ -102,15 +102,26 @@ class EnvironmentConfig { required this.enableConsoleLogs, required this.enableLocalLogs, required this.enableApiLogs, - required this.showEnvAndVersionTag, - required this.envAndVersionTagColor, + required this.showDebugPanel, + required this.debugPanelColor, }); static EnvironmentConfig getEnvConfig() { + final bool envControllerExists = Get.isRegistered(); + if (!envControllerExists) { + setEnvConfig(); + } EnvController envController = Get.find(); return envController.config; } + static void setEnvConfig() { + String environment = const String.fromEnvironment('environment', defaultValue: 'default'); + final EnvController envController = Get.put(EnvController(environment)); + Console.info('Env Type: ${envController.config.envType}'); + Console.info('Version: ${envController.config.version}+${envController.config.build}'); + } + EnvironmentConfig copyWith({ String? appTitle, String? appTitleShort, @@ -124,8 +135,8 @@ class EnvironmentConfig { bool? enableConsoleLogs, bool? enableLocalLogs, bool? enableApiLogs, - bool? showEnvAndVersionTag, - Color? envAndVersionTagColor, + bool? showDebugPanel, + Color? debugPanelColor, }) { return EnvironmentConfig( appTitle: appTitle ?? this.appTitle, @@ -140,8 +151,8 @@ class EnvironmentConfig { enableConsoleLogs: enableConsoleLogs ?? this.enableConsoleLogs, enableLocalLogs: enableLocalLogs ?? this.enableLocalLogs, enableApiLogs: enableApiLogs ?? this.enableApiLogs, - showEnvAndVersionTag: showEnvAndVersionTag ?? this.showEnvAndVersionTag, - envAndVersionTagColor: envAndVersionTagColor ?? this.envAndVersionTagColor, + showDebugPanel: showDebugPanel ?? this.showDebugPanel, + debugPanelColor: debugPanelColor ?? this.debugPanelColor, ); } } diff --git a/lib/vaahextendflutter/helpers/helpers.dart b/lib/vaahextendflutter/helpers/alerts.dart similarity index 70% rename from lib/vaahextendflutter/helpers/helpers.dart rename to lib/vaahextendflutter/helpers/alerts.dart index 7a9e7cba..6715e967 100644 --- a/lib/vaahextendflutter/helpers/helpers.dart +++ b/lib/vaahextendflutter/helpers/alerts.dart @@ -2,17 +2,12 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:get/get.dart'; -import '../../app_theme.dart'; +import '../app_theme.dart'; import 'constants.dart'; -class Helpers { - static logout() { - // Navigate using getx - } - - // ignore: unused_element - static _toast({required String content}) { - Fluttertoast.showToast( +class Alerts { + static Future _toast({required String content}) async { + await Fluttertoast.showToast( msg: content, toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, @@ -22,7 +17,6 @@ class Helpers { ); } - // ignore: unused_element static _dialog({ required String title, List? content, @@ -45,8 +39,7 @@ class Helpers { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: [ - if (content != null && content.isNotEmpty) - verticalMargin12, + if (content != null && content.isNotEmpty) verticalMargin12, if (content != null && content.isNotEmpty) Padding( padding: horizontalPadding8, @@ -66,8 +59,7 @@ class Helpers { textAlign: TextAlign.center, ), ), - if (hint != null && hint.trim().isNotEmpty) - verticalMargin8 + if (hint != null && hint.trim().isNotEmpty) verticalMargin8 ], ), ), @@ -79,7 +71,9 @@ class Helpers { child: Text( 'Ok', style: TextStyle( - color: color == AppTheme.colors['white'] ? AppTheme.colors['black'] : AppTheme.colors['white'], + color: color == AppTheme.colors['white'] + ? AppTheme.colors['black'] + : AppTheme.colors['white'], ), ), onPressed: () { @@ -95,41 +89,55 @@ class Helpers { ); } - static showErrorToast({required String content}) { - _toast(content: content); - } + static Future Function({ + required String content, + })? showErrorToast = ({required String content}) async { + await _toast(content: content); + }; - static showSuccessToast({required String content}) { - _toast(content: content); - } + static Future Function({ + required String content, + })? showSuccessToast = ({required String content}) async { + await _toast(content: content); + }; - static showErrorDialog({ + static Future Function({ required String title, List? content, String? hint, List? actions, - }) { - _dialog( + })? showErrorDialog = ({ + required String title, + List? content, + String? hint, + List? actions, + }) async { + await _dialog( title: title, content: content, hint: hint, actions: actions, color: AppTheme.colors['danger']!, ); - } + }; - static showSuccessDialog({ + static Future Function({ required String title, List? content, String? hint, List? actions, - }) { - _dialog( + })? showSuccessDialog = ({ + required String title, + List? content, + String? hint, + List? actions, + }) async { + await _dialog( title: title, content: content, hint: hint, actions: actions, color: AppTheme.colors['success']!, ); - } + }; } diff --git a/lib/vaahextendflutter/helpers/console.dart b/lib/vaahextendflutter/helpers/console.dart index d470696c..1b968bfb 100644 --- a/lib/vaahextendflutter/helpers/console.dart +++ b/lib/vaahextendflutter/helpers/console.dart @@ -2,9 +2,8 @@ import 'dart:convert'; import 'package:colorize/colorize.dart'; import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import '../../../env.dart'; +import '../env.dart'; class Console { static void printChunks(Colorize text) { @@ -17,11 +16,7 @@ class Console { } static void printLog(Colorize text) { - bool envControllerExists = Get.isRegistered(); - if (envControllerExists) { - EnvController envController = Get.find(); - if (envController.config.enableConsoleLogs == false) return; - } + if (!EnvironmentConfig.getEnvConfig().enableConsoleLogs) return; Console.printChunks(text); } diff --git a/lib/vaahextendflutter/helpers/constants.dart b/lib/vaahextendflutter/helpers/constants.dart index baccc203..27f26d44 100644 --- a/lib/vaahextendflutter/helpers/constants.dart +++ b/lib/vaahextendflutter/helpers/constants.dart @@ -48,6 +48,7 @@ const horizontalPadding24 = EdgeInsets.symmetric(horizontal: 24.0); const horizontalPadding32 = EdgeInsets.symmetric(horizontal: 32.0); const horizontalPadding48 = EdgeInsets.symmetric(horizontal: 48.0); +const verticalPadding0 = EdgeInsets.symmetric(vertical: 0.0); const verticalPadding2 = EdgeInsets.symmetric(vertical: 2.0); const verticalPadding4 = EdgeInsets.symmetric(vertical: 4.0); const verticalPadding8 = EdgeInsets.symmetric(vertical: 8.0); @@ -59,6 +60,8 @@ const verticalPadding48 = EdgeInsets.symmetric(vertical: 48.0); const emptyPadding = EdgeInsets.zero; +const allPadding0 = EdgeInsets.zero; +const allPadding2 = EdgeInsets.all(2.0); const allPadding4 = EdgeInsets.all(4.0); const allPadding8 = EdgeInsets.all(8.0); const allPadding12 = EdgeInsets.all(12.0); @@ -67,6 +70,7 @@ const allPadding24 = EdgeInsets.all(24.0); const allPadding32 = EdgeInsets.all(32.0); const allPadding48 = EdgeInsets.all(48.0); +const leftPadding2 = EdgeInsets.only(left: 2.0); const leftPadding4 = EdgeInsets.only(left: 4.0); const leftPadding8 = EdgeInsets.only(left: 8.0); const leftPadding12 = EdgeInsets.only(left: 12.0); @@ -85,6 +89,7 @@ const topPadding24 = EdgeInsets.only(top: 24.0); const topPadding32 = EdgeInsets.only(top: 32.0); const topPadding48 = EdgeInsets.only(top: 48.0); +const rightPadding2 = EdgeInsets.only(right: 2.0); const rightPadding4 = EdgeInsets.only(right: 4.0); const rightPadding8 = EdgeInsets.only(right: 8.0); const rightPadding12 = EdgeInsets.only(right: 12.0); @@ -103,8 +108,7 @@ const bottomPadding24 = EdgeInsets.only(bottom: 24.0); const bottomPadding32 = EdgeInsets.only(bottom: 32.0); const bottomPadding48 = EdgeInsets.only(bottom: 48.0); -const duration250milli = - Duration(milliseconds: 250); // best suitable for animations +const duration250milli = Duration(milliseconds: 250); // best suitable for animations const duration300milli = Duration(milliseconds: 300); const duration400milli = Duration(milliseconds: 400); const duration500milli = Duration(milliseconds: 500); diff --git a/lib/vaahextendflutter/services/api.dart b/lib/vaahextendflutter/services/api.dart index 6cfeda81..abf1f062 100644 --- a/lib/vaahextendflutter/services/api.dart +++ b/lib/vaahextendflutter/services/api.dart @@ -7,17 +7,17 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:get/get.dart' as getx; -import '../../../env.dart'; -import '../../app_theme.dart'; +import '../app_theme.dart'; +import '../env.dart'; +import '../helpers/alerts.dart'; import '../helpers/console.dart'; import '../helpers/constants.dart'; -import '../helpers/helpers.dart'; // alertType : 'dialog', 'toast', class Api { // To check env variables logs enabled, apiUrl and timeout limit for requests - static late final EnvController _envController; + static late final EnvironmentConfig _config; // Get base url by env static late final String _apiBaseUrl; @@ -62,7 +62,7 @@ class Api { return result.toLowerCase(); } - static String _snakeCasetoLowerCamelCase(String data) { + static String _snakeCaseToLowerCamelCase(String data) { List sentence = data.split('_'); sentence.removeWhere((element) => element.isEmpty); String result = ''; @@ -128,14 +128,14 @@ class Api { await callback( _parseKeys( data: responseData, - changeKeys: _snakeCasetoLowerCamelCase, + changeKeys: _snakeCaseToLowerCamelCase, ), response, ); } return { - 'data': _parseKeys(data: responseData, changeKeys: _snakeCasetoLowerCamelCase), + 'data': _parseKeys(data: responseData, changeKeys: _snakeCaseToLowerCamelCase), 'response': response }; } catch (error) { @@ -208,15 +208,10 @@ class Api { } } - static Future init() async { - bool envControllerExists = getx.Get.isRegistered(); - if (!envControllerExists) { - throw Exception('envController does not exist in app'); - } - // get env controller and set variable showEnvAndVersionTag - _envController = getx.Get.find(); - _apiBaseUrl = _envController.config.apiUrl; - if (_envController.config.enableApiLogs) { + static void init() { + // get env controller to get variable apiUrl + _config = EnvironmentConfig.getEnvConfig(); + if (_config.enableApiLogs) { _dio.interceptors.add( LogInterceptor( responseBody: true, @@ -238,8 +233,8 @@ class Api { }) async { Response? response; final Options options = await _getOptions(); - options.sendTimeout = customTimeoutLimit ?? _envController.config.timeoutLimit; - options.receiveTimeout = customTimeoutLimit ?? _envController.config.timeoutLimit; + options.sendTimeout = customTimeoutLimit ?? _config.timeoutLimit; + options.receiveTimeout = customTimeoutLimit ?? _config.timeoutLimit; if (headers != null && headers.isNotEmpty) { if (options.headers != null) { for (Map element in headers) { @@ -307,9 +302,8 @@ class Api { default: if (showAlert) { if (alertType == 'dialog') { - // ignore: unnecessary_null_comparison - if (Helpers.showErrorDialog != null) { - await Helpers.showErrorDialog( + if (Alerts.showErrorDialog != null) { + await Alerts.showErrorDialog!( title: 'Error', content: ['Invalid request type!'], hint: "get, post, put, patch, delete request types are allowed.", @@ -323,9 +317,8 @@ class Api { ); break; } else { - // ignore: unnecessary_null_comparison - if (Helpers.showErrorToast != null) { - await Helpers.showErrorToast(content: 'Invalid request type!'); + if (Alerts.showErrorToast != null) { + await Alerts.showErrorToast!(content: 'Invalid request type!'); break; } _showToast( @@ -364,9 +357,8 @@ class Api { } if (showAlert) { if (alertType == 'dialog') { - // ignore: unnecessary_null_comparison - if (Helpers.showSuccessDialog != null) { - await Helpers.showSuccessDialog( + if (Alerts.showSuccessDialog != null) { + await Alerts.showSuccessDialog!( title: 'Success', content: responseMessages, hint: responseHint, @@ -379,9 +371,8 @@ class Api { ); } } else { - // ignore: unnecessary_null_comparison - if (Helpers.showSuccessToast != null) { - await Helpers.showSuccessToast( + if (Alerts.showSuccessToast != null) { + await Alerts.showSuccessToast!( content: responseMessages?.join('\n') ?? 'Successful', ); } else { @@ -408,9 +399,8 @@ class Api { Console.danger(error.toString()); if (showAlert) { if (alertType == 'dialog') { - // ignore: unnecessary_null_comparison - if (Helpers.showErrorDialog != null) { - await Helpers.showErrorDialog( + if (Alerts.showErrorDialog != null) { + await Alerts.showErrorDialog!( title: 'Error', content: ['Check your internet connection!'], ); @@ -421,9 +411,8 @@ class Api { content: ['Check your internet connection!'], ); } else { - // ignore: unnecessary_null_comparison - if (Helpers.showErrorToast != null) { - await Helpers.showErrorToast( + if (Alerts.showErrorToast != null) { + await Alerts.showErrorToast!( content: 'ERR: Check your internet connection!', ); return; @@ -501,13 +490,11 @@ class Api { } if (errorCode == 'unauthorized') { Console.danger('Error type: unauthorized'); - Helpers.logout(); } if (showAlert) { if (alertType == 'dialog') { - // ignore: unnecessary_null_comparison - if (Helpers.showErrorDialog != null) { - await Helpers.showErrorDialog( + if (Alerts.showErrorDialog != null) { + await Alerts.showErrorDialog!( title: 'Error', content: errors, hint: debug, @@ -521,9 +508,8 @@ class Api { hint: debug, ); } else { - // ignore: unnecessary_null_comparison - if (Helpers.showErrorToast != null) { - await Helpers.showErrorToast( + if (Alerts.showErrorToast != null) { + await Alerts.showErrorToast!( content: errors.isEmpty ? 'Error' : 'ERR: ${errors.join('\n')}', ); return; diff --git a/lib/vaahextendflutter/widgets/debug.dart b/lib/vaahextendflutter/widgets/debug.dart index c2f2e2ea..caa641ea 100644 --- a/lib/vaahextendflutter/widgets/debug.dart +++ b/lib/vaahextendflutter/widgets/debug.dart @@ -8,14 +8,13 @@ // ***************************************** import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import '../../env.dart'; +import '../env.dart'; import '../helpers/constants.dart'; import '../helpers/styles.dart'; const double constHandleWidth = 180.0; // tag handle width -const double constHandleHeight = 28.0; // tag handle height +const double constHandleHeight = 38.0; // tag handle height @immutable class DebugWidget extends StatefulWidget { @@ -36,28 +35,22 @@ class DebugWidget extends StatefulWidget { } } -class DebugWidgetState extends State - with SingleTickerProviderStateMixin { +class DebugWidgetState extends State with SingleTickerProviderStateMixin { final _drawerKey = GlobalKey(); final _focusScopeNode = FocusScopeNode(); final _handleHeight = constHandleHeight; late AnimationController _controller; - // To determine whether to show tag or not deending on env variable - EnvController? envController; - bool showEnvAndVersionTag = false; + // To determine whether to show tag or not depending on env variable + late EnvironmentConfig _environmentConfig; + bool showDebugPanel = false; @override void initState() { super.initState(); - // check if envController Exists in app or not - bool envControllerExists = Get.isRegistered(); - if (envControllerExists) { - // get env controller and set variable showEnvAndVersionTag - envController = Get.find(); - showEnvAndVersionTag = - envController?.config.showEnvAndVersionTag ?? false; - } + // get env controller and set variable showDebugPanel + _environmentConfig = EnvironmentConfig.getEnvConfig(); + showDebugPanel = _environmentConfig.showDebugPanel; // initialise AnimationController _controller = AnimationController( duration: duration250milli, @@ -92,7 +85,7 @@ class DebugWidgetState extends State @override Widget build(BuildContext context) { - return showEnvAndVersionTag + return showDebugPanel ? LayoutBuilder( builder: (BuildContext context, BoxConstraints constraints) { final height = constraints.maxHeight; @@ -113,8 +106,7 @@ class DebugWidgetState extends State return; } if (details.primaryVelocity!.abs() >= 365.0) { - final visualVelocity = - -details.primaryVelocity! / height; + final visualVelocity = -details.primaryVelocity! / height; _controller.fling(velocity: visualVelocity); } else if (_controller.value < 0.5) { close(); @@ -152,58 +144,57 @@ class DebugWidgetState extends State child: _EnvPanel( handleHeight: _handleHeight, onHandlePressed: toggle, - config: envController!.config, + config: _environmentConfig, child: Builder( builder: (BuildContext context) { return ListView( primary: false, padding: EdgeInsets.only( - top: - MediaQuery.of(context).padding.top + - defaultPadding + - _handleHeight, + top: MediaQuery.of(context).padding.top + + defaultPadding + + _handleHeight, bottom: defaultPadding, left: defaultPadding, right: defaultPadding, ), children: [ SelectableText( - envController!.config.envType, + _environmentConfig.envType, style: TextStyles.regular3, ), verticalMargin4, SelectableText( - 'Version: ${envController!.config.version}', + 'Version: ${_environmentConfig.version}', style: TextStyles.regular3, ), verticalMargin4, SelectableText( - 'Build: ${envController!.config.build}', + 'Build: ${_environmentConfig.build}', style: TextStyles.regular3, ), verticalMargin16, SelectableText( - 'Backend URL: ${envController!.config.backendUrl}', + 'Backend URL: ${_environmentConfig.backendUrl}', style: TextStyles.regular3, ), verticalMargin8, SelectableText( - 'API URL: ${envController!.config.apiUrl}', + 'API URL: ${_environmentConfig.apiUrl}', style: TextStyles.regular3, ), verticalMargin8, SelectableText( - 'Firebase Id: ${envController!.config.firebaseId}', + 'Firebase Id: ${_environmentConfig.firebaseId}', style: TextStyles.regular3, ), verticalMargin8, SelectableText( - 'Console Logs Enabled: ${envController!.config.enableConsoleLogs}', + 'Console Logs Enabled: ${_environmentConfig.enableConsoleLogs}', style: TextStyles.regular3, ), verticalMargin8, SelectableText( - 'Local Logs Enabled: ${envController!.config.enableLocalLogs}', + 'Local Logs Enabled: ${_environmentConfig.enableLocalLogs}', style: TextStyles.regular3, ), verticalMargin8, @@ -245,14 +236,14 @@ class _EnvPanel extends StatelessWidget { Widget build(BuildContext context) { return Theme( data: ThemeData( - primaryColor: config.envAndVersionTagColor, + primaryColor: config.debugPanelColor, colorScheme: ColorScheme.fromSwatch( - accentColor: config.envAndVersionTagColor, + accentColor: config.debugPanelColor, brightness: Brightness.dark, ), ), child: Material( - color: config.envAndVersionTagColor, + color: config.debugPanelColor, clipBehavior: Clip.antiAlias, shape: const _PanelBorder(), child: Stack( @@ -281,10 +272,7 @@ class _EnvPanel extends StatelessWidget { height: handleHeight, child: FittedBox( child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 10, - vertical: 2, - ), + padding: const EdgeInsets.only(left: 10, right: 10, bottom: 10, top: 10), child: Text( '${config.envType} ${config.version}+${config.build}', ), @@ -306,8 +294,8 @@ class _PanelBorder extends ShapeBorder { const _PanelBorder(); static const double handleWidth = constHandleWidth; - static const double handleHeight = constHandleHeight + - 4; // if you want a small width line visible with tag remove + 4 + static const double handleHeight = + constHandleHeight + 4; // if you want a small width line visible with tag remove + 4 @override EdgeInsetsGeometry get dimensions => EdgeInsets.zero; @@ -325,8 +313,8 @@ class _PanelBorder extends ShapeBorder { const borderRadius = BorderRadius.all(Radius.circular(handleHeight / 2)); final width = ((rect.width - handleWidth) / 2); - final leftend = rect.left + width; - final rightend = rect.right - width; + final leftEnd = rect.left + width; + final rightEnd = rect.right - width; return Path.combine( PathOperation.union, Path.combine( @@ -341,7 +329,7 @@ class _PanelBorder extends ShapeBorder { Rect.fromLTRB( rect.left - handleWidth, -handleHeight, - leftend, + leftEnd, handleHeight - 4.0, ), ), @@ -349,7 +337,7 @@ class _PanelBorder extends ShapeBorder { ..addRRect( borderRadius.toRRect( Rect.fromLTRB( - rightend, + rightEnd, -handleHeight, rect.right + handleHeight, handleHeight - 4.0, @@ -358,7 +346,7 @@ class _PanelBorder extends ShapeBorder { ) ..addRect( Rect.fromLTWH( - leftend, + leftEnd, 0, handleWidth, handleHeight / 2, @@ -369,7 +357,7 @@ class _PanelBorder extends ShapeBorder { ..addRRect( borderRadius.toRRect( Rect.fromLTWH( - leftend, + leftEnd, 0, handleWidth, handleHeight, diff --git a/lib/view/pages/home.dart b/lib/views/pages/home.dart similarity index 71% rename from lib/view/pages/home.dart rename to lib/views/pages/home.dart index d5d561d5..8b14eb0e 100644 --- a/lib/view/pages/home.dart +++ b/lib/views/pages/home.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:team/vaahextendflutter/base/base_stateful.dart'; +import 'package:team/views/pages/ui/index.dart'; class HomePage extends StatefulWidget { static const String routePath = '/home'; @@ -23,7 +24,14 @@ class _HomePageState extends BaseStateful { super.build(context); return Scaffold( appBar: AppBar(), - body: const Center(child: Text('WebReinvent')), + body: Center( + child: ElevatedButton( + onPressed: () { + Navigator.push(context, UIPage.route()); + }, + child: const Text('WebReinvent'), + ), + ), ); } } diff --git a/lib/view/pages/not_found.dart b/lib/views/pages/not_found.dart similarity index 100% rename from lib/view/pages/not_found.dart rename to lib/views/pages/not_found.dart diff --git a/lib/view/pages/permission_denied.dart b/lib/views/pages/permission_denied.dart similarity index 100% rename from lib/view/pages/permission_denied.dart rename to lib/views/pages/permission_denied.dart diff --git a/lib/views/pages/ui/index.dart b/lib/views/pages/ui/index.dart new file mode 100644 index 00000000..16158beb --- /dev/null +++ b/lib/views/pages/ui/index.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:team/vaahextendflutter/app_theme.dart'; +import 'package:team/vaahextendflutter/base/base_stateful.dart'; +import 'package:team/vaahextendflutter/helpers/constants.dart'; + +class UIPage extends StatefulWidget { + static const String routePath = '/ui-page'; + + static Route route() { + return MaterialPageRoute( + settings: const RouteSettings(name: routePath), + builder: (_) => const UIPage(), + ); + } + + const UIPage({super.key}); + + @override + State createState() => _UIPageState(); +} + +class _UIPageState extends BaseStateful { + @override + Widget build(BuildContext context) { + super.build(context); + return Scaffold( + backgroundColor: AppTheme.colors['black']?.shade100, + appBar: AppBar( + title: const Text('UI Page'), + ), + body: Padding( + padding: horizontalPadding24, + child: SingleChildScrollView( + physics: const BouncingScrollPhysics(), + child: Column( + mainAxisSize: MainAxisSize.min, + children: const [], + ), + ), + ), + ); + } +}