diff --git a/lib/features/devices/view/widgets/devices_view_body.dart b/lib/features/devices/view/widgets/devices_view_body.dart index 0da9c17..17cddf9 100644 --- a/lib/features/devices/view/widgets/devices_view_body.dart +++ b/lib/features/devices/view/widgets/devices_view_body.dart @@ -3,12 +3,27 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:smooth_page_indicator/smooth_page_indicator.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/features/devices/view/widgets/devices_view_header.dart'; import 'package:syncrow_app/features/devices/view/widgets/room_page.dart'; import 'package:syncrow_app/features/devices/view/widgets/rooms_slider.dart'; import 'package:syncrow_app/features/devices/view/widgets/wizard_page.dart'; +import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_bloc.dart'; +import 'package:syncrow_app/features/scene/view/scene_view.dart'; import 'package:syncrow_app/features/shared_widgets/create_unit.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart'; +import 'package:syncrow_app/features/shared_widgets/text_widgets/title_medium.dart'; +import 'package:syncrow_app/utils/context_extension.dart'; +import 'package:syncrow_app/utils/resource_manager/strings_manager.dart'; +class DevicesViewPage extends StatelessWidget { + const DevicesViewPage({super.key}); + + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (context) => SceneBloc(), // Initialize your SceneBloc here + child: DevicesViewBody(), + ); + } +} class DevicesViewBody extends StatelessWidget { const DevicesViewBody({ @@ -27,57 +42,73 @@ class DevicesViewBody extends StatelessWidget { return HomeCubit.getInstance().spaces?.isEmpty ?? true ? const CreateUnitWidget() : Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Row( + children: [ + TitleMedium( + text: StringsManager.devices, + style: context.titleMedium.copyWith( + fontSize: 25, + ), + ), + ], + ), + SizedBox( + height: MediaQuery.of(context).size.height/11, + child: const SceneView(pageType: true,)), + const SizedBox( + height: 20, + ), + const RoomsSlider(), + const SizedBox( + height: 10, + ), + Expanded( + child: PageView( + controller: HomeCubit.getInstance().devicesPageController, + onPageChanged: (index) { + HomeCubit.getInstance().devicesPageChanged(index); + }, children: [ - const DevicesViewHeader(), - const RoomsSlider(), - const SizedBox( - height: 10, + WizardPage( + groupsList: DevicesCubit.getInstance().allCategories ?? [], ), - Expanded( - child: PageView( - controller: HomeCubit.getInstance().devicesPageController, - onPageChanged: (index) { - HomeCubit.getInstance().devicesPageChanged(index); - }, - children: [ - WizardPage( - groupsList: DevicesCubit.getInstance().allCategories ?? [], - ), - if (HomeCubit.getInstance().selectedSpace != null) - if (HomeCubit.getInstance().selectedSpace!.rooms != null) - ...HomeCubit.getInstance().selectedSpace!.rooms!.map( - (room) { - return RoomPage( - room: room, - ); - }, - ) - ], - ), - ), - HomeCubit.getInstance().selectedSpace != null - ? Padding( - padding: const EdgeInsets.symmetric( - vertical: 7, - ), - child: SmoothPageIndicator( - controller: HomeCubit.getInstance().devicesPageController, - count: HomeCubit.getInstance().selectedSpace!.rooms!.length + 1, - effect: const WormEffect( - paintStyle: PaintingStyle.stroke, - dotHeight: 8, - dotWidth: 8, - ), - ), - ) - : const Center( - child: BodyLarge(text: 'No Home Found'), - ), + if (HomeCubit.getInstance().selectedSpace != null) + if (HomeCubit.getInstance().selectedSpace!.rooms != null) + ...HomeCubit.getInstance().selectedSpace!.rooms!.map( + (room) { + return RoomPage( + room: room, + ); + }, + ) ], - ); + ), + ), + HomeCubit.getInstance().selectedSpace != null + ? Padding( + padding: const EdgeInsets.symmetric( + vertical: 7, + ), + child: SmoothPageIndicator( + controller: HomeCubit.getInstance().devicesPageController, + count: HomeCubit.getInstance().selectedSpace!.rooms!.length + 1, + effect: const WormEffect( + paintStyle: PaintingStyle.stroke, + dotHeight: 8, + dotWidth: 8, + ), + ), + ) + : const Center( + child: BodyLarge(text: 'No Home Found'), + ), + ], + ); } }, ); } -} +} \ No newline at end of file diff --git a/lib/features/scene/view/scene_view.dart b/lib/features/scene/view/scene_view.dart index 83a537a..79d2551 100644 --- a/lib/features/scene/view/scene_view.dart +++ b/lib/features/scene/view/scene_view.dart @@ -8,11 +8,11 @@ import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_grid_ import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_header.dart'; import 'package:syncrow_app/features/shared_widgets/create_unit.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; - import 'package:syncrow_app/utils/context_extension.dart'; class SceneView extends StatelessWidget { - const SceneView({super.key}); + final bool pageType; + const SceneView({super.key,this.pageType=false}); @override Widget build(BuildContext context) { @@ -46,8 +46,10 @@ class SceneView extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ + if(pageType==false) const SceneHeader(), - const SizedBox(height: 8), + if(pageType==false) + const SizedBox(height: 8), BlocBuilder( builder: (context, state) { if (state is SceneLoading) { @@ -64,6 +66,7 @@ class SceneView extends StatelessWidget { if (state.scenes.isNotEmpty) { return Expanded( child: SceneGrid( + pageType: pageType, scenes: state.scenes, loadingSceneId: state.loadingSceneId, ), @@ -78,7 +81,6 @@ class SceneView extends StatelessWidget { ); } } - return const SizedBox(); }, ), diff --git a/lib/features/scene/widgets/scene_view_widget/scene_grid_view.dart b/lib/features/scene/widgets/scene_view_widget/scene_grid_view.dart index dc86ffe..4f1a45f 100644 --- a/lib/features/scene/widgets/scene_view_widget/scene_grid_view.dart +++ b/lib/features/scene/widgets/scene_view_widget/scene_grid_view.dart @@ -1,13 +1,21 @@ import 'package:flutter/material.dart'; - +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart'; +import 'package:syncrow_app/features/scene/enum/create_scene_enum.dart'; +import 'package:syncrow_app/features/scene/model/scene_settings_route_arguments.dart'; import 'package:syncrow_app/features/scene/model/scenes_model.dart'; import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_item.dart'; +import 'package:syncrow_app/features/shared_widgets/default_container.dart'; +import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; +import 'package:syncrow_app/generated/assets.dart'; +import 'package:syncrow_app/navigation/routing_constants.dart'; class SceneGrid extends StatelessWidget { final List scenes; final String? loadingSceneId; - + final bool pageType; const SceneGrid({ + this.pageType=false, required this.scenes, required this.loadingSceneId, super.key, @@ -15,7 +23,61 @@ class SceneGrid extends StatelessWidget { @override Widget build(BuildContext context) { - return GridView.builder( + return pageType? + ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: scenes.length, + itemBuilder: (context, index) { + final scene = scenes[index]; + final isLoading = loadingSceneId == scene.id; + return Container( + padding: const EdgeInsets.only(right: 10), + child:DefaultContainer( + onTap: () { + Navigator.pushNamed( + context, + Routes.sceneTasksRoute, + arguments: SceneSettingsRouteArguments( + sceneType: CreateSceneEnum.tabToRun.name, + sceneId: scene.id, + sceneName: scene.name, + ), + ); + BlocProvider.of(context) + .add(FetchSceneTasksEvent(sceneId: scene.id)); + }, + child: SizedBox( + width: MediaQuery.of(context).size.width/2.5, + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Image.asset( + height: 32, + width: 32, + Assets.assetsIconsLogo, + fit: BoxFit.fill, + ), + ), + Expanded( + child: BodyMedium( + text: scene.name, + maxLines: 2, + overflow: TextOverflow.fade, + fontWeight: FontWeight.bold, + fontSize: 16, + ), + ), + ], + ), + ), + ) + ); + }, + ): + GridView.builder( shrinkWrap: true, gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, @@ -27,7 +89,6 @@ class SceneGrid extends StatelessWidget { itemBuilder: (context, index) { final scene = scenes[index]; final isLoading = loadingSceneId == scene.id; - return SceneItem(scene: scene, isLoading: isLoading); }, ); diff --git a/lib/my_app.dart b/lib/my_app.dart index eb399ad..e8e4f4c 100644 --- a/lib/my_app.dart +++ b/lib/my_app.dart @@ -6,6 +6,7 @@ import 'package:syncrow_app/navigation/navigation_service.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/scene/bloc/scene_bloc/scene_bloc.dart'; import 'navigation/router.dart' as router; import 'navigation/routing_constants.dart'; @@ -23,7 +24,9 @@ class MyApp extends StatelessWidget { return MultiBlocProvider( providers: [ BlocProvider(create: (context) => AuthCubit()), - BlocProvider(create: (context) => CreateSceneBloc()) + BlocProvider(create: (context) => CreateSceneBloc()), + BlocProvider(create: (context) => SceneBloc()), + ], child: MaterialApp( navigatorKey: NavigationService.navigatorKey,