From 17e025b69fe26432ad2a3f62712688e0452e7597 Mon Sep 17 00:00:00 2001 From: hannathkadher Date: Wed, 8 Jan 2025 21:04:03 +0400 Subject: [PATCH] added empty name validation --- .../bloc/create_space_model_bloc.dart | 38 +++++++++++++------ .../bloc/create_space_model_event.dart | 6 +++ .../bloc/create_space_model_state.dart | 8 +++- .../models/space_template_model.dart | 7 ++-- .../models/subspace_template_model.dart | 7 ++-- .../dialog/create_space_model_dialog.dart | 32 ++++++++++------ lib/utils/color_manager.dart | 5 ++- 7 files changed, 70 insertions(+), 33 deletions(-) diff --git a/lib/pages/spaces_management/space_model/bloc/create_space_model_bloc.dart b/lib/pages/spaces_management/space_model/bloc/create_space_model_bloc.dart index 962d30da..8c4f81df 100644 --- a/lib/pages/spaces_management/space_model/bloc/create_space_model_bloc.dart +++ b/lib/pages/spaces_management/space_model/bloc/create_space_model_bloc.dart @@ -59,18 +59,6 @@ class CreateSpaceModelBloc emit(CreateSpaceModelLoaded(_space!)); }); - on((event, emit) { - final currentState = state; - - if (currentState is CreateSpaceModelLoaded) { - final updatedSpaceModel = - currentState.space.copyWith(modelName: event.name); - emit(CreateSpaceModelLoaded(updatedSpaceModel)); - } else { - emit(CreateSpaceModelError("Space template not initialized")); - } - }); - on((event, emit) { final currentState = state; @@ -86,5 +74,31 @@ class CreateSpaceModelBloc emit(CreateSpaceModelError("Space template not initialized")); } }); + + on((event, emit) { + final currentState = state; + print('Current State: $currentState'); + if (currentState is CreateSpaceModelLoaded) { + if (event.name.trim().isEmpty) { + print("set error message"); + + emit(CreateSpaceModelLoaded( + currentState.space, + errorMessage: "Model name cannot be empty", + )); + print('State emitted: CreateSpaceModelLoaded with updated model:'); + + } else { + final updatedSpaceModel = + currentState.space.copyWith(modelName: event.name); + print( + 'State emitted: CreateSpaceModelLoaded with updated model: $updatedSpaceModel'); + + emit(CreateSpaceModelLoaded(updatedSpaceModel)); + } + } else { + emit(CreateSpaceModelError("Space template not initialized")); + } + }); } } diff --git a/lib/pages/spaces_management/space_model/bloc/create_space_model_event.dart b/lib/pages/spaces_management/space_model/bloc/create_space_model_event.dart index 7944a8a8..e4288837 100644 --- a/lib/pages/spaces_management/space_model/bloc/create_space_model_event.dart +++ b/lib/pages/spaces_management/space_model/bloc/create_space_model_event.dart @@ -42,3 +42,9 @@ class AddSubspacesToSpaceTemplate extends CreateSpaceModelEvent { AddSubspacesToSpaceTemplate(this.subspaces); } + +class ValidateSpaceTemplateName extends CreateSpaceModelEvent { + final String name; + + ValidateSpaceTemplateName({required this.name}); +} \ No newline at end of file diff --git a/lib/pages/spaces_management/space_model/bloc/create_space_model_state.dart b/lib/pages/spaces_management/space_model/bloc/create_space_model_state.dart index c05e8744..0fc5c48d 100644 --- a/lib/pages/spaces_management/space_model/bloc/create_space_model_state.dart +++ b/lib/pages/spaces_management/space_model/bloc/create_space_model_state.dart @@ -5,7 +5,7 @@ abstract class CreateSpaceModelState extends Equatable { const CreateSpaceModelState(); @override - List get props => []; + List get props => []; } class CreateSpaceModelInitial extends CreateSpaceModelState {} @@ -14,8 +14,12 @@ class CreateSpaceModelLoading extends CreateSpaceModelState {} class CreateSpaceModelLoaded extends CreateSpaceModelState { final SpaceTemplateModel space; + final String? errorMessage; - CreateSpaceModelLoaded(this.space); + CreateSpaceModelLoaded(this.space, {this.errorMessage}); + + @override + List get props => [space, errorMessage]; } class CreateSpaceModelError extends CreateSpaceModelState { diff --git a/lib/pages/spaces_management/space_model/models/space_template_model.dart b/lib/pages/spaces_management/space_model/models/space_template_model.dart index f62bbcf6..dea68dbc 100644 --- a/lib/pages/spaces_management/space_model/models/space_template_model.dart +++ b/lib/pages/spaces_management/space_model/models/space_template_model.dart @@ -34,9 +34,10 @@ class SpaceTemplateModel extends Equatable { ?.map((e) => SubspaceTemplateModel.fromJson(e)) .toList() ?? [], - tags: (json['tags'] as List) - .map((item) => TagModel.fromJson(item)) - .toList(), + tags: (json['tags'] as List?) + ?.map((item) => TagModel.fromJson(item)) + .toList() ?? + [], ); } diff --git a/lib/pages/spaces_management/space_model/models/subspace_template_model.dart b/lib/pages/spaces_management/space_model/models/subspace_template_model.dart index 119728db..ac71c6b1 100644 --- a/lib/pages/spaces_management/space_model/models/subspace_template_model.dart +++ b/lib/pages/spaces_management/space_model/models/subspace_template_model.dart @@ -18,9 +18,10 @@ class SubspaceTemplateModel { uuid: json['uuid'] ?? '', subspaceName: json['subspaceName'] ?? '', disabled: json['disabled'] ?? false, - tags: (json['tags'] as List) - .map((item) => TagModel.fromJson(item)) - .toList(), + tags: (json['tags'] as List?) + ?.map((item) => TagModel.fromJson(item)) + .toList() ?? + [], ); } diff --git a/lib/pages/spaces_management/space_model/widgets/dialog/create_space_model_dialog.dart b/lib/pages/spaces_management/space_model/widgets/dialog/create_space_model_dialog.dart index b14dca52..01e65039 100644 --- a/lib/pages/spaces_management/space_model/widgets/dialog/create_space_model_dialog.dart +++ b/lib/pages/spaces_management/space_model/widgets/dialog/create_space_model_dialog.dart @@ -61,6 +61,7 @@ class CreateSpaceModelDialog extends StatelessWidget { } else if (state is CreateSpaceModelLoaded) { final updatedSpaceModel = state.space; final subspaces = updatedSpaceModel.subspaceModels ?? []; + final isNameValid = spaceNameController.text.trim().isNotEmpty; return Column( mainAxisSize: MainAxisSize.min, @@ -87,6 +88,7 @@ class CreateSpaceModelDialog extends StatelessWidget { filled: true, fillColor: ColorsManager.textFieldGreyColor, hintText: 'Please enter the name', + errorText: state.errorMessage, hintStyle: const TextStyle( color: ColorsManager.lightGrayColor), border: OutlineInputBorder( @@ -130,19 +132,26 @@ class CreateSpaceModelDialog extends StatelessWidget { const SizedBox(width: 10), Expanded( child: DefaultButton( - onPressed: () { - final updatedSpaceTemplate = - updatedSpaceModel.copyWith( - modelName: spaceNameController.text.trim(), - ); - context.read().add( - CreateSpaceTemplate( - spaceTemplate: updatedSpaceTemplate), - ); - }, + onPressed: state.errorMessage == null || + isNameValid + ? () { + final updatedSpaceTemplate = + updatedSpaceModel.copyWith( + modelName: + spaceNameController.text.trim(), + ); + context.read().add( + CreateSpaceTemplate( + spaceTemplate: + updatedSpaceTemplate), + ); + } + : null, backgroundColor: ColorsManager.secondaryColor, borderRadius: 10, - foregroundColor: ColorsManager.whiteColors, + foregroundColor: isNameValid + ? ColorsManager.whiteColors + : ColorsManager.whiteColorsWithOpacity, child: const Text('OK'), ), ), @@ -158,7 +167,6 @@ class CreateSpaceModelDialog extends StatelessWidget { ); } - // Default case (e.g., CreateSpaceModelInitial) return const Center(child: Text('Initializing...')); }, ), diff --git a/lib/utils/color_manager.dart b/lib/utils/color_manager.dart index eaf1e6b1..60aad8d5 100644 --- a/lib/utils/color_manager.dart +++ b/lib/utils/color_manager.dart @@ -5,8 +5,11 @@ abstract class ColorsManager { static const Color switchOffColor = Color(0x7F8D99AE); static const Color primaryColor = Color(0xFF0030CB); //023DFE static const Color secondaryTextColor = Color(0xFF848484); - static Color primaryColorWithOpacity = const Color(0xFF023DFE).withOpacity(0.6); + static Color primaryColorWithOpacity = + const Color(0xFF023DFE).withOpacity(0.6); static const Color whiteColors = Colors.white; + static Color whiteColorsWithOpacity = Colors.white.withOpacity(0.6); + static const Color secondaryColor = Color(0xFF023DFE); static const Color onSecondaryColor = Color(0xFF023DFE); static Color shadowBlackColor = Colors.black.withOpacity(0.2);