Refactor CreateSpaceButton: Changed from StatelessWidget to StatefulWidget to manage hover state and added tooltip for improved user experience. Enhanced button styling and interaction feedback for better visual cues during space creation.

This commit is contained in:
Faris Armoush
2025-07-08 13:07:26 +03:00
parent 7c2aed2d58
commit 9e6b14737f

View File

@ -2,7 +2,7 @@ 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/pages/space_management_v2/modules/space_details/presentation/helpers/space_details_dialog_helper.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
class CreateSpaceButton extends StatelessWidget { class CreateSpaceButton extends StatefulWidget {
const CreateSpaceButton({ const CreateSpaceButton({
required this.communityUuid, required this.communityUuid,
super.key, super.key,
@ -10,42 +10,62 @@ class CreateSpaceButton extends StatelessWidget {
final String communityUuid; final String communityUuid;
@override
State<CreateSpaceButton> createState() => _CreateSpaceButtonState();
}
class _CreateSpaceButtonState extends State<CreateSpaceButton> {
bool _isHovered = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GestureDetector( return Tooltip(
margin: const EdgeInsets.symmetric(vertical: 24),
message: 'Create a new space',
child: GestureDetector(
onTap: () => SpaceDetailsDialogHelper.showCreate( onTap: () => SpaceDetailsDialogHelper.showCreate(
context, context,
communityUuid: communityUuid, communityUuid: widget.communityUuid,
), ),
child: MouseRegion(
onEnter: (_) => setState(() => _isHovered = true),
onExit: (_) => setState(() => _isHovered = false),
child: AnimatedOpacity(
duration: const Duration(milliseconds: 100),
opacity: _isHovered ? 1.0 : 0.45,
child: Container( child: Container(
height: 60, width: 150,
height: 90,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(20),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
color: Colors.grey.withValues(alpha: 0.5), color: Colors.grey.withValues(alpha: 0.2),
spreadRadius: 5, spreadRadius: 3,
blurRadius: 7, blurRadius: 8,
offset: const Offset(0, 3), offset: const Offset(0, 4),
), ),
], ],
), ),
child: Center(
child: Container( child: Container(
width: 40, margin: const EdgeInsets.symmetric(vertical: 20),
height: 40, decoration: BoxDecoration(
decoration: const BoxDecoration( border: Border.all(color: ColorsManager.borderColor, width: 2),
color: ColorsManager.boxColor, color: ColorsManager.boxColor,
shape: BoxShape.circle, shape: BoxShape.circle,
), ),
child: const Icon( child: const Center(
child: Icon(
Icons.add, Icons.add,
color: Colors.blue, color: Colors.blue,
), ),
), ),
), ),
), ),
),
),
),
); );
} }
} }