From 95ae50d12dd97ec616d22f0b14d9ab70c2ea7920 Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Tue, 24 Jun 2025 10:16:03 +0300 Subject: [PATCH 1/6] navigates to selected space when changed on sidebar in space management canvas. --- .../widgets/community_structure_canvas.dart | 82 ++++++++++++------- .../widgets/plus_button_widget.dart | 14 +--- .../widgets/space_card_widget.dart | 51 ++++-------- .../main_module/widgets/space_cell.dart | 17 ++-- .../space_management_community_structure.dart | 12 ++- .../communities_tree_selection_event.dart | 2 +- 6 files changed, 86 insertions(+), 92 deletions(-) diff --git a/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart b/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart index 92c5add6..22b4536a 100644 --- a/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart +++ b/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart @@ -1,21 +1,25 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/space_management_v2/main_module/models/space_connection_model.dart'; import 'package:syncrow_web/pages/space_management_v2/main_module/painters/spaces_connections_arrow_painter.dart'; import 'package:syncrow_web/pages/space_management_v2/main_module/widgets/space_card_widget.dart'; import 'package:syncrow_web/pages/space_management_v2/main_module/widgets/space_cell.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/community_model.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/space_model.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/communities/presentation/communities_tree_selection_bloc/communities_tree_selection_bloc.dart'; class CommunityStructureCanvas extends StatefulWidget { const CommunityStructureCanvas({ required this.community, + required this.selectedSpace, super.key, }); final CommunityModel community; + final SpaceModel? selectedSpace; @override - State createState() =>_CommunityStructureCanvasState(); + State createState() => _CommunityStructureCanvasState(); } class _CommunityStructureCanvasState extends State @@ -25,19 +29,30 @@ class _CommunityStructureCanvasState extends State final double _cardHeight = 90.0; final double _horizontalSpacing = 150.0; final double _verticalSpacing = 120.0; - String? _selectedSpaceUuid; late TransformationController _transformationController; late AnimationController _animationController; @override void initState() { - super.initState(); _transformationController = TransformationController(); _animationController = AnimationController( vsync: this, - duration: const Duration(milliseconds: 100), + duration: const Duration(milliseconds: 150), ); + super.initState(); + } + + @override + void didUpdateWidget(covariant CommunityStructureCanvas oldWidget) { + super.didUpdateWidget(oldWidget); + if (widget.selectedSpace?.uuid != oldWidget.selectedSpace?.uuid) { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted) { + _animateToSpace(widget.selectedSpace); + } + }); + } } @override @@ -63,15 +78,16 @@ class _CommunityStructureCanvasState extends State }); } - void _onSpaceTapped(String spaceUuid) { - setState(() { - _selectedSpaceUuid = spaceUuid; - }); + void _animateToSpace(SpaceModel? space) { + if (space == null) { + _runAnimation(Matrix4.identity()); + return; + } - final position = _positions[spaceUuid]; + final position = _positions[space.uuid]; if (position == null) return; - const scale = 2.0; + const scale = 1.5; final viewSize = context.size; if (viewSize == null) return; @@ -86,11 +102,19 @@ class _CommunityStructureCanvasState extends State _runAnimation(matrix); } + void _onSpaceTapped(SpaceModel? space) { + context.read().add( + SelectSpaceEvent(community: widget.community, space: space), + ); + } + void _resetSelectionAndZoom() { - setState(() { - _selectedSpaceUuid = null; - }); - _runAnimation(Matrix4.identity()); + context.read().add( + SelectSpaceEvent( + community: widget.community, + space: null, + ), + ); } void _calculateLayout( @@ -159,7 +183,7 @@ class _CommunityStructureCanvasState extends State painter: SpacesConnectionsArrowPainter( connections: connections, positions: _positions, - selectedSpaceUuid: _selectedSpaceUuid, + selectedSpaceUuid: widget.selectedSpace?.uuid, ), child: Stack(alignment: AlignmentDirectional.center, children: widgets), ), @@ -182,24 +206,24 @@ class _CommunityStructureCanvasState extends State width: _cardWidth, height: _cardHeight, child: SpaceCardWidget( - index: spaces.indexOf(space), - onPositionChanged: (newPosition) {}, - buildSpaceContainer: (index) { + buildSpaceContainer: () { return Opacity( - opacity: 1.0, + opacity: widget.selectedSpace == null + ? 1.0 + : widget.selectedSpace?.uuid != space.uuid + ? 0.5 + : 1.0, child: SpaceCell( - index: index, - onTap: () => _onSpaceTapped(space.uuid), + onTap: () => _onSpaceTapped(space), icon: space.icon, name: space.spaceName, ), ); }, - screenSize: MediaQuery.sizeOf(context), - position: position, - isHovered: false, - onHoverChanged: (int index, bool isHovered) {}, - onButtonTap: (int index, Offset newPosition) {}, + onTap: () => showDialog( + context: context, + builder: (context) => const Text('123'), + ), ), ), ); @@ -218,7 +242,7 @@ class _CommunityStructureCanvasState extends State transformationController: _transformationController, boundaryMargin: EdgeInsets.symmetric( horizontal: MediaQuery.sizeOf(context).width * 0.3, - vertical: MediaQuery.sizeOf(context).height * 0.2, + vertical: MediaQuery.sizeOf(context).height * 0.3, ), minScale: 0.5, maxScale: 3.0, @@ -226,8 +250,8 @@ class _CommunityStructureCanvasState extends State child: GestureDetector( onTap: _resetSelectionAndZoom, child: SizedBox( - width: MediaQuery.sizeOf(context).width * 2, - height: MediaQuery.sizeOf(context).height * 2, + width: MediaQuery.sizeOf(context).width * 5, + height: MediaQuery.sizeOf(context).height * 5, child: Stack(children: treeWidgets), ), ), diff --git a/lib/pages/space_management_v2/main_module/widgets/plus_button_widget.dart b/lib/pages/space_management_v2/main_module/widgets/plus_button_widget.dart index 755a6ab9..68169861 100644 --- a/lib/pages/space_management_v2/main_module/widgets/plus_button_widget.dart +++ b/lib/pages/space_management_v2/main_module/widgets/plus_button_widget.dart @@ -2,15 +2,11 @@ import 'package:flutter/material.dart'; import 'package:syncrow_web/utils/color_manager.dart'; class PlusButtonWidget extends StatelessWidget { - final int index; - final String direction; final Offset offset; - final void Function(int index, Offset newPosition) onButtonTap; + final void Function() onButtonTap; const PlusButtonWidget({ super.key, - required this.index, - required this.direction, required this.offset, required this.onButtonTap, }); @@ -18,13 +14,7 @@ class PlusButtonWidget extends StatelessWidget { @override Widget build(BuildContext context) { return GestureDetector( - onTap: () { - if (direction == 'down') { - onButtonTap(index, const Offset(0, 150)); - } else { - onButtonTap(index, const Offset(150, 0)); - } - }, + onTap: onButtonTap, child: Container( width: 30, height: 30, diff --git a/lib/pages/space_management_v2/main_module/widgets/space_card_widget.dart b/lib/pages/space_management_v2/main_module/widgets/space_card_widget.dart index 1ce28502..e91e577f 100644 --- a/lib/pages/space_management_v2/main_module/widgets/space_card_widget.dart +++ b/lib/pages/space_management_v2/main_module/widgets/space_card_widget.dart @@ -1,60 +1,39 @@ import 'package:flutter/material.dart'; import 'package:syncrow_web/pages/space_management_v2/main_module/widgets/plus_button_widget.dart'; -class SpaceCardWidget extends StatelessWidget { - final int index; - final Size screenSize; - final Offset position; - final bool isHovered; - final void Function(int index, bool isHovered) onHoverChanged; - final void Function(int index, Offset newPosition) onButtonTap; - final Widget Function(int index) buildSpaceContainer; - final ValueChanged onPositionChanged; +class SpaceCardWidget extends StatefulWidget { + final void Function() onTap; + final Widget Function() buildSpaceContainer; const SpaceCardWidget({ - super.key, - required this.index, - required this.onPositionChanged, - required this.screenSize, - required this.position, - required this.isHovered, - required this.onHoverChanged, - required this.onButtonTap, + required this.onTap, required this.buildSpaceContainer, + super.key, }); + @override + State createState() => _SpaceCardWidgetState(); +} + +class _SpaceCardWidgetState extends State { + bool isHovered = false; @override Widget build(BuildContext context) { return MouseRegion( - onEnter: (_) => onHoverChanged(index, true), - onExit: (_) => onHoverChanged(index, false), + onEnter: (_) => setState(() => isHovered = true), + onExit: (_) => setState(() => isHovered = false), child: SizedBox( - width: 150, - height: 90, child: Stack( clipBehavior: Clip.none, alignment: Alignment.center, children: [ - buildSpaceContainer(index), - + widget.buildSpaceContainer(), if (isHovered) Positioned( bottom: 0, child: PlusButtonWidget( - index: index, - direction: 'down', offset: Offset.zero, - onButtonTap: onButtonTap, - ), - ), - if (isHovered) - Positioned( - right: -15, - child: PlusButtonWidget( - index: index, - direction: 'right', - offset: Offset.zero, - onButtonTap: onButtonTap, + onButtonTap: widget.onTap, ), ), ], diff --git a/lib/pages/space_management_v2/main_module/widgets/space_cell.dart b/lib/pages/space_management_v2/main_module/widgets/space_cell.dart index 1b08835a..bcde6560 100644 --- a/lib/pages/space_management_v2/main_module/widgets/space_cell.dart +++ b/lib/pages/space_management_v2/main_module/widgets/space_cell.dart @@ -1,29 +1,23 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:syncrow_web/utils/color_manager.dart'; +import 'package:syncrow_web/utils/extension/build_context_x.dart'; class SpaceCell extends StatelessWidget { - final int index; final String icon; final String name; - final VoidCallback? onDoubleTap; final VoidCallback? onTap; const SpaceCell({ super.key, - required this.index, required this.icon, required this.name, - this.onTap, - this.onDoubleTap, + required this.onTap, }); @override Widget build(BuildContext context) { - final theme = Theme.of(context); - return GestureDetector( - onDoubleTap: onDoubleTap, onTap: onTap, child: Container( width: 150, @@ -36,7 +30,7 @@ class SpaceCell extends StatelessWidget { Expanded( child: Text( name, - style: theme.textTheme.bodyLarge?.copyWith( + style: context.textTheme.bodyLarge?.copyWith( fontWeight: FontWeight.bold, color: ColorsManager.blackColor, ), @@ -63,7 +57,10 @@ class SpaceCell extends StatelessWidget { child: Center( child: SvgPicture.asset( icon, - color: ColorsManager.whiteColors, + colorFilter: const ColorFilter.mode( + ColorsManager.whiteColors, + BlendMode.srcIn, + ), width: 24, height: 24, ), diff --git a/lib/pages/space_management_v2/main_module/widgets/space_management_community_structure.dart b/lib/pages/space_management_v2/main_module/widgets/space_management_community_structure.dart index 11ee5078..6fe80835 100644 --- a/lib/pages/space_management_v2/main_module/widgets/space_management_community_structure.dart +++ b/lib/pages/space_management_v2/main_module/widgets/space_management_community_structure.dart @@ -9,14 +9,18 @@ class SpaceManagementCommunityStructure extends StatelessWidget { @override Widget build(BuildContext context) { - final selectedCommunity = - context.watch().state.selectedCommunity!; + final selectionBloc = context.watch().state; + final selectedCommunity = selectionBloc.selectedCommunity; + final selectedSpace = selectionBloc.selectedSpace; const spacer = Spacer(flex: 10); return Visibility( - visible: selectedCommunity.spaces.isNotEmpty, + visible: selectedCommunity!.spaces.isNotEmpty, replacement: const Row( children: [spacer, Expanded(child: CreateSpaceButton()), spacer]), - child: CommunityStructureCanvas(community: selectedCommunity), + child: CommunityStructureCanvas( + community: selectedCommunity, + selectedSpace: selectedSpace, + ), ); } } diff --git a/lib/pages/space_management_v2/modules/communities/presentation/communities_tree_selection_bloc/communities_tree_selection_event.dart b/lib/pages/space_management_v2/modules/communities/presentation/communities_tree_selection_bloc/communities_tree_selection_event.dart index 40a41f74..21088632 100644 --- a/lib/pages/space_management_v2/modules/communities/presentation/communities_tree_selection_bloc/communities_tree_selection_event.dart +++ b/lib/pages/space_management_v2/modules/communities/presentation/communities_tree_selection_bloc/communities_tree_selection_event.dart @@ -16,7 +16,7 @@ final class SelectCommunityEvent extends CommunitiesTreeSelectionEvent { } final class SelectSpaceEvent extends CommunitiesTreeSelectionEvent { - final SpaceModel space; + final SpaceModel? space; final CommunityModel community; const SelectSpaceEvent({required this.space, required this.community}); From 87b45fff1dfee05f8ae716ca7eed31589864d6db Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Tue, 24 Jun 2025 10:21:25 +0300 Subject: [PATCH 2/6] removed expanded widget that caused a size exception. --- .../space_management_templates_view.dart | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/lib/pages/space_management_v2/main_module/widgets/space_management_templates_view.dart b/lib/pages/space_management_v2/main_module/widgets/space_management_templates_view.dart index dd46d2c1..138dbbc4 100644 --- a/lib/pages/space_management_v2/main_module/widgets/space_management_templates_view.dart +++ b/lib/pages/space_management_v2/main_module/widgets/space_management_templates_view.dart @@ -7,26 +7,24 @@ class SpaceManagementTemplatesView extends StatelessWidget { const SpaceManagementTemplatesView({super.key}); @override Widget build(BuildContext context) { - return Expanded( - child: ColoredBox( - color: ColorsManager.whiteColors, - child: GridView.builder( - padding: const EdgeInsets.symmetric(horizontal: 40, vertical: 20), - gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: 400, - mainAxisSpacing: 10, - crossAxisSpacing: 10, - childAspectRatio: 2.0, - ), - itemCount: _gridItems(context).length, - itemBuilder: (context, index) { - final model = _gridItems(context)[index]; - return CommunityTemplateCell( - onTap: model.onTap, - title: model.title, - ); - }, + return ColoredBox( + color: ColorsManager.whiteColors, + child: GridView.builder( + padding: const EdgeInsets.symmetric(horizontal: 40, vertical: 20), + gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: 400, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + childAspectRatio: 2.0, ), + itemCount: _gridItems(context).length, + itemBuilder: (context, index) { + final model = _gridItems(context)[index]; + return CommunityTemplateCell( + onTap: model.onTap, + title: model.title, + ); + }, ), ); } From 0fb91496135e059fc00d2aea2f13f62b253a4ec1 Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Tue, 24 Jun 2025 10:26:56 +0300 Subject: [PATCH 3/6] Selects all children of a space when selecting a parent. --- .../spaces_connections_arrow_painter.dart | 10 +++--- .../widgets/community_structure_canvas.dart | 36 ++++++++++++++----- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/lib/pages/space_management_v2/main_module/painters/spaces_connections_arrow_painter.dart b/lib/pages/space_management_v2/main_module/painters/spaces_connections_arrow_painter.dart index fcf523bf..cad82a60 100644 --- a/lib/pages/space_management_v2/main_module/painters/spaces_connections_arrow_painter.dart +++ b/lib/pages/space_management_v2/main_module/painters/spaces_connections_arrow_painter.dart @@ -7,21 +7,21 @@ class SpacesConnectionsArrowPainter extends CustomPainter { final Map positions; final double cardWidth = 150.0; final double cardHeight = 90.0; - final String? selectedSpaceUuid; + final Set highlightedUuids; SpacesConnectionsArrowPainter({ required this.connections, required this.positions, - this.selectedSpaceUuid, + required this.highlightedUuids, }); @override void paint(Canvas canvas, Size size) { for (final connection in connections) { - final isSelected = connection.to == selectedSpaceUuid; + final isSelected = highlightedUuids.contains(connection.from); final paint = Paint() ..color = isSelected - ? ColorsManager.primaryColor + ? ColorsManager.blackColor : ColorsManager.blackColor.withValues(alpha: 0.5) ..strokeWidth = 2.0 ..style = PaintingStyle.stroke; @@ -46,7 +46,7 @@ class SpacesConnectionsArrowPainter extends CustomPainter { final circlePaint = Paint() ..color = isSelected - ? ColorsManager.primaryColor + ? ColorsManager.blackColor : ColorsManager.blackColor.withValues(alpha: 0.5) ..style = PaintingStyle.fill ..blendMode = BlendMode.srcIn; diff --git a/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart b/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart index 22b4536a..04795c11 100644 --- a/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart +++ b/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart @@ -62,6 +62,15 @@ class _CommunityStructureCanvasState extends State super.dispose(); } + Set _getAllDescendantUuids(SpaceModel space) { + final uuids = {}; + for (final child in space.children) { + uuids.add(child.uuid); + uuids.addAll(_getAllDescendantUuids(child)); + } + return uuids; + } + void _runAnimation(Matrix4 target) { final animation = Matrix4Tween( begin: _transformationController.value, @@ -174,16 +183,23 @@ class _CommunityStructureCanvasState extends State _calculateLayout(community.spaces, 0, {}); + final selectedSpace = widget.selectedSpace; + final highlightedUuids = {}; + if (selectedSpace != null) { + highlightedUuids.add(selectedSpace.uuid); + highlightedUuids.addAll(_getAllDescendantUuids(selectedSpace)); + } + final widgets = []; final connections = []; - _generateWidgets(community.spaces, widgets, connections); + _generateWidgets(community.spaces, widgets, connections, highlightedUuids); return [ CustomPaint( painter: SpacesConnectionsArrowPainter( connections: connections, positions: _positions, - selectedSpaceUuid: widget.selectedSpace?.uuid, + highlightedUuids: highlightedUuids, ), child: Stack(alignment: AlignmentDirectional.center, children: widgets), ), @@ -194,11 +210,15 @@ class _CommunityStructureCanvasState extends State List spaces, List widgets, List connections, + Set highlightedUuids, ) { for (final space in spaces) { final position = _positions[space.uuid]; if (position == null) continue; + final isHighlighted = highlightedUuids.contains(space.uuid); + final hasNoSelectedSpace = widget.selectedSpace == null; + widgets.add( Positioned( left: position.dx, @@ -208,11 +228,7 @@ class _CommunityStructureCanvasState extends State child: SpaceCardWidget( buildSpaceContainer: () { return Opacity( - opacity: widget.selectedSpace == null - ? 1.0 - : widget.selectedSpace?.uuid != space.uuid - ? 0.5 - : 1.0, + opacity: hasNoSelectedSpace || isHighlighted ? 1.0 : 0.5, child: SpaceCell( onTap: () => _onSpaceTapped(space), icon: space.icon, @@ -229,9 +245,11 @@ class _CommunityStructureCanvasState extends State ); for (final child in space.children) { - connections.add(SpaceConnectionModel(from: space.uuid, to: child.uuid)); + connections.add( + SpaceConnectionModel(from: space.uuid, to: child.uuid), + ); } - _generateWidgets(space.children, widgets, connections); + _generateWidgets(space.children, widgets, connections, highlightedUuids); } } From 329b2ba472ca1f0b4591ef4142911eb35c63f6df Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Tue, 24 Jun 2025 10:36:13 +0300 Subject: [PATCH 4/6] selects the space from and to connection when selecting a space. --- .../painters/spaces_connections_arrow_painter.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/pages/space_management_v2/main_module/painters/spaces_connections_arrow_painter.dart b/lib/pages/space_management_v2/main_module/painters/spaces_connections_arrow_painter.dart index cad82a60..e9fa0a15 100644 --- a/lib/pages/space_management_v2/main_module/painters/spaces_connections_arrow_painter.dart +++ b/lib/pages/space_management_v2/main_module/painters/spaces_connections_arrow_painter.dart @@ -18,7 +18,8 @@ class SpacesConnectionsArrowPainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { for (final connection in connections) { - final isSelected = highlightedUuids.contains(connection.from); + final isSelected = highlightedUuids.contains(connection.from) || + highlightedUuids.contains(connection.to); final paint = Paint() ..color = isSelected ? ColorsManager.blackColor @@ -36,7 +37,7 @@ class SpacesConnectionsArrowPainter extends CustomPainter { final path = Path()..moveTo(startPoint.dx, startPoint.dy); - final controlPoint1 = Offset(startPoint.dx, startPoint.dy + 60); + final controlPoint1 = Offset(startPoint.dx, startPoint.dy + 20); final controlPoint2 = Offset(endPoint.dx, endPoint.dy - 60); path.cubicTo(controlPoint1.dx, controlPoint1.dy, controlPoint2.dx, From 90f8305aa1baaee3536000415ff5bf79d739c9a0 Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Tue, 24 Jun 2025 10:45:13 +0300 Subject: [PATCH 5/6] shows tooltip on `SpaceCell`. --- .../widgets/community_structure_canvas.dart | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart b/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart index 04795c11..5d38cfa2 100644 --- a/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart +++ b/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart @@ -229,10 +229,14 @@ class _CommunityStructureCanvasState extends State buildSpaceContainer: () { return Opacity( opacity: hasNoSelectedSpace || isHighlighted ? 1.0 : 0.5, - child: SpaceCell( - onTap: () => _onSpaceTapped(space), - icon: space.icon, - name: space.spaceName, + child: Tooltip( + message: space.spaceName, + preferBelow: false, + child: SpaceCell( + onTap: () => _onSpaceTapped(space), + icon: space.icon, + name: space.spaceName, + ), ), ); }, From 5a2299ea2f166cd812409af66f0803be252f4d5f Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Tue, 24 Jun 2025 10:47:48 +0300 Subject: [PATCH 6/6] navigates to initial create space dialog from the respective buttons. --- .../widgets/community_structure_canvas.dart | 6 ++---- .../main_module/widgets/create_space_button.dart | 3 ++- .../space_management_community_structure.dart | 3 ++- .../helpers/space_details_dialog_helper.dart | 11 +++++++++++ .../presentation/widgets/space_details_dialog.dart | 12 ++++++++++++ 5 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 lib/pages/space_management_v2/modules/space_details/presentation/helpers/space_details_dialog_helper.dart create mode 100644 lib/pages/space_management_v2/modules/space_details/presentation/widgets/space_details_dialog.dart diff --git a/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart b/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart index 5d38cfa2..4aea103a 100644 --- a/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart +++ b/lib/pages/space_management_v2/main_module/widgets/community_structure_canvas.dart @@ -7,6 +7,7 @@ import 'package:syncrow_web/pages/space_management_v2/main_module/widgets/space_ import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/community_model.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/space_model.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/presentation/communities_tree_selection_bloc/communities_tree_selection_bloc.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/space_details/presentation/helpers/space_details_dialog_helper.dart'; class CommunityStructureCanvas extends StatefulWidget { const CommunityStructureCanvas({ @@ -240,10 +241,7 @@ class _CommunityStructureCanvasState extends State ), ); }, - onTap: () => showDialog( - context: context, - builder: (context) => const Text('123'), - ), + onTap: () => SpaceDetailsDialogHelper.showCreate(context), ), ), ); diff --git a/lib/pages/space_management_v2/main_module/widgets/create_space_button.dart b/lib/pages/space_management_v2/main_module/widgets/create_space_button.dart index 5caf6a81..4cbfd7fd 100644 --- a/lib/pages/space_management_v2/main_module/widgets/create_space_button.dart +++ b/lib/pages/space_management_v2/main_module/widgets/create_space_button.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/space_details/presentation/helpers/space_details_dialog_helper.dart'; import 'package:syncrow_web/utils/color_manager.dart'; class CreateSpaceButton extends StatelessWidget { @@ -7,7 +8,7 @@ class CreateSpaceButton extends StatelessWidget { @override Widget build(BuildContext context) { return GestureDetector( - onTap: () {}, + onTap: () => SpaceDetailsDialogHelper.showCreate(context), child: Container( height: 60, decoration: BoxDecoration( diff --git a/lib/pages/space_management_v2/main_module/widgets/space_management_community_structure.dart b/lib/pages/space_management_v2/main_module/widgets/space_management_community_structure.dart index 6fe80835..99d0668a 100644 --- a/lib/pages/space_management_v2/main_module/widgets/space_management_community_structure.dart +++ b/lib/pages/space_management_v2/main_module/widgets/space_management_community_structure.dart @@ -16,7 +16,8 @@ class SpaceManagementCommunityStructure extends StatelessWidget { return Visibility( visible: selectedCommunity!.spaces.isNotEmpty, replacement: const Row( - children: [spacer, Expanded(child: CreateSpaceButton()), spacer]), + children: [spacer, Expanded(child: CreateSpaceButton()), spacer], + ), child: CommunityStructureCanvas( community: selectedCommunity, selectedSpace: selectedSpace, diff --git a/lib/pages/space_management_v2/modules/space_details/presentation/helpers/space_details_dialog_helper.dart b/lib/pages/space_management_v2/modules/space_details/presentation/helpers/space_details_dialog_helper.dart new file mode 100644 index 00000000..e871f4d0 --- /dev/null +++ b/lib/pages/space_management_v2/modules/space_details/presentation/helpers/space_details_dialog_helper.dart @@ -0,0 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/space_details/presentation/widgets/space_details_dialog.dart'; + +abstract final class SpaceDetailsDialogHelper { + static void showCreate(BuildContext context) { + showDialog( + context: context, + builder: (context) => const SpaceDetailsDialog(), + ); + } +} diff --git a/lib/pages/space_management_v2/modules/space_details/presentation/widgets/space_details_dialog.dart b/lib/pages/space_management_v2/modules/space_details/presentation/widgets/space_details_dialog.dart new file mode 100644 index 00000000..7213c99e --- /dev/null +++ b/lib/pages/space_management_v2/modules/space_details/presentation/widgets/space_details_dialog.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; + +class SpaceDetailsDialog extends StatelessWidget { + const SpaceDetailsDialog({super.key}); + + @override + Widget build(BuildContext context) { + return const Dialog( + child: Text('Create Space'), + ); + } +}