Refactor SpaceSubSpacesDialog and SubSpacesInput to integrate a shared TextEditingController for improved state management of subspace names. This change enhances the input handling and ensures proper disposal of the controller, promoting better resource management.

This commit is contained in:
Faris Armoush
2025-07-24 09:39:33 +03:00
parent 97530dd351
commit 77d6d822cb
2 changed files with 17 additions and 5 deletions

View File

@ -19,6 +19,7 @@ class SpaceSubSpacesDialog extends StatefulWidget {
}
class _SpaceSubSpacesDialogState extends State<SpaceSubSpacesDialog> {
late final TextEditingController _subspaceNameController;
late List<Subspace> _subspaces;
bool get _hasDuplicateNames =>
@ -29,6 +30,13 @@ class _SpaceSubSpacesDialogState extends State<SpaceSubSpacesDialog> {
void initState() {
super.initState();
_subspaces = List.from(widget.subspaces);
_subspaceNameController = TextEditingController();
}
@override
void dispose() {
_subspaceNameController.dispose();
super.dispose();
}
void _handleSubspaceAdded(String name) {
@ -49,6 +57,10 @@ class _SpaceSubSpacesDialogState extends State<SpaceSubSpacesDialog> {
);
void _handleSave() {
final name = _subspaceNameController.text.trim();
if (name.isNotEmpty) {
_handleSubspaceAdded(name);
}
widget.onSave(_subspaces);
Navigator.of(context).pop();
}
@ -65,6 +77,7 @@ class _SpaceSubSpacesDialogState extends State<SpaceSubSpacesDialog> {
subSpaces: _subspaces,
onSubspaceAdded: _handleSubspaceAdded,
onSubspaceDeleted: _handleSubspaceDeleted,
controller: _subspaceNameController,
),
AnimatedSwitcher(
duration: const Duration(milliseconds: 100),

View File

@ -10,29 +10,28 @@ class SubSpacesInput extends StatefulWidget {
required this.subSpaces,
required this.onSubspaceAdded,
required this.onSubspaceDeleted,
required this.controller,
});
final List<Subspace> subSpaces;
final void Function(String name) onSubspaceAdded;
final void Function(String uuid) onSubspaceDeleted;
final TextEditingController controller;
@override
State<SubSpacesInput> createState() => _SubSpacesInputState();
}
class _SubSpacesInputState extends State<SubSpacesInput> {
late final TextEditingController _subspaceNameController;
late final FocusNode _focusNode;
@override
void initState() {
super.initState();
_subspaceNameController = TextEditingController();
_focusNode = FocusNode();
}
@override
void dispose() {
_subspaceNameController.dispose();
_focusNode.dispose();
super.dispose();
}
@ -81,7 +80,7 @@ class _SubSpacesInputState extends State<SubSpacesInput> {
width: 200,
child: TextField(
focusNode: _focusNode,
controller: _subspaceNameController,
controller: widget.controller,
decoration: InputDecoration(
border: InputBorder.none,
hintText: widget.subSpaces.isEmpty ? 'Please enter the name' : null,
@ -93,7 +92,7 @@ class _SubSpacesInputState extends State<SubSpacesInput> {
final trimmedValue = value.trim();
if (trimmedValue.isNotEmpty) {
widget.onSubspaceAdded(trimmedValue);
_subspaceNameController.clear();
widget.controller.clear();
_focusNode.requestFocus();
}
},