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/helper/scene_logic_helper.dart'; import 'package:syncrow_app/features/shared_widgets/default_button.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart'; import 'package:syncrow_app/utils/context_extension.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; class CreateSceneSaveButton extends StatefulWidget { const CreateSceneSaveButton({ super.key, required this.sceneName, required this.sceneId, }); final String sceneName; final String sceneId; @override State createState() => _CreateSceneSaveButtonState(); } class _CreateSceneSaveButtonState extends State with SceneLogicHelper { late TextEditingController sceneNameController; @override void initState() { sceneNameController = TextEditingController( text: widget.sceneName.isNotEmpty ? widget.sceneName : ''); super.initState(); } @override void dispose() { sceneNameController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return BlocConsumer( listener: (context, state) { if (state is CreateSceneWithTasks) { if (state.success == true) { context.showCustomSnackbar( message: 'Scene created successfully', icon: const Icon( Icons.check, color: Colors.green, ), ); sceneNameController.text = ''; } } else if (state is CreateSceneError) { context.showCustomSnackbar( message: state.message, icon: const Icon( Icons.error, color: Colors.red, ), ); } }, builder: (context, state) { return DefaultButton( onPressed: widget.sceneName.isNotEmpty ? () { final tasks = context.read().tasksList; handleSaveButtonPress( context, sceneNameController, tasks, updateScene: true, sceneId: widget.sceneId, ); } : () { context.customAlertDialog( alertBody: Padding( padding: const EdgeInsets.only(left: 8, right: 8, bottom: 8), child: SizedBox( height: 40, child: SearchBar( controller: sceneNameController, elevation: WidgetStateProperty.all(0), textStyle: WidgetStateProperty.all(context.bodyMedium), hintStyle: WidgetStateProperty.all( context.bodyMedium.copyWith( fontSize: 14, color: ColorsManager.secondaryTextColor), ), hintText: 'Enter scene name', backgroundColor: WidgetStateProperty.all( ColorsManager.backgroundColor), ), ), ), title: 'Scene Name', onConfirm: () { if (sceneNameController.text.isNotEmpty) { final tasks = context.read().tasksList; handleSaveButtonPress( context, sceneNameController, tasks, updateScene: false, sceneId: widget.sceneId, ); } }, ); }, customButtonStyle: ButtonStyle( backgroundColor: WidgetStateProperty.all( ColorsManager.primaryColor, ), ), isLoading: state is CreateSceneLoading, child: BodyLarge( text: 'Save', style: context.bodyLarge.copyWith(color: Colors.white), ), ); }, ); } }