diff --git a/lib/pages/routines/widgets/main_routine_view/fetch_routine_scenes_automation.dart b/lib/pages/routines/widgets/main_routine_view/fetch_routine_scenes_automation.dart index 3e5d4e7f..f935fef8 100644 --- a/lib/pages/routines/widgets/main_routine_view/fetch_routine_scenes_automation.dart +++ b/lib/pages/routines/widgets/main_routine_view/fetch_routine_scenes_automation.dart @@ -16,7 +16,7 @@ class FetchRoutineScenesAutomation extends StatelessWidget Widget build(BuildContext context) { return BlocBuilder( builder: (context, state) { - if (state.isLoading) const Center(child: CircularProgressIndicator()); + if (state.isLoading) return const Center(child: CircularProgressIndicator()); return SingleChildScrollView( child: Padding( @@ -25,159 +25,25 @@ class FetchRoutineScenesAutomation extends StatelessWidget crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - Text( - "Scenes (Tab to Run)", - style: Theme.of(context).textTheme.titleLarge?.copyWith( - color: ColorsManager.grayColor, - fontWeight: FontWeight.bold, - ), - ), + _buildListTitle(context, "Scenes (Tab to Run)"), const SizedBox(height: 10), Visibility( visible: state.scenes.isNotEmpty, - replacement: Text( - "No scenes found", - style: context.textTheme.bodyMedium?.copyWith( - color: ColorsManager.grayColor, - ), - ), + replacement: _buildEmptyState(context, "No scenes found"), child: SizedBox( height: 200, - child: ListView.builder( - scrollDirection: Axis.horizontal, - itemCount: state.scenes.length, - itemBuilder: (context, index) { - final scene = state.scenes[index]; - final isLoading = state.loadingSceneId == scene.id; - - return Padding( - padding: EdgeInsets.only( - right: isSmallScreenSize(context) ? 4.0 : 8.0, - ), - child: Column( - children: [ - RoutineViewCard( - isLoading: isLoading, - sceneOnTap: () { - context.read().add( - SceneTrigger( - sceneId: scene.id, - name: scene.name, - ), - ); - }, - status: state.scenes[index].status, - communityId: state.scenes[index].communityId, - spaceId: state.scenes[index].spaceId, - sceneId: state.scenes[index].sceneTuyaId!, - automationId: state.scenes[index].id, - cardType: 'scenes', - spaceName: state.scenes[index].spaceName, - onTap: () { - BlocProvider.of(context).add( - const CreateNewRoutineViewEvent( - createRoutineView: true, - ), - ); - context.read().add( - GetSceneDetails( - sceneId: state.scenes[index].id, - isTabToRun: true, - isUpdate: true, - ), - ); - }, - textString: state.scenes[index].name, - icon: state.scenes[index].icon ?? - Assets.logoHorizontal, - isFromScenes: true, - iconInBytes: state.scenes[index].iconInBytes, - ), - ], - ), - ); - }), + child: _buildScenes(state), ), ), const SizedBox(height: 10), - Text( - "Automations", - style: Theme.of(context).textTheme.titleLarge?.copyWith( - color: ColorsManager.grayColor, - fontWeight: FontWeight.bold, - ), - ), + _buildListTitle(context, "Automations"), const SizedBox(height: 3), Visibility( visible: state.automations.isNotEmpty, - replacement: Text( - "No automations found", - style: context.textTheme.bodyMedium?.copyWith( - color: ColorsManager.grayColor, - ), - ), + replacement: _buildEmptyState(context, "No automations found"), child: SizedBox( height: 200, - child: ListView.builder( - scrollDirection: Axis.horizontal, - itemCount: state.automations.length, - itemBuilder: (context, index) { - final isLoading = - state.automations.contains(state.automations[index].id); - - return Column( - children: [ - Padding( - padding: EdgeInsets.only( - right: isSmallScreenSize(context) ? 4.0 : 8.0, - ), - child: RoutineViewCard( - isLoading: isLoading, - onChanged: (v) { - context.read().add( - UpdateAutomationStatus( - automationId: state.automations[index].id, - automationStatusUpdate: - AutomationStatusUpdate( - spaceUuid: - state.automations[index].spaceId, - isEnable: v, - ), - communityId: - state.automations[index].communityId, - ), - ); - }, - status: state.automations[index].status, - communityId: '', - spaceId: state.automations[index].spaceId, - sceneId: '', - automationId: state.automations[index].id, - cardType: 'automations', - spaceName: state.automations[index].spaceName, - onTap: () { - BlocProvider.of(context).add( - const CreateNewRoutineViewEvent( - createRoutineView: true, - ), - ); - context.read().add( - GetAutomationDetails( - automationId: state.automations[index].id, - isAutomation: true, - isUpdate: true, - ), - ); - }, - textString: state.automations[index].name, - icon: state.automations[index].icon ?? - Assets.automation, - ), - ), - ], - ); - }, - ), + child: _buildAutomations(state), ), ) ], @@ -187,4 +53,137 @@ class FetchRoutineScenesAutomation extends StatelessWidget }, ); } + + Widget _buildAutomations(RoutineState state) { + return ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: state.automations.length, + itemBuilder: (context, index) { + final isLoading = state.automations.contains(state.automations[index].id); + + return Column( + children: [ + Padding( + padding: EdgeInsets.only( + right: isSmallScreenSize(context) ? 4.0 : 8.0, + ), + child: RoutineViewCard( + isLoading: isLoading, + onChanged: (v) { + context.read().add( + UpdateAutomationStatus( + automationId: state.automations[index].id, + automationStatusUpdate: AutomationStatusUpdate( + spaceUuid: state.automations[index].spaceId, + isEnable: v, + ), + communityId: state.automations[index].communityId, + ), + ); + }, + status: state.automations[index].status, + communityId: '', + spaceId: state.automations[index].spaceId, + sceneId: '', + automationId: state.automations[index].id, + cardType: 'automations', + spaceName: state.automations[index].spaceName, + onTap: () { + BlocProvider.of(context).add( + const CreateNewRoutineViewEvent( + createRoutineView: true, + ), + ); + context.read().add( + GetAutomationDetails( + automationId: state.automations[index].id, + isAutomation: true, + isUpdate: true, + ), + ); + }, + textString: state.automations[index].name, + icon: state.automations[index].icon ?? Assets.automation, + ), + ), + ], + ); + }, + ); + } + + Widget _buildScenes(RoutineState state) { + return ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: state.scenes.length, + itemBuilder: (context, index) { + final scene = state.scenes[index]; + final isLoading = state.loadingSceneId == scene.id; + + return Padding( + padding: EdgeInsets.only( + right: isSmallScreenSize(context) ? 4.0 : 8.0, + ), + child: Column( + children: [ + RoutineViewCard( + isLoading: isLoading, + sceneOnTap: () { + context.read().add( + SceneTrigger( + sceneId: scene.id, + name: scene.name, + ), + ); + }, + status: state.scenes[index].status, + communityId: state.scenes[index].communityId, + spaceId: state.scenes[index].spaceId, + sceneId: state.scenes[index].sceneTuyaId!, + automationId: state.scenes[index].id, + cardType: 'scenes', + spaceName: state.scenes[index].spaceName, + onTap: () { + BlocProvider.of(context).add( + const CreateNewRoutineViewEvent( + createRoutineView: true, + ), + ); + context.read().add( + GetSceneDetails( + sceneId: state.scenes[index].id, + isTabToRun: true, + isUpdate: true, + ), + ); + }, + textString: state.scenes[index].name, + icon: state.scenes[index].icon ?? Assets.logoHorizontal, + isFromScenes: true, + iconInBytes: state.scenes[index].iconInBytes, + ), + ], + ), + ); + }); + } + + Widget _buildListTitle(BuildContext context, String title) { + return Text( + title, + style: Theme.of(context).textTheme.titleLarge?.copyWith( + color: ColorsManager.grayColor, + fontWeight: FontWeight.bold, + ), + ); + } + + Widget _buildEmptyState(BuildContext context, String title) { + return Text( + title, + style: context.textTheme.bodyMedium?.copyWith( + color: ColorsManager.grayColor, + ), + ); + } }