mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-08-26 04:09:40 +00:00
password_changes&_routine_changes
This commit is contained in:
@ -3,8 +3,8 @@ 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/view/scene_tasks_view.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/alert_dialogs/icons_dialog.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/delete_routine_b.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/effective_period_setting/effective_period_bottom_sheet.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/scene_list_tile.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
|
||||
@ -18,10 +18,12 @@ class SceneAutoSettings extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final sceneSettings = ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>? ?? {};
|
||||
final sceneSettings =
|
||||
ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>? ??
|
||||
{};
|
||||
final sceneId = sceneSettings['sceneId'] as String? ?? '';
|
||||
final isAutomation =
|
||||
context.read<CreateSceneBloc>().sceneType == CreateSceneEnum.deviceStatusChanges;
|
||||
final isAutomation = context.read<CreateSceneBloc>().sceneType ==
|
||||
CreateSceneEnum.deviceStatusChanges;
|
||||
final sceneName = sceneSettings['sceneName'] as String? ?? '';
|
||||
bool showInDevice = context.read<CreateSceneBloc>().showInDeviceScreen;
|
||||
String selectedIcon = '';
|
||||
@ -35,7 +37,8 @@ class SceneAutoSettings extends StatelessWidget {
|
||||
icon: const Icon(
|
||||
Icons.arrow_back_ios,
|
||||
)),
|
||||
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(builder: (context, state) {
|
||||
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
|
||||
builder: (context, state) {
|
||||
if (state is AddSceneTask) {
|
||||
showInDevice = state.showInDevice ?? false;
|
||||
}
|
||||
@ -47,7 +50,8 @@ class SceneAutoSettings extends StatelessWidget {
|
||||
if (!isAutomation)
|
||||
DefaultContainer(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 10),
|
||||
padding: const EdgeInsets.only(
|
||||
top: 10, left: 10, right: 10, bottom: 10),
|
||||
child: Column(
|
||||
children: [
|
||||
InkWell(
|
||||
@ -55,20 +59,24 @@ class SceneAutoSettings extends StatelessWidget {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
BlocProvider.of<CreateSceneBloc>(context).add(SceneIconEvent());
|
||||
BlocProvider.of<CreateSceneBloc>(context)
|
||||
.add(SceneIconEvent());
|
||||
return IconsDialog(
|
||||
widgetList: Container(
|
||||
height: MediaQuery.sizeOf(context).height * 0.4,
|
||||
height:
|
||||
MediaQuery.sizeOf(context).height * 0.4,
|
||||
width: MediaQuery.sizeOf(context).width,
|
||||
padding: const EdgeInsets.all(24),
|
||||
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
|
||||
child: BlocBuilder<CreateSceneBloc,
|
||||
CreateSceneState>(
|
||||
builder: (context, state) {
|
||||
if (state is CreateSceneLoading) {
|
||||
return const Center(
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
width: 50,
|
||||
child: CircularProgressIndicator()),
|
||||
child:
|
||||
CircularProgressIndicator()),
|
||||
);
|
||||
} else if (state is AddSceneTask) {
|
||||
return GridView.builder(
|
||||
@ -78,25 +86,35 @@ class SceneAutoSettings extends StatelessWidget {
|
||||
crossAxisSpacing: 12,
|
||||
mainAxisSpacing: 12,
|
||||
),
|
||||
itemCount: state.iconModels?.length ?? 0,
|
||||
itemCount:
|
||||
state.iconModels?.length ?? 0,
|
||||
itemBuilder: (context, index) {
|
||||
final iconModel = state.iconModels![index];
|
||||
final iconModel =
|
||||
state.iconModels![index];
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
BlocProvider.of<CreateSceneBloc>(context).add(
|
||||
IconSelected(
|
||||
iconId: iconModel.uuid,
|
||||
confirmSelection: false));
|
||||
BlocProvider.of<
|
||||
CreateSceneBloc>(
|
||||
context)
|
||||
.add(IconSelected(
|
||||
iconId:
|
||||
iconModel.uuid,
|
||||
confirmSelection:
|
||||
false));
|
||||
selectedIcon = iconModel.uuid;
|
||||
},
|
||||
child: ClipOval(
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(1),
|
||||
padding:
|
||||
const EdgeInsets.all(1),
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(
|
||||
color: state.selectedIcon == iconModel.uuid
|
||||
? ColorsManager.primaryColorWithOpacity
|
||||
: Colors.transparent,
|
||||
color: state.selectedIcon ==
|
||||
iconModel.uuid
|
||||
? ColorsManager
|
||||
.primaryColorWithOpacity
|
||||
: Colors
|
||||
.transparent,
|
||||
width: 2,
|
||||
),
|
||||
shape: BoxShape.circle,
|
||||
@ -123,8 +141,10 @@ class SceneAutoSettings extends StatelessWidget {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
confirmTab: () {
|
||||
BlocProvider.of<CreateSceneBloc>(context).add(
|
||||
IconSelected(iconId: selectedIcon, confirmSelection: true));
|
||||
BlocProvider.of<CreateSceneBloc>(context)
|
||||
.add(IconSelected(
|
||||
iconId: selectedIcon,
|
||||
confirmSelection: true));
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
title: 'Icons',
|
||||
@ -171,7 +191,8 @@ class SceneAutoSettings extends StatelessWidget {
|
||||
value: showInDevice,
|
||||
onChanged: (value) {
|
||||
BlocProvider.of<CreateSceneBloc>(context)
|
||||
.add(ShowOnDeviceClicked(value: value));
|
||||
.add(ShowOnDeviceClicked(
|
||||
value: value));
|
||||
},
|
||||
applyTheme: true,
|
||||
),
|
||||
@ -219,7 +240,8 @@ class SceneAutoSettings extends StatelessWidget {
|
||||
visible: isAutomation,
|
||||
child: SceneListTile(
|
||||
titleString: "Effective Period",
|
||||
trailingWidget: const Icon(Icons.arrow_forward_ios_rounded),
|
||||
trailingWidget:
|
||||
const Icon(Icons.arrow_forward_ios_rounded),
|
||||
onPressed: () {
|
||||
context.customBottomSheet(
|
||||
child: const EffectPeriodBottomSheetContent(),
|
||||
@ -236,19 +258,29 @@ class SceneAutoSettings extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
),
|
||||
Visibility(
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 15,
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
SizedBox(
|
||||
child: Center(
|
||||
child: Visibility(
|
||||
visible: sceneName.isNotEmpty,
|
||||
child: DeleteBottomSheetContent(
|
||||
child: DeleteRoutineButton(
|
||||
isAutomation: isAutomation,
|
||||
sceneId: sceneId,
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 16,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
@ -7,10 +7,10 @@ import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_bloc.dart';
|
||||
import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_event.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/widgets/alert_dialogs/delete_routine_dialog.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/create_scene_save_button.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/if_then_containers/if_container.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/if_then_containers/then_container.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/scene_list_tile.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart';
|
||||
import 'package:syncrow_app/generated/assets.dart';
|
||||
import 'package:syncrow_app/navigation/navigate_to_route.dart';
|
||||
@ -117,49 +117,3 @@ class SceneTasksView extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class DeleteBottomSheetContent extends StatelessWidget {
|
||||
const DeleteBottomSheetContent(
|
||||
{super.key, required this.sceneId, required this.isAutomation});
|
||||
|
||||
final String sceneId;
|
||||
final bool isAutomation;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocConsumer<CreateSceneBloc, CreateSceneState>(
|
||||
listener: (context, state) {
|
||||
if (state is DeleteSceneSuccess) {
|
||||
if (state.success) {
|
||||
navigateToRoute(context, Routes.homeRoute);
|
||||
BlocProvider.of<SceneBloc>(context)
|
||||
.add(LoadScenes(HomeCubit.getInstance().selectedSpace!.id!));
|
||||
BlocProvider.of<SceneBloc>(context).add(
|
||||
LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
|
||||
}
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
return SceneListTile(
|
||||
onPressed: () {
|
||||
context.read<CreateSceneBloc>().add(DeleteSceneEvent(
|
||||
sceneId: sceneId,
|
||||
unitUuid: HomeCubit.getInstance().selectedSpace!.id!,
|
||||
));
|
||||
},
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8),
|
||||
titleString: isAutomation
|
||||
? StringsManager.deleteAutomation
|
||||
: StringsManager.deleteScene,
|
||||
leadingWidget: (state is DeleteSceneLoading)
|
||||
? const SizedBox(
|
||||
height: 24, width: 24, child: CircularProgressIndicator())
|
||||
: SvgPicture.asset(
|
||||
Assets.assetsDeleteIcon,
|
||||
color: ColorsManager.red,
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user