104 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'package:flutter/material.dart';
 | |
| 
 | |
| import 'package:extera_next/generated/l10n/l10n.dart';
 | |
| import 'package:flutter_linkify/flutter_linkify.dart';
 | |
| 
 | |
| import 'package:extera_next/utils/url_launcher.dart';
 | |
| import 'package:extera_next/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
 | |
| 
 | |
| enum OkCancelResult { ok, cancel }
 | |
| 
 | |
| Future<OkCancelResult?> showOkCancelAlertDialog({
 | |
|   required BuildContext context,
 | |
|   required String title,
 | |
|   String? message,
 | |
|   String? okLabel,
 | |
|   String? cancelLabel,
 | |
|   bool isDestructive = false,
 | |
|   bool useRootNavigator = true,
 | |
| }) =>
 | |
|     showAdaptiveDialog<OkCancelResult>(
 | |
|       context: context,
 | |
|       useRootNavigator: useRootNavigator,
 | |
|       builder: (context) => AlertDialog.adaptive(
 | |
|         title: ConstrainedBox(
 | |
|           constraints: const BoxConstraints(maxWidth: 256),
 | |
|           child: Text(title),
 | |
|         ),
 | |
|         content: ConstrainedBox(
 | |
|           constraints: const BoxConstraints(maxWidth: 256),
 | |
|           child: message == null
 | |
|               ? null
 | |
|               : SelectableLinkify(
 | |
|                   text: message,
 | |
|                   textScaleFactor: MediaQuery.textScalerOf(context).scale(1),
 | |
|                   linkStyle: TextStyle(
 | |
|                     color: Theme.of(context).colorScheme.primary,
 | |
|                     decorationColor: Theme.of(context).colorScheme.primary,
 | |
|                   ),
 | |
|                   options: const LinkifyOptions(humanize: false),
 | |
|                   onOpen: (url) => UrlLauncher(context, url.url).launchUrl(),
 | |
|                 ),
 | |
|         ),
 | |
|         actions: [
 | |
|           AdaptiveDialogAction(
 | |
|             onPressed: () => Navigator.of(context)
 | |
|                 .pop<OkCancelResult>(OkCancelResult.cancel),
 | |
|             child: Text(cancelLabel ?? L10n.of(context).cancel),
 | |
|           ),
 | |
|           AdaptiveDialogAction(
 | |
|             onPressed: () =>
 | |
|                 Navigator.of(context).pop<OkCancelResult>(OkCancelResult.ok),
 | |
|             autofocus: true,
 | |
|             child: Text(
 | |
|               okLabel ?? L10n.of(context).ok,
 | |
|               style: isDestructive
 | |
|                   ? TextStyle(color: Theme.of(context).colorScheme.error)
 | |
|                   : null,
 | |
|             ),
 | |
|           ),
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
| 
 | |
| Future<OkCancelResult?> showOkAlertDialog({
 | |
|   required BuildContext context,
 | |
|   required String title,
 | |
|   String? message,
 | |
|   String? okLabel,
 | |
|   bool useRootNavigator = true,
 | |
| }) =>
 | |
|     showAdaptiveDialog<OkCancelResult>(
 | |
|       context: context,
 | |
|       useRootNavigator: useRootNavigator,
 | |
|       builder: (context) => AlertDialog.adaptive(
 | |
|         title: ConstrainedBox(
 | |
|           constraints: const BoxConstraints(maxWidth: 256),
 | |
|           child: Text(title),
 | |
|         ),
 | |
|         content: ConstrainedBox(
 | |
|           constraints: const BoxConstraints(maxWidth: 256),
 | |
|           child: message == null
 | |
|               ? null
 | |
|               : SelectableLinkify(
 | |
|                   text: message,
 | |
|                   textScaleFactor: MediaQuery.textScalerOf(context).scale(1),
 | |
|                   linkStyle: TextStyle(
 | |
|                     color: Theme.of(context).colorScheme.primary,
 | |
|                     decorationColor: Theme.of(context).colorScheme.primary,
 | |
|                   ),
 | |
|                   options: const LinkifyOptions(humanize: false),
 | |
|                   onOpen: (url) => UrlLauncher(context, url.url).launchUrl(),
 | |
|                 ),
 | |
|         ),
 | |
|         actions: [
 | |
|           AdaptiveDialogAction(
 | |
|             onPressed: () =>
 | |
|                 Navigator.of(context).pop<OkCancelResult>(OkCancelResult.ok),
 | |
|             autofocus: true,
 | |
|             child: Text(okLabel ?? L10n.of(context).close),
 | |
|           ),
 | |
|         ],
 | |
|       ),
 | |
|     );
 |