11import 'package:flutter/material.dart' ;
22import 'package:flutter_gen/gen_l10n/zulip_localizations.dart' ;
3+ import 'package:flutter/cupertino.dart' ;
34
45Widget _dialogActionText (String text) {
56 return Text (
@@ -15,6 +16,30 @@ Widget _dialogActionText(String text) {
1516 );
1617}
1718
19+ // Sets the dialog action to be platform appropriate
20+ // by displaying a [CupertinoDialogAction] for IOS platforms
21+ // and a regular [TextButton] otherwise.
22+ Widget _adaptiveAction (
23+ {required BuildContext context,
24+ required VoidCallback onPressed,
25+ required Widget child}) {
26+ final ThemeData theme = Theme .of (context);
27+ switch (theme.platform) {
28+ case TargetPlatform .android:
29+ return TextButton (onPressed: onPressed, child: child);
30+ case TargetPlatform .fuchsia:
31+ return TextButton (onPressed: onPressed, child: child);
32+ case TargetPlatform .linux:
33+ return TextButton (onPressed: onPressed, child: child);
34+ case TargetPlatform .windows:
35+ return TextButton (onPressed: onPressed, child: child);
36+ case TargetPlatform .iOS:
37+ return CupertinoDialogAction (onPressed: onPressed, child: child);
38+ case TargetPlatform .macOS:
39+ return CupertinoDialogAction (onPressed: onPressed, child: child);
40+ }
41+ }
42+
1843/// Tracks the status of a dialog, in being still open or already closed.
1944///
2045/// See also:
@@ -42,11 +67,12 @@ DialogStatus showErrorDialog({
4267 final zulipLocalizations = ZulipLocalizations .of (context);
4368 final future = showDialog <void >(
4469 context: context,
45- builder: (BuildContext context) => AlertDialog (
70+ builder: (BuildContext context) => AlertDialog . adaptive (
4671 title: Text (title),
4772 content: message != null ? SingleChildScrollView (child: Text (message)) : null ,
4873 actions: [
49- TextButton (
74+ _adaptiveAction (
75+ context: context,
5076 onPressed: () => Navigator .pop (context),
5177 child: _dialogActionText (zulipLocalizations.errorDialogContinue)),
5278 ]));
@@ -63,14 +89,16 @@ void showSuggestedActionDialog({
6389 final zulipLocalizations = ZulipLocalizations .of (context);
6490 showDialog <void >(
6591 context: context,
66- builder: (BuildContext context) => AlertDialog (
92+ builder: (BuildContext context) => AlertDialog . adaptive (
6793 title: Text (title),
6894 content: SingleChildScrollView (child: Text (message)),
6995 actions: [
70- TextButton (
96+ _adaptiveAction (
97+ context: context,
7198 onPressed: () => Navigator .pop (context),
7299 child: _dialogActionText (zulipLocalizations.dialogCancel)),
73- TextButton (
100+ _adaptiveAction (
101+ context: context,
74102 onPressed: onActionButtonPress,
75103 child: _dialogActionText (actionButtonText ?? zulipLocalizations.dialogContinue)),
76104 ]));
0 commit comments