From 3779176978c160012d38e85eae4a357a4018dd58 Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Wed, 23 Jul 2025 10:52:18 +0300 Subject: [PATCH] Add `DuplicateSpaceDialog` widget for user interaction in duplicate space management. --- .../views/duplicate_space_dialog.dart | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 lib/pages/space_management_v2/modules/duplicate_space/presentation/views/duplicate_space_dialog.dart diff --git a/lib/pages/space_management_v2/modules/duplicate_space/presentation/views/duplicate_space_dialog.dart b/lib/pages/space_management_v2/modules/duplicate_space/presentation/views/duplicate_space_dialog.dart new file mode 100644 index 00000000..f7c491d7 --- /dev/null +++ b/lib/pages/space_management_v2/modules/duplicate_space/presentation/views/duplicate_space_dialog.dart @@ -0,0 +1,68 @@ +import 'package:flutter/material.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/presentation/widgets/duplicate_space_text_field.dart'; + +class DuplicateSpaceDialog extends StatefulWidget { + const DuplicateSpaceDialog({ + required this.initialName, + required this.onSubmit, + super.key, + }); + + final String initialName; + final void Function(String) onSubmit; + + @override + State createState() => _DuplicateSpaceDialogState(); +} + +class _DuplicateSpaceDialogState extends State { + late final TextEditingController _nameController; + bool _isNameValid = true; + + @override + void initState() { + super.initState(); + _nameController = TextEditingController(text: '${widget.initialName}(1)'); + _nameController.addListener(_validateName); + } + + void _validateName() => setState( + () => _isNameValid = _nameController.text.trim() != widget.initialName, + ); + + @override + void dispose() { + _nameController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AlertDialog( + title: const SelectableText('Duplicate Space'), + content: Column( + mainAxisSize: MainAxisSize.min, + spacing: 16, + children: [ + const SelectableText('Enter a new name for the duplicated space:'), + DuplicateSpaceTextField( + nameController: _nameController, + isNameValid: _isNameValid, + initialName: widget.initialName, + ), + ], + ), + actions: [ + TextButton( + onPressed: Navigator.of(context).pop, + child: const Text('Cancel'), + ), + TextButton( + onPressed: + _isNameValid ? () => widget.onSubmit(_nameController.text) : null, + child: const Text('Duplicate'), + ), + ], + ); + } +}