From 80d424f114b665c301f561c5aa4b69ff8f32027f Mon Sep 17 00:00:00 2001 From: Mohammad Salameh Date: Mon, 15 Apr 2024 12:03:25 +0300 Subject: [PATCH] Refactor code for consistency and readability - Removed unused imports and commented-out code - Updated class inheritance for AuthState subclasses - Reorganized code structure for better readability - Cleaned up debug print statements and replaced with dart:developer logs --- .../app_layout/view/widgets/app_body.dart | 34 +++---- .../view/widgets/default_nav_bar.dart | 2 - lib/features/auth/bloc/auth_state.dart | 36 +++++--- .../auth/view/widgets/login/login_view.dart | 6 +- .../widgets/ACs/ac_interface_temp_unit.dart | 1 - .../widgets/smart_door/door_interface.dart | 92 +++++++++++++++++++ .../shared_widgets/custom_switch.dart | 24 ++--- lib/services/api/authentication_api.dart | 2 +- lib/services/api/devices_api.dart | 1 + lib/services/api/http_service.dart | 32 +++---- lib/services/api/my_http_overrides.dart | 3 +- lib/utils/helpers/misc_string_helpers.dart | 5 +- lib/utils/resource_manager/theme_manager.dart | 1 - 13 files changed, 162 insertions(+), 77 deletions(-) create mode 100644 lib/features/devices/view/widgets/smart_door/door_interface.dart diff --git a/lib/features/app_layout/view/widgets/app_body.dart b/lib/features/app_layout/view/widgets/app_body.dart index 8e3fa72..cc1b9dc 100644 --- a/lib/features/app_layout/view/widgets/app_body.dart +++ b/lib/features/app_layout/view/widgets/app_body.dart @@ -12,7 +12,16 @@ class AppBody extends StatelessWidget { @override Widget build(BuildContext context) { - return BlocBuilder( + return BlocConsumer( + listener: (context, state) { + if (state is GetSpacesError) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(state.errMessage), + ), + ); + } + }, builder: (context, state) { return Container( width: MediaQuery.sizeOf(context).width, @@ -26,24 +35,11 @@ class AppBody extends StatelessWidget { opacity: 0.4, ), ), - child: BlocConsumer( - listener: (context, state) { - if (state is GetSpacesError) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(state.errMessage), - ), - ); - } - }, - builder: (context, state) { - return state is! GetSpacesLoading - ? state is! GetSpaceRoomsLoading - ? HomeCubit.getInstance().pages[HomeCubit.pageIndex] - : const Center(child: CircularProgressIndicator()) - : const Center(child: CircularProgressIndicator()); - }, - ), + child: state is! GetSpacesLoading + ? state is! GetSpaceRoomsLoading + ? HomeCubit.getInstance().pages[HomeCubit.pageIndex] + : const Center(child: CircularProgressIndicator()) + : const Center(child: CircularProgressIndicator()), ); }, ); diff --git a/lib/features/app_layout/view/widgets/default_nav_bar.dart b/lib/features/app_layout/view/widgets/default_nav_bar.dart index c5140b1..178faa5 100644 --- a/lib/features/app_layout/view/widgets/default_nav_bar.dart +++ b/lib/features/app_layout/view/widgets/default_nav_bar.dart @@ -2,8 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart'; -import 'package:syncrow_app/features/devices/bloc/devices_cubit.dart'; -import 'package:syncrow_app/generated/assets.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; import 'package:syncrow_app/utils/resource_manager/constants.dart'; diff --git a/lib/features/auth/bloc/auth_state.dart b/lib/features/auth/bloc/auth_state.dart index e84791f..38c7180 100644 --- a/lib/features/auth/bloc/auth_state.dart +++ b/lib/features/auth/bloc/auth_state.dart @@ -4,30 +4,44 @@ abstract class AuthState {} class AuthInitial extends AuthState {} +//base states class AuthLoading extends AuthState {} class AuthError extends AuthState { final String message; - - AuthError(this.message) { - debugPrint(message); - } + String? code; + AuthError({required this.message, this.code}); } class AuthSuccess extends AuthState {} -class AuthLoggedOut extends AuthState {} +//user log states +class AuthLoginLoading extends AuthLoading {} +class AuthLoginSuccess extends AuthSuccess {} + +class AuthLoginError extends AuthError { + AuthLoginError({required super.message, super.code}); +} + +class AuthLogoutLoading extends AuthLoading {} + +class AuthLogoutSuccess extends AuthSuccess {} + +class AuthLogoutError extends AuthError { + AuthLogoutError({required super.message, super.code}); +} + +// UI states class AuthPasswordVisibilityChanged extends AuthState {} class AuthAgreeToTermsChanged extends AuthState {} -class AuthTokenLoading extends AuthState {} +//token states +class AuthTokenLoading extends AuthLoading {} -class AuthTokenSuccess extends AuthState {} +class AuthTokenSuccess extends AuthSuccess {} -class AuthTokenError extends AuthState { - final String message; - - AuthTokenError(this.message); +class AuthTokenError extends AuthError { + AuthTokenError({required super.message, super.code}); } diff --git a/lib/features/auth/view/widgets/login/login_view.dart b/lib/features/auth/view/widgets/login/login_view.dart index 06713c2..ca0e61d 100644 --- a/lib/features/auth/view/widgets/login/login_view.dart +++ b/lib/features/auth/view/widgets/login/login_view.dart @@ -18,8 +18,6 @@ class LoginView extends StatelessWidget { @override Widget build(BuildContext context) { - //TODO move to strings manager - return BlocConsumer( listener: (context, state) { if (state is AuthError) { @@ -28,8 +26,8 @@ class LoginView extends StatelessWidget { content: Text(state.message), ), ); - } else if (state is AuthSuccess) { - Navigator.popAndPushNamed(context, Routes.homeRoute); + } else if (state is AuthLoginSuccess) { + Navigator.pushNamed(context, Routes.homeRoute); } }, builder: (context, state) { diff --git a/lib/features/devices/view/widgets/ACs/ac_interface_temp_unit.dart b/lib/features/devices/view/widgets/ACs/ac_interface_temp_unit.dart index dab1d71..f417936 100644 --- a/lib/features/devices/view/widgets/ACs/ac_interface_temp_unit.dart +++ b/lib/features/devices/view/widgets/ACs/ac_interface_temp_unit.dart @@ -11,7 +11,6 @@ import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dar import 'package:syncrow_app/generated/assets.dart'; import 'package:syncrow_app/utils/context_extension.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; -import 'package:syncrow_app/utils/resource_manager/constants.dart'; import 'package:syncrow_app/utils/resource_manager/font_manager.dart'; class AcInterfaceTempUnit extends StatelessWidget { diff --git a/lib/features/devices/view/widgets/smart_door/door_interface.dart b/lib/features/devices/view/widgets/smart_door/door_interface.dart new file mode 100644 index 0000000..cf2a2ff --- /dev/null +++ b/lib/features/devices/view/widgets/smart_door/door_interface.dart @@ -0,0 +1,92 @@ +// import 'package:flutter/material.dart'; +// import 'package:flutter/services.dart'; +// import 'package:flutter_svg/flutter_svg.dart'; +// import 'package:syncrow_app/features/devices/model/device_model.dart'; +// import 'package:syncrow_app/features/shared_widgets/default_container.dart'; +// import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart'; +// import 'package:syncrow_app/generated/assets.dart'; +// import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; +// import 'package:syncrow_app/utils/resource_manager/constants.dart'; +// import 'package:syncrow_app/utils/resource_manager/font_manager.dart'; + +// class DoorInterface extends StatelessWidget { +// const DoorInterface({super.key, required this.doorlock}); + +// final DeviceModel doorlock; + +// @override +// Widget build(BuildContext context) { +// return AnnotatedRegion( +// value: SystemUiOverlayStyle( +// statusBarColor: ColorsManager.primaryColor.withOpacity(0.5), +// statusBarIconBrightness: Brightness.light, +// ), +// child: SafeArea( +// child: Scaffold( +// backgroundColor: ColorsManager.backgroundColor, +// extendBodyBehindAppBar: true, +// extendBody: true, +// appBar: AppBar( +// backgroundColor: Colors.transparent, +// centerTitle: true, +// title: BodyLarge( +// text: doorlock.name ?? "", +// fontColor: ColorsManager.primaryColor, +// fontWeight: FontsManager.bold, +// ), +// ), +// body: Container( +// width: MediaQuery.sizeOf(context).width, +// height: MediaQuery.sizeOf(context).height, +// decoration: const BoxDecoration( +// image: DecorationImage( +// image: AssetImage( +// Assets.imagesBackground, +// ), +// fit: BoxFit.cover, +// opacity: 0.4, +// ), +// ), +// child: Padding( +// padding: EdgeInsets.only( +// top: Constants.appBarHeight, +// left: Constants.defaultPadding, +// right: Constants.defaultPadding, +// bottom: Constants.bottomNavBarHeight, +// ), +// child: Column( +// children: [ +// Row( +// mainAxisAlignment: MainAxisAlignment.spaceBetween, +// children: [ +// SvgPicture.asset(Assets.iconsWifi), +// SvgPicture.asset(Assets.iconsBatteryIndicator), +// ], +// ), +// SizedBox.square( +// dimension: 255, +// ), +// SizedBox( +// height: 80, +// ), +// GridView.builder( +// shrinkWrap: true, +// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( +// crossAxisCount: 2, +// mainAxisSpacing: 10, +// crossAxisSpacing: 10, +// ), +// itemBuilder: (context, index) => DefaultContainer( +// child: SizedBox.shrink(), +// width: 175, +// height: 100, +// ), +// ), +// ], +// )), +// ), +// ), +// ), +// ); +// } +// } diff --git a/lib/features/shared_widgets/custom_switch.dart b/lib/features/shared_widgets/custom_switch.dart index cdb9eab..e83a69e 100644 --- a/lib/features/shared_widgets/custom_switch.dart +++ b/lib/features/shared_widgets/custom_switch.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/devices/bloc/devices_cubit.dart'; -import 'package:syncrow_app/features/devices/model/device_category_model.dart'; import 'package:syncrow_app/features/devices/model/device_control_model.dart'; import 'package:syncrow_app/features/devices/model/device_model.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; @@ -42,13 +41,10 @@ class CustomSwitch extends StatelessWidget { width: 45.0, height: 28.0, decoration: BoxDecoration( - borderRadius: BorderRadius.circular(24.0), - color: status != null - ? status - ? ColorsManager.primaryColor - : const Color(0xFFD9D9D9) - : const Color(0xFFD9D9D9), - ), + borderRadius: BorderRadius.circular(24.0), + color: status + ? ColorsManager.primaryColor + : const Color(0xFFD9D9D9)), child: Center( child: Container( width: 40.0, @@ -60,20 +56,16 @@ class CustomSwitch extends StatelessWidget { child: Padding( padding: const EdgeInsets.all(2.0), child: Container( - alignment: status != null - ? status - ? Alignment.centerRight - : Alignment.centerLeft + alignment: status + ? Alignment.centerRight : Alignment.centerLeft, child: Container( width: 20.0, height: 20.0, decoration: BoxDecoration( shape: BoxShape.circle, - color: status != null - ? status - ? ColorsManager.primaryColor - : Colors.grey + color: status + ? ColorsManager.primaryColor : Colors.grey, ), ), diff --git a/lib/services/api/authentication_api.dart b/lib/services/api/authentication_api.dart index 70f502c..f83b99c 100644 --- a/lib/services/api/authentication_api.dart +++ b/lib/services/api/authentication_api.dart @@ -22,7 +22,7 @@ class AuthenticationAPI { body: model.toJson(), showServerMessage: false, expectedResponseModel: (json) => Token.fromJson(json['data'])); - // debugPrint("response: $response"); + // developer.log("response: $response"); return response; } catch (e) { rethrow; diff --git a/lib/services/api/devices_api.dart b/lib/services/api/devices_api.dart index c8c04c4..8968bad 100644 --- a/lib/services/api/devices_api.dart +++ b/lib/services/api/devices_api.dart @@ -10,6 +10,7 @@ class DevicesAPI { DeviceControlModel controlModel) async { // print( // 'contoling [${controlModel.deviceId}] with code [${controlModel.code}] and value [${controlModel.value}'); + final response = await _httpService.post( path: ApiEndpoints.control, body: controlModel.toJson(), diff --git a/lib/services/api/http_service.dart b/lib/services/api/http_service.dart index 9551d4a..690c11c 100644 --- a/lib/services/api/http_service.dart +++ b/lib/services/api/http_service.dart @@ -1,5 +1,5 @@ import 'package:dio/dio.dart'; -import 'package:flutter/material.dart'; +import 'dart:developer' as developer; import 'package:syncrow_app/services/api/api_links_endpoints.dart'; import 'package:syncrow_app/services/api/http_interceptor.dart'; import 'package:syncrow_app/services/locator.dart'; @@ -39,9 +39,6 @@ class HTTPService { ); return expectedResponseModel(response.data); } catch (error) { - debugPrint("******* Error"); - debugPrint(error.toString()); - debugPrint("******* Error End"); rethrow; } } @@ -60,8 +57,8 @@ class HTTPService { queryParameters: queryParameters, options: options, ); - // debugPrint("status code is ${response.statusCode}"); - // debugPrint("response data is ${response.data}"); + // developer.log("status code is ${response.statusCode}"); + // developer.log("response data is ${response.data}"); return expectedResponseModel(response.data); } catch (error) { rethrow; @@ -79,11 +76,11 @@ class HTTPService { data: body, queryParameters: queryParameters, ); - debugPrint("status code is ${response.statusCode}"); + developer.log("status code is ${response.statusCode}"); return expectedResponseModel(response.data); } catch (error) { - debugPrint("******* Error"); - debugPrint(error.toString()); + developer.log("******* Error"); + developer.log(error.toString()); rethrow; } } @@ -94,26 +91,25 @@ class HTTPService { Map? queryParameters, required T Function(dynamic) expectedResponseModel}) async { try { - debugPrint("download begins"); + developer.log("download begins"); final response = await client.download( path, savePath, onReceiveProgress: (current, total) { - debugPrint("current = $current, while total = $total"); + developer.log("current = $current, while total = $total"); }, ); - debugPrint("download ends"); + developer.log("download ends"); return expectedResponseModel(response.data); // return expectedResponseModel(response.data); } catch (error) { - debugPrint("******* Error"); - debugPrint("download error"); - debugPrint(error.toString()); + developer.log("******* Error"); + developer.log("download error"); + developer.log(error.toString()); rethrow; } } - //delete Future delete({ required String path, Map? queryParameters, @@ -127,8 +123,8 @@ class HTTPService { ); return expectedResponseModel(response.data); } catch (error) { - debugPrint("******* Error"); - debugPrint(error.toString()); + developer.log("******* Error"); + developer.log(error.toString()); rethrow; } } diff --git a/lib/services/api/my_http_overrides.dart b/lib/services/api/my_http_overrides.dart index 512523c..3707be3 100644 --- a/lib/services/api/my_http_overrides.dart +++ b/lib/services/api/my_http_overrides.dart @@ -5,6 +5,7 @@ class MyHttpOverrides extends HttpOverrides { @override HttpClient createHttpClient(SecurityContext? context) { return super.createHttpClient(context) - ..badCertificateCallback = (X509Certificate cert, String host, int port) => true; + ..badCertificateCallback = + (X509Certificate cert, String host, int port) => true; } } diff --git a/lib/utils/helpers/misc_string_helpers.dart b/lib/utils/helpers/misc_string_helpers.dart index 030515a..0b9a2c5 100644 --- a/lib/utils/helpers/misc_string_helpers.dart +++ b/lib/utils/helpers/misc_string_helpers.dart @@ -1,13 +1,12 @@ +import 'dart:developer' as developer; import 'dart:io'; -import 'package:flutter/material.dart'; - class StringHelpers { // TODO ( to Mohammad Salameh): convert this to extension method static String enhanceFileName(File file) { var fileName = " "; final filePath = file.path; - debugPrint(filePath); + developer.log(filePath); final fileStringArray = filePath.split("/"); fileName = fileStringArray.last; if (fileName.length > 20) { diff --git a/lib/utils/resource_manager/theme_manager.dart b/lib/utils/resource_manager/theme_manager.dart index 56cd784..fdde064 100644 --- a/lib/utils/resource_manager/theme_manager.dart +++ b/lib/utils/resource_manager/theme_manager.dart @@ -207,7 +207,6 @@ abstract class ThemeManager { ), ///card theme - //TODO edit card theme cardTheme: const CardTheme( elevation: 0, shape: RoundedRectangleBorder(