From a0405981a8610545c6abd419ca2a9d8d56b324b5 Mon Sep 17 00:00:00 2001 From: mohammad Date: Mon, 8 Jul 2024 15:59:43 +0300 Subject: [PATCH] Scenes have been added to the device page --- .../view/widgets/devices_view_body.dart | 7 +- .../devices/view/widgets/scene_listview.dart | 81 +++++++++++++++++++ lib/features/scene/view/scene_view.dart | 34 ++++---- .../scene_view_widget/scene_grid_view.dart | 65 +-------------- 4 files changed, 106 insertions(+), 81 deletions(-) create mode 100644 lib/features/devices/view/widgets/scene_listview.dart diff --git a/lib/features/devices/view/widgets/devices_view_body.dart b/lib/features/devices/view/widgets/devices_view_body.dart index 17cddf9..765bf2b 100644 --- a/lib/features/devices/view/widgets/devices_view_body.dart +++ b/lib/features/devices/view/widgets/devices_view_body.dart @@ -55,9 +55,10 @@ class DevicesViewBody extends StatelessWidget { ), ], ), - SizedBox( - height: MediaQuery.of(context).size.height/11, - child: const SceneView(pageType: true,)), + SizedBox( + height: MediaQuery.of(context).size.height*0.1, + child: const SceneView(pageType: true,) + ), const SizedBox( height: 20, ), diff --git a/lib/features/devices/view/widgets/scene_listview.dart b/lib/features/devices/view/widgets/scene_listview.dart new file mode 100644 index 0000000..b44fdbe --- /dev/null +++ b/lib/features/devices/view/widgets/scene_listview.dart @@ -0,0 +1,81 @@ + + + +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/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 SceneListview extends StatelessWidget { + final List scenes; + final String? loadingSceneId; + const SceneListview({ + required this.scenes, + required this.loadingSceneId, + super.key, + }); + + @override + Widget build(BuildContext context) { + return + 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*0.4, + 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.ellipsis, + fontWeight: FontWeight.bold, + fontSize: 16, + ), + ), + ], + ), + ), + ) + ); + }, + ); + } +} diff --git a/lib/features/scene/view/scene_view.dart b/lib/features/scene/view/scene_view.dart index 79d2551..6c09439 100644 --- a/lib/features/scene/view/scene_view.dart +++ b/lib/features/scene/view/scene_view.dart @@ -1,6 +1,7 @@ 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/view/widgets/scene_listview.dart'; import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart'; import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_bloc.dart'; import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_event.dart'; @@ -12,13 +13,13 @@ import 'package:syncrow_app/utils/context_extension.dart'; class SceneView extends StatelessWidget { final bool pageType; - const SceneView({super.key,this.pageType=false}); + const SceneView({super.key, this.pageType = false}); @override Widget build(BuildContext context) { return BlocProvider( - create: (BuildContext context) => - SceneBloc()..add(LoadScenes(HomeCubit.getInstance().selectedSpace?.id ?? '')), + create: (BuildContext context) => SceneBloc() + ..add(LoadScenes(HomeCubit.getInstance().selectedSpace?.id ?? '')), child: BlocBuilder( builder: (context, state) { if (state is DeleteSceneSuccess) { @@ -37,7 +38,8 @@ class SceneView extends StatelessWidget { listener: (context, state) { if (state is SceneTriggerSuccess) { context.showCustomSnackbar( - message: 'Scene ${state.sceneName} triggered successfully!'); + message: + 'Scene ${state.sceneName} triggered successfully!'); } }, child: HomeCubit.getInstance().spaces?.isEmpty ?? true @@ -46,10 +48,8 @@ class SceneView extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - if(pageType==false) - const SceneHeader(), - if(pageType==false) - const SizedBox(height: 8), + if (pageType == false) const SceneHeader(), + if (pageType == false) const SizedBox(height: 8), BlocBuilder( builder: (context, state) { if (state is SceneLoading) { @@ -64,12 +64,18 @@ class SceneView extends StatelessWidget { } if (state is SceneLoaded) { if (state.scenes.isNotEmpty) { - return Expanded( - child: SceneGrid( - pageType: pageType, - scenes: state.scenes, - loadingSceneId: state.loadingSceneId, - ), + return pageType == false + ? Expanded( + child: SceneGrid( + scenes: state.scenes, + loadingSceneId: state.loadingSceneId, + ), + ) + : Expanded( + child: SceneListview( + scenes: state.scenes, + loadingSceneId: state.loadingSceneId, + ) ); } else { return const Expanded( 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 4f1a45f..e6e5faf 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,21 +1,11 @@ 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, @@ -23,60 +13,7 @@ class SceneGrid extends StatelessWidget { @override Widget build(BuildContext context) { - 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, - ), - ), - ], - ), - ), - ) - ); - }, - ): + return GridView.builder( shrinkWrap: true, gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(