This commit is contained in:
Faris Armoush
2025-04-17 13:08:16 +03:00
parent 8136804694
commit 977875f1f2
3 changed files with 170 additions and 180 deletions

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/routines/bloc/create_routine_bloc/create_routine_event.dart';
import 'package:syncrow_web/pages/routines/bloc/create_routine_bloc/create_routine_bloc.dart'; import 'package:syncrow_web/pages/routines/bloc/create_routine_bloc/create_routine_bloc.dart';
import 'package:syncrow_web/pages/routines/bloc/create_routine_bloc/create_routine_event.dart';
import 'package:syncrow_web/pages/routines/bloc/routine_bloc/routine_bloc.dart'; import 'package:syncrow_web/pages/routines/bloc/routine_bloc/routine_bloc.dart';
import 'package:syncrow_web/pages/routines/create_new_routines/create_new_routines.dart'; import 'package:syncrow_web/pages/routines/create_new_routines/create_new_routines.dart';
import 'package:syncrow_web/pages/routines/view/create_new_routine_view.dart'; import 'package:syncrow_web/pages/routines/view/create_new_routine_view.dart';
@ -9,6 +9,7 @@ import 'package:syncrow_web/pages/routines/widgets/main_routine_view/fetch_routi
import 'package:syncrow_web/pages/routines/widgets/main_routine_view/routine_view_card.dart'; import 'package:syncrow_web/pages/routines/widgets/main_routine_view/routine_view_card.dart';
import 'package:syncrow_web/pages/space_tree/view/space_tree_view.dart'; import 'package:syncrow_web/pages/space_tree/view/space_tree_view.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
class RoutinesView extends StatefulWidget { class RoutinesView extends StatefulWidget {
const RoutinesView({super.key}); const RoutinesView({super.key});
@ -27,9 +28,10 @@ class _RoutinesViewState extends State<RoutinesView> {
if (result == null) return; if (result == null) return;
final communityId = result['community']; final communityId = result['community'];
final spaceId = result['space']; final spaceId = result['space'];
final _bloc = BlocProvider.of<CreateRoutineBloc>(context); final bloc = BlocProvider.of<CreateRoutineBloc>(context);
final routineBloc = context.read<RoutineBloc>(); final routineBloc = context.read<RoutineBloc>();
_bloc.add(SaveCommunityIdAndSpaceIdEvent(communityID: communityId, spaceID: spaceId)); bloc.add(
SaveCommunityIdAndSpaceIdEvent(communityID: communityId, spaceID: spaceId));
await Future.delayed(const Duration(seconds: 1)); await Future.delayed(const Duration(seconds: 1));
routineBloc.add(const CreateNewRoutineViewEvent(createRoutineView: true)); routineBloc.add(const CreateNewRoutineViewEvent(createRoutineView: true));
} }
@ -54,13 +56,15 @@ class _RoutinesViewState extends State<RoutinesView> {
), ),
Expanded( Expanded(
flex: 4, flex: 4,
child: ListView( child: SizedBox(
children: [ height: context.screenHeight,
Container( width: context.screenWidth,
padding: const EdgeInsets.all(16), child: SingleChildScrollView(
height: MediaQuery.sizeOf(context).height, padding: const EdgeInsetsDirectional.all(16),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
spacing: 16,
children: [ children: [
Text( Text(
"Create New Routines", "Create New Routines",
@ -69,7 +73,6 @@ class _RoutinesViewState extends State<RoutinesView> {
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
const SizedBox(height: 10),
RoutineViewCard( RoutineViewCard(
isLoading: false, isLoading: false,
onChanged: (v) {}, onChanged: (v) {},
@ -84,13 +87,10 @@ class _RoutinesViewState extends State<RoutinesView> {
icon: Icons.add, icon: Icons.add,
textString: '', textString: '',
), ),
const SizedBox(height: 15), const FetchRoutineScenesAutomation(),
const Expanded(child: FetchRoutineScenesAutomation()),
], ],
), ),
), ),
const SizedBox(height: 50),
],
), ),
) )
], ],

View File

@ -12,8 +12,7 @@ class FetchRoutineScenesAutomation extends StatefulWidget {
const FetchRoutineScenesAutomation({super.key}); const FetchRoutineScenesAutomation({super.key});
@override @override
State<FetchRoutineScenesAutomation> createState() => State<FetchRoutineScenesAutomation> createState() => _FetchRoutineScenesState();
_FetchRoutineScenesState();
} }
class _FetchRoutineScenesState extends State<FetchRoutineScenesAutomation> class _FetchRoutineScenesState extends State<FetchRoutineScenesAutomation>
@ -57,18 +56,15 @@ class _FetchRoutineScenesState extends State<FetchRoutineScenesAutomation>
SizedBox( SizedBox(
height: 200, height: 200,
child: ListView.builder( child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
itemCount: state.scenes.length, itemCount: state.scenes.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
final scene = state.scenes[index]; final scene = state.scenes[index];
final isLoading = final isLoading = state.loadingSceneId == scene.id;
state.loadingSceneId == scene.id;
return Padding( return Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
right: right: isSmallScreenSize(context) ? 4.0 : 8.0,
isSmallScreenSize(context) ? 4.0 : 8.0,
), ),
child: Column( child: Column(
children: [ children: [
@ -78,29 +74,26 @@ class _FetchRoutineScenesState extends State<FetchRoutineScenesAutomation>
context.read<RoutineBloc>().add( context.read<RoutineBloc>().add(
SceneTrigger( SceneTrigger(
sceneId: scene.id, sceneId: scene.id,
name: scene.name)); name: scene.name,
),
);
}, },
status: state.scenes[index].status, status: state.scenes[index].status,
communityId: communityId: state.scenes[index].communityId,
state.scenes[index].communityId ??
'',
spaceId: state.scenes[index].spaceId, spaceId: state.scenes[index].spaceId,
sceneId: sceneId: state.scenes[index].sceneTuyaId!,
state.scenes[index].sceneTuyaId!,
automationId: state.scenes[index].id, automationId: state.scenes[index].id,
cardType: 'scenes', cardType: 'scenes',
spaceName: spaceName: state.scenes[index].spaceName,
state.scenes[index].spaceName,
onTap: () { onTap: () {
BlocProvider.of<RoutineBloc>(context) BlocProvider.of<RoutineBloc>(context).add(
.add(
const CreateNewRoutineViewEvent( const CreateNewRoutineViewEvent(
createRoutineView: true), createRoutineView: true,
),
); );
context.read<RoutineBloc>().add( context.read<RoutineBloc>().add(
GetSceneDetails( GetSceneDetails(
sceneId: sceneId: state.scenes[index].id,
state.scenes[index].id,
isTabToRun: true, isTabToRun: true,
isUpdate: true, isUpdate: true,
), ),
@ -110,8 +103,7 @@ class _FetchRoutineScenesState extends State<FetchRoutineScenesAutomation>
icon: state.scenes[index].icon ?? icon: state.scenes[index].icon ??
Assets.logoHorizontal, Assets.logoHorizontal,
isFromScenes: true, isFromScenes: true,
iconInBytes: iconInBytes: state.scenes[index].iconInBytes,
state.scenes[index].iconInBytes,
), ),
], ],
), ),
@ -137,76 +129,68 @@ class _FetchRoutineScenesState extends State<FetchRoutineScenesAutomation>
if (state.automations.isNotEmpty) if (state.automations.isNotEmpty)
SizedBox( SizedBox(
height: 200, height: 200,
child: ListView.builder( child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
itemCount: state.automations.length, itemCount: state.automations.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
final isLoading = state.automations! final isLoading = state.automations
.contains(state.automations[index].id); .contains(state.automations[index].id);
return Column( return Column(
children: [ children: [
Padding( Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
right: isSmallScreenSize(context) right: isSmallScreenSize(context) ? 4.0 : 8.0,
? 4.0
: 8.0,
), ),
child: RoutineViewCard( child: RoutineViewCard(
isLoading: isLoading, isLoading: isLoading,
onChanged: (v) { onChanged: (v) {
context.read<RoutineBloc>().add( context.read<RoutineBloc>().add(
UpdateAutomationStatus( UpdateAutomationStatus(
automationId: state automationId:
.automations[index].id, state.automations[index].id,
automationStatusUpdate: automationStatusUpdate:
AutomationStatusUpdate( AutomationStatusUpdate(
spaceUuid: state spaceUuid: state
.automations[ .automations[index].spaceId,
index] isEnable: v,
.spaceId, ),
isEnable: v),
communityId: state communityId: state
.automations[index] .automations[index].communityId,
.communityId,
), ),
); );
}, },
status: state.automations[index].status, status: state.automations[index].status,
communityId: '', communityId: '',
spaceId: spaceId: state.automations[index].spaceId,
state.automations[index].spaceId,
sceneId: '', sceneId: '',
automationId: automationId: state.automations[index].id,
state.automations[index].id,
cardType: 'automations', cardType: 'automations',
spaceName: spaceName: state.automations[index].spaceName,
state.automations[index].spaceName,
onTap: () { onTap: () {
BlocProvider.of<RoutineBloc>(context) BlocProvider.of<RoutineBloc>(context).add(
.add(
const CreateNewRoutineViewEvent( const CreateNewRoutineViewEvent(
createRoutineView: true), createRoutineView: true,
),
); );
context.read<RoutineBloc>().add( context.read<RoutineBloc>().add(
GetAutomationDetails( GetAutomationDetails(
automationId: state automationId:
.automations[index].id, state.automations[index].id,
isAutomation: true, isAutomation: true,
isUpdate: true), isUpdate: true,
),
); );
}, },
textString: textString: state.automations[index].name,
state.automations[index].name,
icon: state.automations[index].icon ?? icon: state.automations[index].icon ??
Assets.automation, Assets.automation,
), ),
), ),
], ],
); );
}), },
),
), ),
], ],
), ),

View File

@ -1,4 +1,5 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -66,7 +67,6 @@ class _RoutineViewCardState extends State<RoutineViewCard> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// Use widget.<mixinMethod> instead of just <mixinMethod>
final double cardWidth = widget.isSmallScreenSize(context) final double cardWidth = widget.isSmallScreenSize(context)
? 120 ? 120
: widget.isMediumScreenSize(context) : widget.isMediumScreenSize(context)
@ -127,22 +127,23 @@ class _RoutineViewCardState extends State<RoutineViewCard> {
) )
else else
CupertinoSwitch( CupertinoSwitch(
activeColor: ColorsManager.primaryColor, activeTrackColor: ColorsManager.primaryColor,
value: widget.status == 'enable', value: widget.status == 'enable',
onChanged: widget.onChanged, onChanged: widget.onChanged,
) )
], ],
) )
: const SizedBox(), : const SizedBox(),
InkWell( Column(
onTap: widget.onTap,
child: Column(
children: [ children: [
Center( Center(
child: InkWell(
customBorder: const CircleBorder(),
onTap: widget.onTap,
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: ColorsManager.graysColor, color: ColorsManager.graysColor,
borderRadius: BorderRadius.circular(120), shape: BoxShape.circle,
border: Border.all( border: Border.all(
color: ColorsManager.greyColor, color: ColorsManager.greyColor,
width: 2.0, width: 2.0,
@ -158,7 +159,8 @@ class _RoutineViewCardState extends State<RoutineViewCard> {
height: iconSize, height: iconSize,
width: iconSize, width: iconSize,
fit: BoxFit.contain, fit: BoxFit.contain,
errorBuilder: (context, error, stackTrace) => Image.asset( errorBuilder: (context, error, stackTrace) =>
Image.asset(
Assets.logo, Assets.logo,
height: iconSize, height: iconSize,
width: iconSize, width: iconSize,
@ -171,7 +173,8 @@ class _RoutineViewCardState extends State<RoutineViewCard> {
width: iconSize, width: iconSize,
fit: BoxFit.contain, fit: BoxFit.contain,
) )
: (widget.icon is String && widget.icon.endsWith('.svg')) : (widget.icon is String &&
widget.icon.endsWith('.svg'))
? SvgPicture.asset( ? SvgPicture.asset(
height: iconSize, height: iconSize,
width: iconSize, width: iconSize,
@ -181,7 +184,10 @@ class _RoutineViewCardState extends State<RoutineViewCard> {
: Icon( : Icon(
widget.icon, widget.icon,
color: ColorsManager.dialogBlueTitle, color: ColorsManager.dialogBlueTitle,
size: widget.isSmallScreenSize(context) ? 30 : 40, size: widget.isSmallScreenSize(context)
? 30
: 40,
),
), ),
), ),
), ),
@ -216,7 +222,8 @@ class _RoutineViewCardState extends State<RoutineViewCard> {
maxLines: 1, maxLines: 1,
style: context.textTheme.bodySmall?.copyWith( style: context.textTheme.bodySmall?.copyWith(
color: ColorsManager.blackColor, color: ColorsManager.blackColor,
fontSize: widget.isSmallScreenSize(context) ? 10 : 12, fontSize:
widget.isSmallScreenSize(context) ? 10 : 12,
), ),
), ),
], ],
@ -226,7 +233,6 @@ class _RoutineViewCardState extends State<RoutineViewCard> {
), ),
], ],
), ),
),
], ],
), ),
), ),