Merge pull request #3838 from grummbeer/unify-dialogs-spacing
Dialogs. Adjust spacing and alignment
This commit is contained in:
		
						commit
						7855045ea5
					
				| @ -186,6 +186,46 @@ class MyTheme { | ||||
|   static const Color button = Color(0xFF2C8CFF); | ||||
|   static const Color hoverBorder = Color(0xFF999999); | ||||
| 
 | ||||
|   // TextButton | ||||
|   // Value is used to calculate "dialog.actionsPadding" | ||||
|   static const double mobileTextButtonPaddingLR = 20; | ||||
| 
 | ||||
|   // TextButton on mobile needs a fixed padding, otherwise small buttons | ||||
|   // like "OK" has a larger left/right padding. | ||||
|   static const EdgeInsets mobileTextButtonPadding = | ||||
|       EdgeInsets.symmetric(horizontal: mobileTextButtonPaddingLR); | ||||
| 
 | ||||
|   // Dialogs | ||||
|   static const double dialogPadding = 24; | ||||
| 
 | ||||
|   // padding bottom depend on content (some dialogs has no content) | ||||
|   static EdgeInsets dialogTitlePadding({bool content = true}) { | ||||
|     final double p = dialogPadding; | ||||
| 
 | ||||
|     return EdgeInsets.fromLTRB(p, p, p, content ? 0 : p); | ||||
|   } | ||||
| 
 | ||||
|   // padding bottom depend on actions (mobile has dialogs without actions) | ||||
|   static EdgeInsets dialogContentPadding({bool actions = true}) { | ||||
|     final double p = dialogPadding; | ||||
| 
 | ||||
|     return isDesktop | ||||
|         ? EdgeInsets.fromLTRB(p, p, p, actions ? (p - 4) : p) | ||||
|         : EdgeInsets.fromLTRB(p, p, p, actions ? (p / 2) : p); | ||||
|   } | ||||
| 
 | ||||
|   static EdgeInsets dialogActionsPadding() { | ||||
|     final double p = dialogPadding; | ||||
| 
 | ||||
|     return isDesktop | ||||
|         ? EdgeInsets.fromLTRB(p, 0, p, (p - 4)) | ||||
|         : EdgeInsets.fromLTRB(p, 0, (p - mobileTextButtonPaddingLR), (p / 2)); | ||||
|   } | ||||
| 
 | ||||
|   static EdgeInsets dialogButtonPadding = isDesktop | ||||
|       ? EdgeInsets.only(left: dialogPadding) | ||||
|       : EdgeInsets.only(left: dialogPadding / 3); | ||||
| 
 | ||||
|   static ThemeData lightTheme = ThemeData( | ||||
|     brightness: Brightness.light, | ||||
|     hoverColor: Color.fromARGB(255, 224, 224, 224), | ||||
| @ -236,7 +276,14 @@ class MyTheme { | ||||
|               ), | ||||
|             ), | ||||
|           ) | ||||
|         : null, | ||||
|         : TextButtonThemeData( | ||||
|             style: TextButton.styleFrom( | ||||
|               padding: mobileTextButtonPadding, | ||||
|               shape: RoundedRectangleBorder( | ||||
|                 borderRadius: BorderRadius.circular(8.0), | ||||
|               ), | ||||
|             ), | ||||
|           ), | ||||
|     elevatedButtonTheme: ElevatedButtonThemeData( | ||||
|       style: ElevatedButton.styleFrom( | ||||
|         backgroundColor: MyTheme.accent, | ||||
| @ -334,7 +381,14 @@ class MyTheme { | ||||
|               ), | ||||
|             ), | ||||
|           ) | ||||
|         : null, | ||||
|         : TextButtonThemeData( | ||||
|             style: TextButton.styleFrom( | ||||
|               padding: mobileTextButtonPadding, | ||||
|               shape: RoundedRectangleBorder( | ||||
|                 borderRadius: BorderRadius.circular(8.0), | ||||
|               ), | ||||
|             ), | ||||
|           ), | ||||
|     elevatedButtonTheme: ElevatedButtonThemeData( | ||||
|       style: ElevatedButton.styleFrom( | ||||
|         backgroundColor: MyTheme.accent, | ||||
| @ -771,6 +825,10 @@ void showToast(String text, {Duration timeout = const Duration(seconds: 2)}) { | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // TODO | ||||
| // - Remove argument "contentPadding", no need for it, all should look the same. | ||||
| // - Remove "required" for argument "content". See simple confirm dialog "delete peer", only title and actions are used. No need to "content: SizedBox.shrink()". | ||||
| // - Make dead code alive, transform arguments "onSubmit" and "onCancel" into correspondenting buttons "ConfirmOkButton", "CancelButton". | ||||
| class CustomAlertDialog extends StatelessWidget { | ||||
|   const CustomAlertDialog( | ||||
|       {Key? key, | ||||
| @ -798,8 +856,8 @@ class CustomAlertDialog extends StatelessWidget { | ||||
|     Future.delayed(Duration.zero, () { | ||||
|       if (!scopeNode.hasFocus) scopeNode.requestFocus(); | ||||
|     }); | ||||
|     const double padding = 30; | ||||
|     bool tabTapped = false; | ||||
| 
 | ||||
|     return FocusScope( | ||||
|       node: scopeNode, | ||||
|       autofocus: true, | ||||
| @ -824,22 +882,18 @@ class CustomAlertDialog extends StatelessWidget { | ||||
|         return KeyEventResult.ignored; | ||||
|       }, | ||||
|       child: AlertDialog( | ||||
|         scrollable: true, | ||||
|         title: title, | ||||
|         titlePadding: EdgeInsets.fromLTRB(padding, 24, padding, 0), | ||||
|         contentPadding: EdgeInsets.fromLTRB( | ||||
|           contentPadding ?? padding, | ||||
|           25, | ||||
|           contentPadding ?? padding, | ||||
|           actions is List ? 10 : padding, | ||||
|         ), | ||||
|         content: ConstrainedBox( | ||||
|           constraints: contentBoxConstraints, | ||||
|           child: content, | ||||
|         ), | ||||
|         actions: actions, | ||||
|         actionsPadding: EdgeInsets.fromLTRB(padding, 0, padding, padding), | ||||
|       ), | ||||
|           scrollable: true, | ||||
|           title: title, | ||||
|           content: ConstrainedBox( | ||||
|             constraints: contentBoxConstraints, | ||||
|             child: content, | ||||
|           ), | ||||
|           actions: actions, | ||||
|           titlePadding: MyTheme.dialogTitlePadding(content: content != null), | ||||
|           contentPadding: | ||||
|               MyTheme.dialogContentPadding(actions: actions is List), | ||||
|           actionsPadding: MyTheme.dialogActionsPadding(), | ||||
|           buttonPadding: MyTheme.dialogButtonPadding), | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user