From a9fdb2fc768c9bacdc7b91917235cc1fe78d9a9b Mon Sep 17 00:00:00 2001 From: Mohammad Salameh Date: Tue, 5 Mar 2024 11:18:08 +0300 Subject: [PATCH] modified UI padding handling approach added auth API endpoints initialized curtains view for further development --- lib/features/app_layout/view/app_layout.dart | 8 +- .../app_layout/view/widgets/app_body.dart | 6 +- .../view/widgets/default_app_bar.dart | 7 +- .../view/widgets/default_nav_bar.dart | 5 +- .../dashboard/view/dashboard_view.dart | 67 +++--- lib/features/devices/bloc/ac/ac_cubit.dart | 6 +- lib/features/devices/view/devices_view.dart | 6 +- .../view/widgets/ACs/ac_interface.dart | 8 +- .../widgets/ACs/ac_interface_controls.dart | 5 +- .../widgets/ACs/ac_interface_temp_unit.dart | 27 ++- .../widgets/ACs/ac_mode_control_unit.dart | 4 +- .../devices/view/widgets/ACs/acs_view.dart | 12 +- .../view/widgets/devices_categories_view.dart | 58 ++--- .../view/widgets/devices_view_body.dart | 203 ++++++++++-------- .../view/widgets/lights/lights_view.dart | 4 +- .../view/widgets/lights/lights_view_list.dart | 7 +- .../devices/view/widgets/switches.dart | 1 + lib/features/menu/view/menu_view.dart | 29 ++- lib/features/scene/view/scene_view.dart | 183 ++++++++-------- lib/my_app.dart | 5 + lib/services/api/api_links_endpoints.dart | 11 + lib/services/api/http_service.dart | 8 +- lib/utils/resource_manager/color_manager.dart | 1 + lib/utils/resource_manager/constants.dart | 7 + 24 files changed, 380 insertions(+), 298 deletions(-) diff --git a/lib/features/app_layout/view/app_layout.dart b/lib/features/app_layout/view/app_layout.dart index 39605f8..ac465f4 100644 --- a/lib/features/app_layout/view/app_layout.dart +++ b/lib/features/app_layout/view/app_layout.dart @@ -19,14 +19,14 @@ class AppLayout extends StatelessWidget { statusBarColor: ColorsManager.primaryColor.withOpacity(0.5), statusBarIconBrightness: Brightness.light, ), - child: const SafeArea( + child: SafeArea( child: Scaffold( backgroundColor: ColorsManager.backgroundColor, extendBodyBehindAppBar: true, extendBody: true, - appBar: DefaultAppBar(), - body: AppBody(), - bottomNavigationBar: DefaultNavBar(), + appBar: DefaultAppBar(context), + body: const AppBody(), + bottomNavigationBar: const DefaultNavBar(), ), ), ); diff --git a/lib/features/app_layout/view/widgets/app_body.dart b/lib/features/app_layout/view/widgets/app_body.dart index 0e13d7d..3456f4d 100644 --- a/lib/features/app_layout/view/widgets/app_body.dart +++ b/lib/features/app_layout/view/widgets/app_body.dart @@ -25,11 +25,7 @@ class AppBody extends StatelessWidget { opacity: 0.4, ), ), - child: Padding( - padding: - const EdgeInsets.only(top: 60, right: 15, left: 15, bottom: 80), - child: NavCubit.of(context).currentPage, - ), + child: NavCubit.of(context).currentPage, ); }, ); diff --git a/lib/features/app_layout/view/widgets/default_app_bar.dart b/lib/features/app_layout/view/widgets/default_app_bar.dart index 0118385..5bbf30a 100644 --- a/lib/features/app_layout/view/widgets/default_app_bar.dart +++ b/lib/features/app_layout/view/widgets/default_app_bar.dart @@ -2,9 +2,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/app_layout/bloc/nav_cubit.dart'; import 'package:syncrow_app/features/app_layout/view/widgets/app_bar_home_dropdown.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget { - const DefaultAppBar({super.key}); + const DefaultAppBar(this.context, {super.key}); + + final BuildContext context; @override Widget build(BuildContext context) { @@ -34,5 +37,5 @@ class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget { } @override - Size get preferredSize => const Size.fromHeight(100); + Size get preferredSize => Size.fromHeight(Constants.appBarHeight); } 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 d42d38b..18654cc 100644 --- a/lib/features/app_layout/view/widgets/default_nav_bar.dart +++ b/lib/features/app_layout/view/widgets/default_nav_bar.dart @@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/app_layout/bloc/nav_cubit.dart'; import 'package:syncrow_app/features/devices/bloc/devices_cubit.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; class DefaultNavBar extends StatelessWidget { const DefaultNavBar({ @@ -14,8 +15,8 @@ class DefaultNavBar extends StatelessWidget { return BlocBuilder( builder: (context, state) { var cubit = NavCubit.of(context); - return Padding( - padding: const EdgeInsets.only(bottom: 27), + return SizedBox( + height: Constants.bottomNavBarHeight, child: BottomNavigationBar( backgroundColor: Colors.transparent, onTap: (int index) { diff --git a/lib/features/dashboard/view/dashboard_view.dart b/lib/features/dashboard/view/dashboard_view.dart index 1a20482..9977200 100644 --- a/lib/features/dashboard/view/dashboard_view.dart +++ b/lib/features/dashboard/view/dashboard_view.dart @@ -5,6 +5,7 @@ import 'package:syncrow_app/features/dashboard/view/widgets/carbon_emission.dart import 'package:syncrow_app/features/dashboard/view/widgets/consumption.dart'; import 'package:syncrow_app/features/dashboard/view/widgets/live_monitor_tab.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/title_medium.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; import 'package:syncrow_app/utils/resource_manager/strings_manager.dart'; import 'widgets/energy_usage.dart'; @@ -14,37 +15,45 @@ class DashboardView extends StatelessWidget { @override Widget build(BuildContext context) { - return SingleChildScrollView( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - const TitleMedium( - text: StringsManager.dashboard, - style: TextStyle( - fontSize: 32, - fontWeight: FontWeight.bold, + return Padding( + padding: EdgeInsets.only( + top: Constants.appBarHeight, + left: Constants.defaultPadding, + right: Constants.defaultPadding, + bottom: Constants.bottomNavBarHeight, + ), + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const TitleMedium( + text: StringsManager.dashboard, + style: TextStyle( + fontSize: 32, + fontWeight: FontWeight.bold, + ), ), - ), - const LiveMonitorTab(), - const SizedBox(height: 10), - const EnergyUsage(), - Container( - padding: const EdgeInsets.only(top: 20), - constraints: const BoxConstraints( - minHeight: 220, - maxHeight: 240, + const LiveMonitorTab(), + const SizedBox(height: 10), + const EnergyUsage(), + Container( + padding: const EdgeInsets.only(top: 20), + constraints: const BoxConstraints( + minHeight: 220, + maxHeight: 240, + ), + child: const Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Consumption(), + SizedBox(height: 20), + CarbonEmission(), + ], + ), ), - child: const Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Consumption(), - SizedBox(height: 20), - CarbonEmission(), - ], - ), - ), - ], + ], + ), ), ); } diff --git a/lib/features/devices/bloc/ac/ac_cubit.dart b/lib/features/devices/bloc/ac/ac_cubit.dart index 699e12f..e35be05 100644 --- a/lib/features/devices/bloc/ac/ac_cubit.dart +++ b/lib/features/devices/bloc/ac/ac_cubit.dart @@ -23,7 +23,11 @@ class AcCubit extends Cubit { void setTempToAll(double temperature) { for (DeviceModel ac in DevicesCubit.categories[0].devices) { if (ac is ACModel) { - setACTemp(ac, temperature); + if (ac.temperature != temperature && + ac.bounds.min <= temperature && + temperature <= ac.bounds.max) { + setACTemp(ac, temperature); + } } } universalACTemp = temperature; diff --git a/lib/features/devices/view/devices_view.dart b/lib/features/devices/view/devices_view.dart index e07b786..00f315d 100644 --- a/lib/features/devices/view/devices_view.dart +++ b/lib/features/devices/view/devices_view.dart @@ -11,11 +11,7 @@ class CategoriesView extends StatelessWidget { return BlocProvider( create: (context) => DevicesCubit(), child: BlocBuilder( - builder: (context, state) => Container( - padding: const EdgeInsets.all(8), - width: MediaQuery.sizeOf(context).width, - height: MediaQuery.sizeOf(context).height, - child: const DevicesViewBody()), + builder: (context, state) => const DevicesViewBody(), ), ); } diff --git a/lib/features/devices/view/widgets/ACs/ac_interface.dart b/lib/features/devices/view/widgets/ACs/ac_interface.dart index 7e180dc..4f92f77 100644 --- a/lib/features/devices/view/widgets/ACs/ac_interface.dart +++ b/lib/features/devices/view/widgets/ACs/ac_interface.dart @@ -16,18 +16,20 @@ class AcInterface extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - const SizedBox(height: 20), ConstrainedBox( constraints: const BoxConstraints( - maxHeight: 400, + maxHeight: 380, ), child: AcInterfaceTempUnit( acModel: acModel, ), ), + const SizedBox( + height: 10, + ), ConstrainedBox( constraints: const BoxConstraints( - maxHeight: 130, + maxHeight: 120, ), child: AcInterfaceControls( acModel: acModel, diff --git a/lib/features/devices/view/widgets/ACs/ac_interface_controls.dart b/lib/features/devices/view/widgets/ACs/ac_interface_controls.dart index 9403e1f..0d7e11c 100644 --- a/lib/features/devices/view/widgets/ACs/ac_interface_controls.dart +++ b/lib/features/devices/view/widgets/ACs/ac_interface_controls.dart @@ -18,12 +18,11 @@ class AcInterfaceControls extends StatelessWidget { Widget build(BuildContext context) { return Column( children: [ - const SizedBox(height: 10), ACModeControlUnit(model: acModel), const SizedBox(height: 10), Row( children: [ - Expanded( + Flexible( child: InkWell( onTap: () {}, child: DefaultContainer( @@ -35,7 +34,7 @@ class AcInterfaceControls extends StatelessWidget { ), ), const SizedBox(width: 10), - Expanded( + Flexible( child: InkWell( onTap: () {}, child: DefaultContainer( 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 0b6887d..57d4110 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 @@ -23,8 +23,6 @@ class AcInterfaceTempUnit extends StatelessWidget { @override Widget build(BuildContext context) { - //TODO: use the coolTo value from the model - double coolTo = acModel.temperature; return BlocBuilder( builder: (context, state) { return DefaultContainer( @@ -48,6 +46,7 @@ class AcInterfaceTempUnit extends StatelessWidget { dotColor: Colors.transparent, ), infoProperties: InfoProperties( + //TODO: move to strings manager bottomLabelText: 'CURRENT TEMP', bottomLabelStyle: context.bodyLarge.copyWith( color: Colors.grey, @@ -71,17 +70,15 @@ class AcInterfaceTempUnit extends StatelessWidget { ), ), ), - min: 20, - max: 30, - initialValue: 20, + min: acModel.bounds.min, + max: acModel.bounds.max, + initialValue: acModel.temperature, onChange: (value) { String valueAsString = value.toStringAsFixed(1); if (valueAsString.endsWith(".0") || valueAsString.endsWith(".5")) { value = double.parse(valueAsString); - if (value != acModel.temperature) { - AcCubit.get(context).setTempToAll(value); - } + AcCubit.get(context).setTempToAll(value); } }, ), @@ -96,9 +93,9 @@ class AcInterfaceTempUnit extends StatelessWidget { dimension: 24, child: InkWell( onTap: () { - // AcCubit.get(context).setACTemp(acModel, coolTo - .5); - AcCubit.get(context).setACTemp(acModel, coolTo); - coolTo = coolTo - .5; + AcCubit.get(context) + .setACTemp(acModel, acModel.coolTo); + acModel.coolTo -= .5; }, child: SvgPicture.asset( Assets.iconsMinus, @@ -108,7 +105,7 @@ class AcInterfaceTempUnit extends StatelessWidget { Column( children: [ BodyLarge( - text: "$coolTo° C", + text: "${acModel.coolTo}° C", style: context.bodyLarge.copyWith( color: ColorsManager.primaryColor.withOpacity(0.6), @@ -126,9 +123,9 @@ class AcInterfaceTempUnit extends StatelessWidget { dimension: 24, child: InkWell( onTap: () { - // AcCubit.get(context).setACTemp(acModel, coolTo + .5); - AcCubit.get(context).setACTemp(acModel, coolTo); - coolTo = coolTo + .5; + AcCubit.get(context) + .setACTemp(acModel, acModel.coolTo); + acModel.coolTo += .5; }, child: SvgPicture.asset( Assets.iconsPlus, diff --git a/lib/features/devices/view/widgets/ACs/ac_mode_control_unit.dart b/lib/features/devices/view/widgets/ACs/ac_mode_control_unit.dart index 08d5328..aa19f2f 100644 --- a/lib/features/devices/view/widgets/ACs/ac_mode_control_unit.dart +++ b/lib/features/devices/view/widgets/ACs/ac_mode_control_unit.dart @@ -36,7 +36,7 @@ class _ACModeControlUnitState extends State { //TODO Move the fanSpeeds and tempModes to the Cubit return Row( children: [ - Expanded( + Flexible( child: InkWell( onTap: () { setState(() { @@ -53,7 +53,7 @@ class _ACModeControlUnitState extends State { ), ), const SizedBox(width: 10), - Expanded( + Flexible( child: InkWell( onTap: () { setState(() { diff --git a/lib/features/devices/view/widgets/ACs/acs_view.dart b/lib/features/devices/view/widgets/ACs/acs_view.dart index 05ad689..517fb7a 100644 --- a/lib/features/devices/view/widgets/ACs/acs_view.dart +++ b/lib/features/devices/view/widgets/ACs/acs_view.dart @@ -2,12 +2,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/app_layout/view/widgets/default_app_bar.dart'; -import 'package:syncrow_app/features/app_layout/view/widgets/default_nav_bar.dart'; import 'package:syncrow_app/features/devices/bloc/AC/ac_cubit.dart'; import 'package:syncrow_app/features/devices/bloc/devices_cubit.dart'; import 'package:syncrow_app/features/devices/model/ac_model.dart'; import 'package:syncrow_app/features/devices/view/widgets/ACs/ac_interface.dart'; import 'package:syncrow_app/features/devices/view/widgets/ACs/acs_list.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; import '../../../../../generated/assets.dart'; import '../../../../../utils/resource_manager/color_manager.dart'; @@ -38,7 +38,7 @@ class ACsView extends StatelessWidget { backgroundColor: ColorsManager.backgroundColor, extendBodyBehindAppBar: true, extendBody: true, - appBar: const DefaultAppBar(), + appBar: DefaultAppBar(context), body: Container( width: MediaQuery.sizeOf(context).width, height: MediaQuery.sizeOf(context).height, @@ -52,8 +52,11 @@ class ACsView extends StatelessWidget { ), ), child: Padding( - padding: const EdgeInsets.only( - top: 60, right: 15, left: 15, bottom: 80), + padding: EdgeInsets.only( + top: Constants.appBarHeight, + left: Constants.defaultPadding, + right: Constants.defaultPadding, + ), child: SizedBox.expand( child: selectedAC != null ? AcInterface(acModel: selectedAC) @@ -61,7 +64,6 @@ class ACsView extends StatelessWidget { ), ), ), - bottomNavigationBar: const DefaultNavBar(), ), ), ); diff --git a/lib/features/devices/view/widgets/devices_categories_view.dart b/lib/features/devices/view/widgets/devices_categories_view.dart index 580f78c..7c5f697 100644 --- a/lib/features/devices/view/widgets/devices_categories_view.dart +++ b/lib/features/devices/view/widgets/devices_categories_view.dart @@ -4,6 +4,7 @@ import 'package:flutter/widgets.dart'; import 'package:syncrow_app/features/devices/view/widgets/devices_mode_tab.dart'; import 'package:syncrow_app/features/devices/view/widgets/switches.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/title_medium.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; import 'package:syncrow_app/utils/resource_manager/strings_manager.dart'; class DevicesCategoriesView extends StatelessWidget { @@ -13,43 +14,46 @@ class DevicesCategoriesView extends StatelessWidget { @override Widget build(BuildContext context) { - return const Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 3, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TitleMedium( - text: StringsManager.devices, - style: TextStyle( - fontSize: 32, - fontWeight: FontWeight.bold, - ), - ), - DevicesModeTab(), - ], - ), - ), - Expanded( - flex: 11, - child: SingleChildScrollView( + return const Padding( + padding: EdgeInsets.symmetric(horizontal: Constants.defaultPadding), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 3, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ TitleMedium( - text: StringsManager.wizard, + text: StringsManager.devices, style: TextStyle( - fontSize: 28, + fontSize: 32, + fontWeight: FontWeight.bold, ), ), - Switches(), + DevicesModeTab(), ], ), ), - ) - ], + Expanded( + flex: 11, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TitleMedium( + text: StringsManager.wizard, + style: TextStyle( + fontSize: 28, + ), + ), + Switches(), + ], + ), + ), + ) + ], + ), ); } } diff --git a/lib/features/devices/view/widgets/devices_view_body.dart b/lib/features/devices/view/widgets/devices_view_body.dart index 8c95b93..0f26e56 100644 --- a/lib/features/devices/view/widgets/devices_view_body.dart +++ b/lib/features/devices/view/widgets/devices_view_body.dart @@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:smooth_page_indicator/smooth_page_indicator.dart'; import 'package:syncrow_app/features/devices/view/widgets/devices_categories_view.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/title_medium.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; import '../../../../utils/resource_manager/strings_manager.dart'; import '../../bloc/devices_cubit.dart'; @@ -23,106 +24,126 @@ class DevicesViewBody extends StatelessWidget { PageController pageController = PageController(); return state is DevicesLoading ? const Center(child: CircularProgressIndicator()) - : Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: PageView( - controller: pageController, - children: const [ - DevicesCategoriesView(), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TitleMedium( - text: "Home", - style: TextStyle( - fontSize: 32, - fontWeight: FontWeight.bold, + : Padding( + padding: EdgeInsets.only( + top: Constants.appBarHeight, + bottom: Constants.bottomNavBarHeight), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: PageView( + controller: pageController, + children: const [ + DevicesCategoriesView(), + Padding( + padding: EdgeInsets.symmetric( + horizontal: Constants.defaultPadding), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + TitleMedium( + text: "Home", + style: TextStyle( + fontSize: 32, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + Expanded( + flex: 3, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + TitleMedium( + text: StringsManager.wizard, + style: TextStyle( + fontSize: 28, + ), + ), + Switches(), + ], ), ), - ], - ), + ) + ], ), - Expanded( - flex: 3, - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - TitleMedium( - text: StringsManager.wizard, - style: TextStyle( - fontSize: 28, + ), + Padding( + padding: EdgeInsets.symmetric( + horizontal: Constants.defaultPadding), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + TitleMedium( + text: "Office", + style: TextStyle( + fontSize: 32, + fontWeight: FontWeight.bold, + ), ), - ), - Switches(), - ], + ], + ), ), - ), - ) - ], - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TitleMedium( - text: "Office", - style: TextStyle( - fontSize: 32, - fontWeight: FontWeight.bold, + Expanded( + flex: 3, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + TitleMedium( + text: StringsManager.wizard, + style: TextStyle( + fontSize: 28, + ), + ), + Switches(), + ], ), ), - ], - ), + ) + ], ), - Expanded( - flex: 3, - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - TitleMedium( - text: StringsManager.wizard, - style: TextStyle( - fontSize: 28, - ), - ), - Switches(), - ], - ), - ), - ) - ], - ), - ], - ), - ), - SmoothPageIndicator( - controller: pageController, - count: 3, - effect: const WormEffect( - dotHeight: 8, - dotWidth: 8, + ), + ], ), - onDotClicked: (index) { - pageController.animateToPage( - index, - duration: const Duration(milliseconds: 300), - curve: Curves.ease, - ); - }), - ], + ), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 7, + ), + child: SmoothPageIndicator( + controller: pageController, + count: 3, + effect: const WormEffect( + dotHeight: 8, + dotWidth: 8, + ), + onDotClicked: (index) { + pageController.animateToPage( + index, + duration: const Duration(milliseconds: 300), + curve: Curves.ease, + ); + }), + ), + ], + ), ); }, ), diff --git a/lib/features/devices/view/widgets/lights/lights_view.dart b/lib/features/devices/view/widgets/lights/lights_view.dart index e30df38..98832e2 100644 --- a/lib/features/devices/view/widgets/lights/lights_view.dart +++ b/lib/features/devices/view/widgets/lights/lights_view.dart @@ -6,7 +6,6 @@ import 'package:syncrow_app/features/devices/view/widgets/lights/lights_view_lis import '../../../../../generated/assets.dart'; import '../../../../../utils/resource_manager/color_manager.dart'; import '../../../../app_layout/view/widgets/default_app_bar.dart'; -import '../../../../app_layout/view/widgets/default_nav_bar.dart'; import '../../../bloc/devices_cubit.dart'; import '../../../bloc/lights/lights_cubit.dart'; import '../../../model/light_model.dart'; @@ -44,7 +43,7 @@ class LightsView extends StatelessWidget { backgroundColor: ColorsManager.backgroundColor, extendBodyBehindAppBar: true, extendBody: true, - appBar: const DefaultAppBar(), + appBar: DefaultAppBar(context), body: Container( width: MediaQuery.sizeOf(context).width, height: MediaQuery.sizeOf(context).height, @@ -61,7 +60,6 @@ class LightsView extends StatelessWidget { ? LightInterface(light: selectedLight) : LightsViewList(lights: lights), ), - bottomNavigationBar: const DefaultNavBar(), ), ), ); diff --git a/lib/features/devices/view/widgets/lights/lights_view_list.dart b/lib/features/devices/view/widgets/lights/lights_view_list.dart index 47e8daa..b834ba8 100644 --- a/lib/features/devices/view/widgets/lights/lights_view_list.dart +++ b/lib/features/devices/view/widgets/lights/lights_view_list.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:syncrow_app/features/devices/view/widgets/lights/lights_list.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; import '../../../../shared_widgets/text_widgets/body_small.dart'; import '../../../bloc/devices_cubit.dart'; @@ -17,7 +18,11 @@ class LightsViewList extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.only(top: 70, right: 15, left: 15, bottom: 80), + padding: EdgeInsets.only( + top: Constants.appBarHeight, + right: Constants.defaultPadding, + left: Constants.defaultPadding, + ), child: SizedBox.expand( child: SingleChildScrollView( child: Column( diff --git a/lib/features/devices/view/widgets/switches.dart b/lib/features/devices/view/widgets/switches.dart index a5cc2d3..9e567cd 100644 --- a/lib/features/devices/view/widgets/switches.dart +++ b/lib/features/devices/view/widgets/switches.dart @@ -68,6 +68,7 @@ class Switches extends StatelessWidget { fontWeight: FontWeight.bold, height: 0, fontSize: 24, + color: Colors.grey, ), ), ), diff --git a/lib/features/menu/view/menu_view.dart b/lib/features/menu/view/menu_view.dart index 391948f..2a491dc 100644 --- a/lib/features/menu/view/menu_view.dart +++ b/lib/features/menu/view/menu_view.dart @@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/menu/bloc/menu_cubit.dart'; import 'package:syncrow_app/features/menu/view/widgets/menu_list.dart'; import 'package:syncrow_app/features/menu/view/widgets/profile_tab.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; class MenuView extends StatelessWidget { const MenuView({super.key}); @@ -13,17 +14,25 @@ class MenuView extends StatelessWidget { create: (BuildContext context) => MenuCubit(), child: BlocBuilder( builder: (context, state) { - return SingleChildScrollView( - physics: const BouncingScrollPhysics(), - child: Column( - children: [ - const ProfileTab(), - ...MenuCubit.of(context).menuLists.map( - (list) => MenuList( - listModel: list, + return Padding( + padding: EdgeInsets.only( + top: Constants.appBarHeight, + bottom: Constants.bottomNavBarHeight, + left: Constants.defaultPadding, + right: Constants.defaultPadding, + ), + child: SingleChildScrollView( + physics: const BouncingScrollPhysics(), + child: Column( + children: [ + const ProfileTab(), + ...MenuCubit.of(context).menuLists.map( + (list) => MenuList( + listModel: list, + ), ), - ), - ], + ], + ), ), ); }, diff --git a/lib/features/scene/view/scene_view.dart b/lib/features/scene/view/scene_view.dart index 28e87bd..6eb434d 100644 --- a/lib/features/scene/view/scene_view.dart +++ b/lib/features/scene/view/scene_view.dart @@ -6,6 +6,7 @@ import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dar import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/title_medium.dart'; import 'package:syncrow_app/generated/assets.dart'; +import 'package:syncrow_app/utils/resource_manager/constants.dart'; import 'package:syncrow_app/utils/resource_manager/strings_manager.dart'; class SceneView extends StatelessWidget { @@ -17,99 +18,109 @@ class SceneView extends StatelessWidget { create: (BuildContext context) => SceneCubit(), child: BlocBuilder( builder: (context, state) { - return Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - const TitleMedium( - text: StringsManager.routine, - style: TextStyle( - fontSize: 32, - fontWeight: FontWeight.bold, + return Padding( + padding: EdgeInsets.only( + top: Constants.appBarHeight, + bottom: Constants.bottomNavBarHeight, + left: Constants.defaultPadding, + right: Constants.defaultPadding, + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const TitleMedium( + text: StringsManager.routine, + style: TextStyle( + fontSize: 32, + fontWeight: FontWeight.bold, + ), ), - ), - const SizedBox(height: 20), - const BodySmall( - text: StringsManager.tapToRunRoutine, - ), - Row( - children: [ - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 10, - ), - child: DefaultContainer( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Image.asset( - height: 50, - width: 50, - Assets.iconsHot1, - fit: BoxFit.contain, - ), - const Icon( - Icons.play_circle, - size: 40, - color: Colors.grey, - ) - ], - ), - const BodyMedium( - text: StringsManager.summerMode, - fontWeight: FontWeight.bold, - fontSize: 16, - ) - ], + const SizedBox(height: 20), + const BodySmall( + text: StringsManager.tapToRunRoutine, + ), + Row( + children: [ + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 10, + ), + child: DefaultContainer( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Image.asset( + height: 50, + width: 50, + Assets.iconsHot1, + fit: BoxFit.contain, + ), + const Icon( + Icons.play_circle, + size: 40, + color: Colors.grey, + ) + ], + ), + const BodyMedium( + text: StringsManager.summerMode, + fontWeight: FontWeight.bold, + fontSize: 16, + ) + ], + ), ), ), ), - ), - const SizedBox(width: 10), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 10, - ), - child: DefaultContainer( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Image.asset( - height: 50, - width: 50, - Assets.iconsWinter1, - fit: BoxFit.contain, - ), - const Icon( - Icons.play_circle, - size: 40, - color: Colors.grey, - ) - ], - ), - const BodyMedium( - text: StringsManager.winterMode, - fontWeight: FontWeight.bold, - fontSize: 16, - ) - ], + const SizedBox(width: 10), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 10, + ), + child: DefaultContainer( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Image.asset( + height: 50, + width: 50, + Assets.iconsWinter1, + fit: BoxFit.contain, + ), + const Icon( + Icons.play_circle, + size: 40, + color: Colors.grey, + ) + ], + ), + const BodyMedium( + text: StringsManager.winterMode, + fontWeight: FontWeight.bold, + fontSize: 16, + ) + ], + ), ), ), ), - ), - ], - ) - ], + ], + ) + ], + ), ); }, ), diff --git a/lib/my_app.dart b/lib/my_app.dart index e5f7209..154b9e6 100644 --- a/lib/my_app.dart +++ b/lib/my_app.dart @@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/app_layout/bloc/nav_cubit.dart'; import 'package:syncrow_app/features/auth/bloc/auth_cubit.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/theme_manager.dart'; import 'features/devices/bloc/devices_cubit.dart'; @@ -16,6 +17,10 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { + Constants.appBarHeight = + MediaQuery.sizeOf(context).height * Constants.appBarHeightPercentage; + Constants.bottomNavBarHeight = MediaQuery.sizeOf(context).height * + Constants.bottomNavBarHeightPercentage; return MultiBlocProvider( providers: [ BlocProvider( diff --git a/lib/services/api/api_links_endpoints.dart b/lib/services/api/api_links_endpoints.dart index decc473..8e4095e 100644 --- a/lib/services/api/api_links_endpoints.dart +++ b/lib/services/api/api_links_endpoints.dart @@ -1,3 +1,14 @@ abstract class ApiEndpoints { static const String apiKey = ''; + + //base + static const String baseUrl = 'faris:4001'; + + //auth + static const String auth = '/authentication/user'; + static const String signUp = '$auth/signup'; + static const String signIn = '$auth/login'; + static const String sendOTP = '$auth/send-otp'; + static const String verifyOTP = '$auth/verify-otp'; + static const String forgetPassword = '$auth/forget-password'; } diff --git a/lib/services/api/http_service.dart b/lib/services/api/http_service.dart index 7e574f3..e9941a7 100644 --- a/lib/services/api/http_service.dart +++ b/lib/services/api/http_service.dart @@ -36,7 +36,7 @@ class HTTPService { return client; } - Future getRequest({ + Future get({ required String path, Map? queryParameters, required T Function(dynamic) expectedResponseModel, @@ -55,7 +55,7 @@ class HTTPService { } } - Future postRequest( + Future post( {required String path, Map? queryParameters, Options? options, @@ -74,7 +74,7 @@ class HTTPService { } } - Future patchRequest( + Future patch( {required String path, Map? queryParameters, dynamic body, @@ -94,7 +94,7 @@ class HTTPService { } } - Future downloadRequest( + Future download( {required String path, required String savePath, Map? queryParameters, diff --git a/lib/utils/resource_manager/color_manager.dart b/lib/utils/resource_manager/color_manager.dart index 68e9f00..dbd8d53 100644 --- a/lib/utils/resource_manager/color_manager.dart +++ b/lib/utils/resource_manager/color_manager.dart @@ -10,6 +10,7 @@ abstract class ColorsManager { static const Color primaryTextColor = Colors.black; static const Color greyColor = Color(0xFFd5d5d5); + static const Color backgroundColor = Color(0xFFececec); static const Color dozeColor = Color(0xFFFEC258); static const Color relaxColor = Color(0xFFFBD288); diff --git a/lib/utils/resource_manager/constants.dart b/lib/utils/resource_manager/constants.dart index 34e955e..b0baee1 100644 --- a/lib/utils/resource_manager/constants.dart +++ b/lib/utils/resource_manager/constants.dart @@ -2,4 +2,11 @@ abstract class Constants { static const String languageCode = "en"; static const String countryCode = "US"; + + static const double appBarHeightPercentage = 0.1175; + static const double bottomNavBarHeightPercentage = 0.1175; + static late double appBarHeight; + static late double bottomNavBarHeight; + + static const double defaultPadding = 16; }