Matched design of duplicate space dialog, with the design language of the system.

This commit is contained in:
Faris Armoush
2025-07-24 16:40:03 +03:00
parent 0f9cbd22a2
commit f1cf8d88d3
3 changed files with 27 additions and 13 deletions

View File

@ -31,6 +31,7 @@ class DuplicateSpaceDialog extends StatelessWidget {
child: BlocListener<DuplicateSpaceBloc, DuplicateSpaceState>( child: BlocListener<DuplicateSpaceBloc, DuplicateSpaceState>(
listener: _listener, listener: _listener,
child: DuplicateSpaceDialogForm( child: DuplicateSpaceDialogForm(
initialNameSuffix: '(1)',
initialName: initialName, initialName: initialName,
selectedSpaceUuid: selectedSpaceUuid, selectedSpaceUuid: selectedSpaceUuid,
selectedCommunityUuid: selectedCommunityUuid, selectedCommunityUuid: selectedCommunityUuid,

View File

@ -3,18 +3,22 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/domain/params/duplicate_space_param.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/domain/params/duplicate_space_param.dart';
import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_bloc.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_bloc.dart';
import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/presentation/widgets/duplicate_space_text_field.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/presentation/widgets/duplicate_space_text_field.dart';
import 'package:syncrow_web/pages/space_management_v2/modules/space_details/presentation/widgets/space_details_action_buttons.dart';
import 'package:syncrow_web/utils/color_manager.dart';
class DuplicateSpaceDialogForm extends StatefulWidget { class DuplicateSpaceDialogForm extends StatefulWidget {
const DuplicateSpaceDialogForm({ const DuplicateSpaceDialogForm({
required this.initialName, required this.initialName,
required this.selectedSpaceUuid, required this.selectedSpaceUuid,
required this.selectedCommunityUuid, required this.selectedCommunityUuid,
required this.initialNameSuffix,
super.key, super.key,
}); });
final String initialName; final String initialName;
final String selectedSpaceUuid; final String selectedSpaceUuid;
final String selectedCommunityUuid; final String selectedCommunityUuid;
final String initialNameSuffix;
@override @override
State<DuplicateSpaceDialogForm> createState() => _DuplicateSpaceDialogFormState(); State<DuplicateSpaceDialogForm> createState() => _DuplicateSpaceDialogFormState();
@ -27,7 +31,9 @@ class _DuplicateSpaceDialogFormState extends State<DuplicateSpaceDialogForm> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_nameController = TextEditingController(text: '${widget.initialName}(1)'); _nameController = TextEditingController(
text: '${widget.initialName}${widget.initialNameSuffix}',
);
_nameController.addListener(_validateName); _nameController.addListener(_validateName);
} }
@ -44,9 +50,17 @@ class _DuplicateSpaceDialogFormState extends State<DuplicateSpaceDialogForm> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AlertDialog( return AlertDialog(
title: const SelectableText('Duplicate Space'), title: const SelectableText(
'Duplicate Space',
style: TextStyle(
fontSize: 30,
fontWeight: FontWeight.w400,
color: ColorsManager.blackColor,
),
),
content: Column( content: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 16, spacing: 16,
children: [ children: [
const SelectableText('Enter a new name for the duplicated space:'), const SelectableText('Enter a new name for the duplicated space:'),
@ -58,13 +72,11 @@ class _DuplicateSpaceDialogFormState extends State<DuplicateSpaceDialogForm> {
], ],
), ),
actions: [ actions: [
TextButton( SpaceDetailsActionButtons(
onPressed: Navigator.of(context).pop, spacerFlex: 2,
child: const Text('Cancel'), onSave: _isNameValid ? () => _submit(context) : null,
), onCancel: Navigator.of(context).pop,
TextButton( saveButtonLabel: 'Duplicate',
onPressed: _isNameValid ? () => _submit(context) : null,
child: const Text('Duplicate'),
), ),
], ],
); );

View File

@ -24,9 +24,10 @@ class DuplicateSpaceTextField extends StatelessWidget {
color: ColorsManager.blackColor, color: ColorsManager.blackColor,
), ),
decoration: InputDecoration( decoration: InputDecoration(
label: const Text('Space Name'), filled: true,
border: _border(), fillColor: ColorsManager.boxColor,
enabledBorder: _border(), border: _border(ColorsManager.transparentColor),
enabledBorder: _border(ColorsManager.transparentColor),
focusedBorder: _border(ColorsManager.primaryColor), focusedBorder: _border(ColorsManager.primaryColor),
errorBorder: _border(context.theme.colorScheme.error), errorBorder: _border(context.theme.colorScheme.error),
focusedErrorBorder: _border(context.theme.colorScheme.error), focusedErrorBorder: _border(context.theme.colorScheme.error),
@ -41,7 +42,7 @@ class DuplicateSpaceTextField extends StatelessWidget {
OutlineInputBorder _border([Color? color]) { OutlineInputBorder _border([Color? color]) {
return OutlineInputBorder( return OutlineInputBorder(
borderRadius: BorderRadius.circular(16), borderRadius: BorderRadius.circular(8),
borderSide: BorderSide( borderSide: BorderSide(
color: color ?? ColorsManager.blackColor, color: color ?? ColorsManager.blackColor,
width: 0.5, width: 0.5,