Skip to content

Commit 3973221

Browse files
author
Johnny
committed
code refactor, implement cupertino and material style dialogs
1 parent 5859e44 commit 3973221

File tree

3 files changed

+219
-97
lines changed

3 files changed

+219
-97
lines changed

example/lib/cupertino_dialogs.dart

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
import 'package:flutter/cupertino.dart';
2+
3+
class MyCupertinoAlertDialog extends StatelessWidget {
4+
final String message;
5+
6+
MyCupertinoAlertDialog({this.message = ''});
7+
8+
@override
9+
Widget build(BuildContext context) {
10+
return CupertinoAlertDialog(
11+
content: Text(message),
12+
actions: <Widget>[
13+
CupertinoDialogAction(
14+
child: const Text('OK'),
15+
onPressed: () {
16+
Navigator.of(context).pop();
17+
}),
18+
],
19+
);
20+
}
21+
}
22+
23+
class CupertinoConfirmDialog extends StatelessWidget {
24+
final String message;
25+
26+
CupertinoConfirmDialog({this.message = ''});
27+
28+
@override
29+
Widget build(BuildContext context) {
30+
return CupertinoAlertDialog(
31+
content: Text(message),
32+
actions: <Widget>[
33+
CupertinoDialogAction(
34+
child: const Text('Cancel'),
35+
onPressed: () {
36+
Navigator.of(context).pop(false);
37+
}),
38+
CupertinoDialogAction(
39+
child: const Text('OK'),
40+
onPressed: () {
41+
Navigator.of(context).pop(true);
42+
}),
43+
],
44+
);
45+
}
46+
}
47+
48+
class CupertinoPromptDialog extends StatefulWidget {
49+
final String message;
50+
final String defaultText;
51+
52+
CupertinoPromptDialog({Key key, this.message, this.defaultText}) : super(key: key);
53+
54+
@override
55+
_PromptDialogState createState() => _PromptDialogState();
56+
}
57+
58+
class _PromptDialogState extends State<CupertinoPromptDialog> {
59+
TextEditingController _controller;
60+
61+
@override
62+
void initState() {
63+
super.initState();
64+
_controller = TextEditingController();
65+
_controller.text = widget.defaultText;
66+
}
67+
68+
@override
69+
void dispose() {
70+
_controller.dispose();
71+
super.dispose();
72+
}
73+
74+
@override
75+
Widget build(BuildContext context) {
76+
return CupertinoAlertDialog(
77+
content: Column(
78+
crossAxisAlignment: CrossAxisAlignment.start,
79+
mainAxisSize: MainAxisSize.min,
80+
children: <Widget>[
81+
Text(widget.message),
82+
Padding(
83+
padding: const EdgeInsets.fromLTRB(0, 16, 0, 0),
84+
child: CupertinoTextField(
85+
controller: _controller,
86+
cursorColor: CupertinoColors.inactiveGray,
87+
style: const TextStyle(
88+
fontSize: 16,
89+
),
90+
maxLines: 1,
91+
decoration: BoxDecoration(
92+
color: CupertinoColors.white,
93+
border: Border.all(
94+
width: 1.2,
95+
color: CupertinoColors.inactiveGray,
96+
),
97+
borderRadius: BorderRadius.circular(8.0),
98+
),
99+
),
100+
)
101+
]),
102+
actions: <Widget>[
103+
CupertinoDialogAction(
104+
child: const Text('Cancel'),
105+
onPressed: () {
106+
Navigator.of(context).pop('');
107+
}),
108+
CupertinoDialogAction(
109+
child: const Text('OK'),
110+
onPressed: () {
111+
Navigator.of(context).pop(_controller.text);
112+
}),
113+
],
114+
);
115+
}
116+
}

example/lib/main.dart

Lines changed: 4 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import 'package:flutter/material.dart';
55

66
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
77

8+
import 'material_dialogs.dart';
9+
810
const kAndroidUserAgent =
911
'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36';
1012

@@ -148,7 +150,7 @@ class _MyHomePageState extends State<MyHomePage> {
148150
barrierDismissible: false,
149151
builder: (_) => WillPopScope(
150152
onWillPop: () async => false,
151-
child: PromptDialog(message: prompt.message)));
153+
child: PromptDialog(message: prompt.message, defaultText: prompt.defaultText)));
152154
};
153155

154156
flutterWebViewPlugin.close();
@@ -359,99 +361,4 @@ class _MyHomePageState extends State<MyHomePage> {
359361
),
360362
);
361363
}
362-
}
363-
364-
class MyAlertDialog extends StatelessWidget {
365-
final String message;
366-
367-
MyAlertDialog({this.message = ''});
368-
369-
@override
370-
Widget build(BuildContext context) {
371-
return AlertDialog(
372-
content: Text(message),
373-
actions: <Widget>[
374-
FlatButton(
375-
child: const Text('OK'),
376-
onPressed: () {
377-
Navigator.of(context).pop();
378-
}),
379-
],
380-
);
381-
}
382-
}
383-
384-
class ConfirmDialog extends StatelessWidget {
385-
final String message;
386-
387-
ConfirmDialog({this.message = ''});
388-
389-
@override
390-
Widget build(BuildContext context) {
391-
return AlertDialog(
392-
content: Text(message),
393-
actions: <Widget>[
394-
FlatButton(
395-
child: const Text('Cancel'),
396-
onPressed: () {
397-
Navigator.of(context).pop(false);
398-
}),
399-
FlatButton(
400-
child: const Text('OK'),
401-
onPressed: () {
402-
Navigator.of(context).pop(true);
403-
}),
404-
],
405-
);
406-
}
407-
}
408-
409-
class PromptDialog extends StatefulWidget {
410-
final String message;
411-
412-
PromptDialog({Key key, this.message}) : super(key: key);
413-
414-
@override
415-
_PromptDialogState createState() => _PromptDialogState();
416-
}
417-
418-
class _PromptDialogState extends State<PromptDialog> {
419-
TextEditingController _controller;
420-
421-
@override
422-
void initState() {
423-
super.initState();
424-
_controller = TextEditingController();
425-
}
426-
427-
@override
428-
void dispose() {
429-
_controller.dispose();
430-
super.dispose();
431-
}
432-
433-
@override
434-
Widget build(BuildContext context) {
435-
return AlertDialog(
436-
content: Column(
437-
crossAxisAlignment: CrossAxisAlignment.start,
438-
mainAxisSize: MainAxisSize.min,
439-
children: <Widget>[
440-
Text(widget.message),
441-
TextField(controller: _controller),
442-
]),
443-
actions: <Widget>[
444-
FlatButton(
445-
child: const Text('Cancel'),
446-
onPressed: () {
447-
Navigator.of(context).pop('');
448-
}),
449-
FlatButton(
450-
child: const Text('OK'),
451-
onPressed: () {
452-
Navigator.of(context).pop(_controller.text);
453-
}),
454-
],
455-
);
456-
}
457-
}
364+
}

example/lib/material_dialogs.dart

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import 'package:flutter/material.dart';
2+
3+
class MyAlertDialog extends StatelessWidget {
4+
final String message;
5+
6+
MyAlertDialog({this.message = ''});
7+
8+
@override
9+
Widget build(BuildContext context) {
10+
return AlertDialog(
11+
content: Text(message),
12+
actions: <Widget>[
13+
FlatButton(
14+
child: const Text('OK'),
15+
onPressed: () {
16+
Navigator.of(context).pop();
17+
}),
18+
],
19+
);
20+
}
21+
}
22+
23+
class ConfirmDialog extends StatelessWidget {
24+
final String message;
25+
26+
ConfirmDialog({this.message = ''});
27+
28+
@override
29+
Widget build(BuildContext context) {
30+
return AlertDialog(
31+
content: Text(message),
32+
actions: <Widget>[
33+
FlatButton(
34+
child: const Text('Cancel'),
35+
onPressed: () {
36+
Navigator.of(context).pop(false);
37+
}),
38+
FlatButton(
39+
child: const Text('OK'),
40+
onPressed: () {
41+
Navigator.of(context).pop(true);
42+
}),
43+
],
44+
);
45+
}
46+
}
47+
48+
class PromptDialog extends StatefulWidget {
49+
final String message;
50+
final String defaultText;
51+
52+
PromptDialog({Key key, this.message, this.defaultText = ''})
53+
: super(key: key);
54+
55+
@override
56+
_PromptDialogState createState() => _PromptDialogState();
57+
}
58+
59+
class _PromptDialogState extends State<PromptDialog> {
60+
TextEditingController _controller;
61+
62+
@override
63+
void initState() {
64+
super.initState();
65+
_controller = TextEditingController();
66+
_controller.text = widget.defaultText;
67+
}
68+
69+
@override
70+
void dispose() {
71+
_controller.dispose();
72+
super.dispose();
73+
}
74+
75+
@override
76+
Widget build(BuildContext context) {
77+
return AlertDialog(
78+
content: Column(
79+
crossAxisAlignment: CrossAxisAlignment.start,
80+
mainAxisSize: MainAxisSize.min,
81+
children: <Widget>[
82+
Text(widget.message),
83+
TextField(controller: _controller),
84+
]),
85+
actions: <Widget>[
86+
FlatButton(
87+
child: const Text('Cancel'),
88+
onPressed: () {
89+
Navigator.of(context).pop('');
90+
}),
91+
FlatButton(
92+
child: const Text('OK'),
93+
onPressed: () {
94+
Navigator.of(context).pop(_controller.text);
95+
}),
96+
],
97+
);
98+
}
99+
}

0 commit comments

Comments
 (0)