From 6370c486a0185b5fc2ed92b11fb5cf2fccf10f3e Mon Sep 17 00:00:00 2001 From: krille-chan Date: Tue, 16 Sep 2025 12:09:50 +0200 Subject: [PATCH] chore: Adjust material dialog button design --- .../adaptive_dialog_action.dart | 24 ++++++++++++++- .../adaptive_dialogs/public_room_dialog.dart | 2 ++ lib/widgets/adaptive_dialogs/user_dialog.dart | 29 ++++++++++--------- lib/widgets/permission_slider_dialog.dart | 8 ++++- 4 files changed, 48 insertions(+), 15 deletions(-) diff --git a/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart b/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart index a80289032..4a1929dd1 100644 --- a/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart +++ b/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart @@ -1,11 +1,28 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:fluffychat/config/app_config.dart'; + class AdaptiveDialogAction extends StatelessWidget { final VoidCallback? onPressed; final bool autofocus; final Widget child; final bool bigButtons; + final BorderRadius? borderRadius; + + static const BorderRadius topRadius = BorderRadius.only( + topLeft: Radius.circular(AppConfig.borderRadius), + topRight: Radius.circular(AppConfig.borderRadius), + bottomLeft: Radius.circular(2), + bottomRight: Radius.circular(2), + ); + static const BorderRadius centerRadius = BorderRadius.all(Radius.circular(2)); + static const BorderRadius bottomRadius = BorderRadius.only( + bottomLeft: Radius.circular(AppConfig.borderRadius), + bottomRight: Radius.circular(AppConfig.borderRadius), + topLeft: Radius.circular(2), + topRight: Radius.circular(2), + ); const AdaptiveDialogAction({ super.key, @@ -13,6 +30,7 @@ class AdaptiveDialogAction extends StatelessWidget { required this.child, this.autofocus = false, this.bigButtons = false, + this.borderRadius, }); @override @@ -25,11 +43,15 @@ class AdaptiveDialogAction extends StatelessWidget { case TargetPlatform.windows: if (bigButtons) { return Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0), + padding: const EdgeInsets.symmetric(vertical: 2.0), child: SizedBox( width: double.infinity, child: ElevatedButton( style: ElevatedButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: borderRadius ?? + BorderRadius.circular(AppConfig.borderRadius), + ), backgroundColor: autofocus ? theme.colorScheme.primary : theme.colorScheme.surfaceBright, diff --git a/lib/widgets/adaptive_dialogs/public_room_dialog.dart b/lib/widgets/adaptive_dialogs/public_room_dialog.dart index c7af78ba3..a018b8e25 100644 --- a/lib/widgets/adaptive_dialogs/public_room_dialog.dart +++ b/lib/widgets/adaptive_dialogs/public_room_dialog.dart @@ -210,6 +210,7 @@ class PublicRoomDialog extends StatelessWidget { actions: [ AdaptiveDialogAction( bigButtons: true, + borderRadius: AdaptiveDialogAction.topRadius, onPressed: () => _joinRoom(context), child: Text( chunk?.joinRule == 'knock' && @@ -222,6 +223,7 @@ class PublicRoomDialog extends StatelessWidget { ), AdaptiveDialogAction( bigButtons: true, + borderRadius: AdaptiveDialogAction.bottomRadius, onPressed: Navigator.of(context).pop, child: Text(L10n.of(context).close), ), diff --git a/lib/widgets/adaptive_dialogs/user_dialog.dart b/lib/widgets/adaptive_dialogs/user_dialog.dart index 1834c0153..e3a07c7fb 100644 --- a/lib/widgets/adaptive_dialogs/user_dialog.dart +++ b/lib/widgets/adaptive_dialogs/user_dialog.dart @@ -74,6 +74,19 @@ class UserDialog extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ + Center( + child: Avatar( + mxContent: avatar, + name: displayname, + size: Avatar.defaultSize * 2, + onTap: avatar != null + ? () => showDialog( + context: context, + builder: (_) => MxcImageViewer(avatar), + ) + : null, + ), + ), HoverBuilder( builder: (context, hovered) => StatefulBuilder( builder: (context, setState) => MouseRegion( @@ -122,19 +135,6 @@ class UserDialog extends StatelessWidget { ), ), ), - Center( - child: Avatar( - mxContent: avatar, - name: displayname, - size: Avatar.defaultSize * 2, - onTap: avatar != null - ? () => showDialog( - context: context, - builder: (_) => MxcImageViewer(avatar), - ) - : null, - ), - ), if (presenceText != null) Text( presenceText, @@ -165,6 +165,7 @@ class UserDialog extends StatelessWidget { actions: [ if (client.userID != profile.userId) ...[ AdaptiveDialogAction( + borderRadius: AdaptiveDialogAction.topRadius, bigButtons: true, onPressed: () async { final router = GoRouter.of(context); @@ -185,6 +186,7 @@ class UserDialog extends StatelessWidget { ), AdaptiveDialogAction( bigButtons: true, + borderRadius: AdaptiveDialogAction.centerRadius, onPressed: () { final router = GoRouter.of(context); Navigator.of(context).pop(); @@ -201,6 +203,7 @@ class UserDialog extends StatelessWidget { ], AdaptiveDialogAction( bigButtons: true, + borderRadius: AdaptiveDialogAction.bottomRadius, onPressed: Navigator.of(context).pop, child: Text(L10n.of(context).close), ), diff --git a/lib/widgets/permission_slider_dialog.dart b/lib/widgets/permission_slider_dialog.dart index a2f0faa11..d02b43ecf 100644 --- a/lib/widgets/permission_slider_dialog.dart +++ b/lib/widgets/permission_slider_dialog.dart @@ -14,7 +14,7 @@ Future showPermissionChooser( return await showAdaptiveDialog( context: context, builder: (context) => AlertDialog.adaptive( - title: Text(L10n.of(context).chatPermissions), + title: Center(child: Text(L10n.of(context).chatPermissions)), content: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 256, maxHeight: 256), child: Column( @@ -39,6 +39,7 @@ Future showPermissionChooser( actions: [ AdaptiveDialogAction( bigButtons: true, + borderRadius: AdaptiveDialogAction.topRadius, onPressed: () { final level = int.tryParse(controller.text.trim()); if (level == null) { @@ -55,18 +56,23 @@ Future showPermissionChooser( ), if (maxLevel >= 100 && currentLevel != 100) AdaptiveDialogAction( + borderRadius: AdaptiveDialogAction.centerRadius, bigButtons: true, onPressed: () => Navigator.of(context).pop(100), child: Text(L10n.of(context).admin), ), if (maxLevel >= 50 && currentLevel != 50) AdaptiveDialogAction( + borderRadius: maxLevel != 0 + ? AdaptiveDialogAction.centerRadius + : AdaptiveDialogAction.bottomRadius, bigButtons: true, onPressed: () => Navigator.of(context).pop(50), child: Text(L10n.of(context).moderator), ), if (currentLevel != 0) AdaptiveDialogAction( + borderRadius: AdaptiveDialogAction.bottomRadius, bigButtons: true, onPressed: () => Navigator.of(context).pop(0), child: Text(L10n.of(context).normalUser),