import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/devices/model/device_control_model.dart'; import 'package:syncrow_app/features/devices/model/device_model.dart'; import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart'; import 'package:syncrow_app/features/scene/helper/scene_operations_data_helper.dart'; import 'package:syncrow_app/features/scene/model/scene_static_function.dart'; import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_countdown.dart'; import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_functions_body.dart'; import 'package:syncrow_app/features/scene/widgets/alert_dialogs/alert_dialog_temperature_body.dart'; import 'package:syncrow_app/features/scene/widgets/scene_list_tile.dart'; import 'package:syncrow_app/features/shared_widgets/default_container.dart'; import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart'; import 'package:syncrow_app/features/shared_widgets/light_divider.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; import 'package:syncrow_app/navigation/routing_constants.dart'; import 'package:syncrow_app/utils/context_extension.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; class DeviceFunctionsView extends StatelessWidget with SceneOperationsDataHelper { const DeviceFunctionsView({super.key}); @override Widget build(BuildContext context) { /// this whole widget needs a refactor later /// /// static functions based on type final device = ModalRoute.of(context)?.settings.arguments as DeviceModel; /// static custom functions based on type /// used for now until later backend fixes List functions = []; if (device.functions.isNotEmpty) { functions = getFunctionsWithIcons( type: device.productType, functions: device.functions, deviceId: device.uuid ?? '', deviceName: device.name ?? '', ); } return DefaultScaffold( title: getTitle(type: device.productType), actions: [ TextButton( onPressed: () { Navigator.popUntil(context, (route) { return route.settings.name == Routes.sceneTasksRoute; }); }, child: BodyMedium( text: 'Save', fontWeight: FontWeight.normal, fontColor: ColorsManager.secondaryColor.withOpacity(0.6), ), ), ], leading: TextButton( onPressed: () => Navigator.pop(context), child: BodyMedium( text: 'Cancel', fontWeight: FontWeight.normal, fontColor: ColorsManager.textPrimaryColor.withOpacity(0.6), ), ), leadingWidth: 80, padding: EdgeInsets.zero, child: Padding( padding: const EdgeInsets.only(top: 24.0), child: ListView.builder( shrinkWrap: true, itemCount: functions.length, padding: EdgeInsets.zero, physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { return DefaultContainer( padding: index == 0 ? const EdgeInsets.only(top: 8) : index == functions.length - 1 ? const EdgeInsets.only(bottom: 8) : EdgeInsets.zero, margin: EdgeInsets.zero, borderRadius: index == 0 ? const BorderRadius.only( topLeft: Radius.circular(20), topRight: Radius.circular(20)) : index == functions.length - 1 ? const BorderRadius.only( bottomLeft: Radius.circular(20), bottomRight: Radius.circular(20)) : BorderRadius.zero, child: Column( mainAxisSize: MainAxisSize.min, children: [ BlocBuilder( builder: (context, state) { return SceneListTile( iconsSize: 32, minLeadingWidth: 20, assetPath: functions[index].icon, titleString: functions[index].operationName, trailingWidget: const Row( mainAxisSize: MainAxisSize.min, children: [ /// selected value or the default value // BodyMedium(text: ), Icon( Icons.arrow_forward_ios_rounded, color: ColorsManager.greyColor, size: 16, ), ], ), onPressed: () { context.customAlertDialog( alertBody: functions[index].code == 'temp_set' ? AlertDialogTemperatureBody( index: index, functions: functions) : functions[index].code.contains('countdown') ? AlertDialogCountdown( durationValue: functions[index] .operationalValues .first .value) : AlertDialogFunctionsOperationsBody( index: index, functions: functions), title: functions[index].operationName, onConfirm: () { final selectedValue = context .read() .selectedValue; context .read() .add(AddTaskEvent( deviceControlModel: DeviceControlModel( deviceId: device.uuid, code: functions[index].code, value: selectedValue, ), deviceId: device.uuid ?? '', operation: functions[index].operationName, icon: device.icon ?? '', deviceName: device.name ?? '', )); Navigator.pop(context); }, ); }, ); }, ), index != functions.length - 1 ? SizedBox( width: context.width * 0.8, child: const LightDivider()) : const SizedBox(), ], ), ); }, ), )); } }