SP-1433-FE-Text-Alignment-Issue-in-UI-Component-in-adding-subspace-in-a-space

This commit is contained in:
Faris Armoush
2025-04-17 09:33:10 +03:00
parent d538b3667e
commit 726c173a76
3 changed files with 33 additions and 60 deletions

View File

@ -8,6 +8,8 @@ import 'package:syncrow_web/pages/spaces_management/all_spaces/model/tag.dart';
import 'package:syncrow_web/pages/spaces_management/create_subspace/bloc/subspace_bloc.dart'; import 'package:syncrow_web/pages/spaces_management/create_subspace/bloc/subspace_bloc.dart';
import 'package:syncrow_web/pages/spaces_management/create_subspace/bloc/subspace_event.dart'; import 'package:syncrow_web/pages/spaces_management/create_subspace/bloc/subspace_event.dart';
import 'package:syncrow_web/pages/spaces_management/create_subspace/bloc/subspace_state.dart'; import 'package:syncrow_web/pages/spaces_management/create_subspace/bloc/subspace_state.dart';
import 'package:syncrow_web/pages/spaces_management/create_subspace_model/widgets/subspace_chip.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/models/subspace_template_model.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
class CreateSubSpaceDialog extends StatelessWidget { class CreateSubSpaceDialog extends StatelessWidget {
@ -20,15 +22,14 @@ class CreateSubSpaceDialog extends StatelessWidget {
final Function(List<SubspaceModel>?)? onSave; final Function(List<SubspaceModel>?)? onSave;
const CreateSubSpaceDialog( const CreateSubSpaceDialog(
{Key? key, {super.key,
required this.isEdit, required this.isEdit,
required this.dialogTitle, required this.dialogTitle,
this.existingSubSpaces, this.existingSubSpaces,
required this.spaceName, required this.spaceName,
required this.spaceTags, required this.spaceTags,
required this.products, required this.products,
required this.onSave}) required this.onSave});
: super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -78,8 +79,10 @@ class CreateSubSpaceDialog extends StatelessWidget {
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
), ),
child: Wrap( child: Wrap(
spacing: 8.0, spacing: 8,
runSpacing: 8.0, runSpacing: 8,
alignment: WrapAlignment.start,
crossAxisAlignment: WrapCrossAlignment.center,
children: [ children: [
...state.subSpaces.asMap().entries.map( ...state.subSpaces.asMap().entries.map(
(entry) { (entry) {
@ -97,44 +100,14 @@ class CreateSubSpaceDialog extends StatelessWidget {
lowerName) lowerName)
.map((e) => e.key) .map((e) => e.key)
.toList(); .toList();
final isDuplicate = final isDuplicate = duplicateIndices.length > 1 &&
duplicateIndices.length > 1 && duplicateIndices.indexOf(index) != 0;
duplicateIndices.indexOf(index) != 0; return SubspaceChip(
subSpace: SubspaceTemplateModel(
return Chip( subspaceName: entry.value.subspaceName,
label: Text(subSpace.subspaceName, disabled: entry.value.disabled,
style: Theme.of(context)
.textTheme
.bodyMedium
?.copyWith(
color:
ColorsManager.spaceColor)),
backgroundColor: ColorsManager.whiteColors,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: BorderSide(
color: isDuplicate
? ColorsManager.red
: ColorsManager.transparentColor,
width: 0,
),
),
deleteIcon: Container(
width: 24,
height: 24,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: ColorsManager.lightGrayColor,
width: 1.5,
),
),
child: const Icon(
Icons.close,
size: 16,
color: ColorsManager.lightGrayColor,
),
), ),
isDuplicate: isDuplicate,
onDeleted: () => context onDeleted: () => context
.read<SubSpaceBloc>() .read<SubSpaceBloc>()
.add(RemoveSubSpace(subSpace)), .add(RemoveSubSpace(subSpace)),
@ -154,19 +127,18 @@ class CreateSubSpaceDialog extends StatelessWidget {
.textTheme .textTheme
.bodySmall .bodySmall
?.copyWith( ?.copyWith(
color: ColorsManager color:
.lightGrayColor)), ColorsManager.lightGrayColor)),
onSubmitted: (value) { onSubmitted: (value) {
if (value.trim().isNotEmpty) { if (value.trim().isNotEmpty) {
context.read<SubSpaceBloc>().add( context.read<SubSpaceBloc>().add(AddSubSpace(
AddSubSpace(SubspaceModel( SubspaceModel(
subspaceName: value.trim(), subspaceName: value.trim(),
disabled: false))); disabled: false)));
textController.clear(); textController.clear();
} }
}, },
style: style: Theme.of(context).textTheme.bodyMedium),
Theme.of(context).textTheme.bodyMedium),
), ),
], ],
), ),
@ -175,12 +147,10 @@ class CreateSubSpaceDialog extends StatelessWidget {
Padding( Padding(
padding: const EdgeInsets.only(top: 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Text(state.errorMessage, child: Text(state.errorMessage,
style: Theme.of(context) style:
.textTheme Theme.of(context).textTheme.bodySmall?.copyWith(
.bodySmall color: ColorsManager.warningRed,
?.copyWith( )),
color: ColorsManager.warningRed,
)),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
Row( Row(

View File

@ -1,4 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/spaces_management/create_subspace_model/bloc/subspace_model_bloc.dart';
import 'package:syncrow_web/pages/spaces_management/create_subspace_model/bloc/subspace_model_event.dart';
import 'package:syncrow_web/pages/spaces_management/create_subspace_model/widgets/subspace_chip.dart'; import 'package:syncrow_web/pages/spaces_management/create_subspace_model/widgets/subspace_chip.dart';
import 'package:syncrow_web/pages/spaces_management/create_subspace_model/widgets/subspaces_textfield.dart'; import 'package:syncrow_web/pages/spaces_management/create_subspace_model/widgets/subspaces_textfield.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/models/subspace_template_model.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/subspace_template_model.dart';
@ -51,6 +54,9 @@ class CreateSubspaceModelChipsBox extends StatelessWidget {
return SubspaceChip( return SubspaceChip(
subSpace: subSpace, subSpace: subSpace,
isDuplicate: isDuplicate, isDuplicate: isDuplicate,
onDeleted: () => context.read<SubSpaceModelBloc>().add(
RemoveSubSpaceModel(subSpace),
),
); );
}, },
), ),

View File

@ -1,7 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/spaces_management/create_subspace_model/bloc/subspace_model_bloc.dart';
import 'package:syncrow_web/pages/spaces_management/create_subspace_model/bloc/subspace_model_event.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/models/subspace_template_model.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/subspace_template_model.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart';
@ -11,10 +8,12 @@ class SubspaceChip extends StatelessWidget {
required this.subSpace, required this.subSpace,
required this.isDuplicate, required this.isDuplicate,
super.key, super.key,
required this.onDeleted,
}); });
final SubspaceTemplateModel subSpace; final SubspaceTemplateModel subSpace;
final bool isDuplicate; final bool isDuplicate;
final void Function() onDeleted;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -50,9 +49,7 @@ class SubspaceChip extends StatelessWidget {
), ),
), ),
), ),
onDeleted: () => context.read<SubSpaceModelBloc>().add( onDeleted: onDeleted,
RemoveSubSpaceModel(subSpace),
),
); );
} }
} }