Refactor CreateSubSpaceDialog to convert to StatefulWidget and manage text controller lifecycle

This commit is contained in:
Faris Armoush
2025-04-17 11:25:39 +03:00
parent 2a77483f46
commit 024fbcdb83

View File

@ -13,7 +13,7 @@ import 'package:syncrow_web/pages/spaces_management/space_model/models/subspace_
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
class CreateSubSpaceDialog extends StatelessWidget {
class CreateSubSpaceDialog extends StatefulWidget {
final bool isEdit;
final String dialogTitle;
final List<SubspaceModel>? existingSubSpaces;
@ -34,14 +34,31 @@ class CreateSubSpaceDialog extends StatelessWidget {
});
@override
Widget build(BuildContext context) {
final textController = TextEditingController();
State<CreateSubSpaceDialog> createState() => _CreateSubSpaceDialogState();
}
class _CreateSubSpaceDialogState extends State<CreateSubSpaceDialog> {
late final TextEditingController _subspaceNameController;
@override
void initState() {
_subspaceNameController = TextEditingController();
super.initState();
}
@override
void dispose() {
_subspaceNameController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (_) {
final bloc = SubSpaceBloc();
if (existingSubSpaces != null) {
for (final subSpace in existingSubSpaces ?? []) {
if (widget.existingSubSpaces != null) {
for (final subSpace in widget.existingSubSpaces ?? []) {
bloc.add(AddSubSpace(subSpace));
}
}
@ -62,7 +79,7 @@ class CreateSubSpaceDialog extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
children: [
Text(
dialogTitle,
widget.dialogTitle,
style: context.textTheme.headlineLarge?.copyWith(
color: ColorsManager.blackColor,
),
@ -115,7 +132,7 @@ class CreateSubSpaceDialog extends StatelessWidget {
SizedBox(
width: 200,
child: TextField(
controller: textController,
controller: _subspaceNameController,
decoration: InputDecoration(
border: InputBorder.none,
hintText: state.subSpaces.isEmpty
@ -126,16 +143,17 @@ class CreateSubSpaceDialog extends StatelessWidget {
),
),
onSubmitted: (value) {
if (value.trim().isNotEmpty) {
final trimmedValue = value.trim();
if (trimmedValue.isNotEmpty) {
context.read<SubSpaceBloc>().add(
AddSubSpace(
SubspaceModel(
subspaceName: value.trim(),
subspaceName: trimmedValue,
disabled: false,
),
),
);
textController.clear();
_subspaceNameController.clear();
}
},
style: context.textTheme.bodyMedium,
@ -172,7 +190,7 @@ class CreateSubSpaceDialog extends StatelessWidget {
? () {
final subSpacesBloc = context.read<SubSpaceBloc>();
final subSpaces = subSpacesBloc.state.subSpaces;
onSave?.call(subSpaces);
widget.onSave?.call(subSpaces);
Navigator.of(context).pop();
}
: null,