Created
January 15, 2020 13:27
-
-
Save Andrious/6fe652be64cf42b9be8b69d42c0fa2a4 to your computer and use it in GitHub Desktop.
Sample code of the AlertDialog widget.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Copyright 2014 The Flutter Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license | |
import 'package:flutter/material.dart'; | |
enum DialogDemoAction { | |
cancel, | |
discard, | |
disagree, | |
agree, | |
} | |
const String _alertWithTitleText = | |
'Let Google help apps determine location. This means sending anonymous location ' | |
'data to Google, even when no apps are running.'; | |
class DialogDemo extends StatefulWidget { | |
@override | |
DialogDemoState createState() => DialogDemoState(); | |
} | |
class DialogDemoState extends State<DialogDemo> { | |
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); | |
void showDemoDialog<T>({BuildContext context, Widget child}) { | |
showDialog<T>( | |
context: context, | |
builder: (BuildContext context) => child, | |
).then<void>((T value) { | |
// The value passed to Navigator.pop() or null. | |
if (value != null) { | |
_scaffoldKey.currentState.showSnackBar(SnackBar( | |
content: Text('You selected: $value'), | |
)); | |
} | |
}); | |
} | |
@override | |
Widget build(BuildContext context) { | |
final ThemeData theme = Theme.of(context); | |
final TextStyle dialogTextStyle = | |
theme.textTheme.subhead.copyWith(color: theme.textTheme.caption.color); | |
return Scaffold( | |
key: _scaffoldKey, | |
appBar: AppBar( | |
title: const Text('Dialogs'), | |
), | |
body: ListView( | |
padding: const EdgeInsets.symmetric(vertical: 24.0, horizontal: 72.0), | |
children: <Widget>[ | |
RaisedButton( | |
child: const Text('SAMPLE'), | |
onPressed: () { | |
showDialog<void>( | |
context: context, | |
barrierDismissible: false, // user must tap button! | |
builder: (BuildContext context) { | |
return AlertDialog( | |
title: Text('Rewind and remember'), | |
content: SingleChildScrollView( | |
child: ListBody( | |
children: <Widget>[ | |
Text('You will never be satisfied.'), | |
Text('You\’re like me. I’m never satisfied.'), | |
], | |
), | |
), | |
actions: <Widget>[ | |
FlatButton( | |
child: Text('Regret'), | |
onPressed: () { | |
Navigator.of(context).pop(); | |
}, | |
), | |
], | |
); | |
}, | |
); | |
}), | |
RaisedButton( | |
child: const Text('ALERT'), | |
onPressed: () { | |
showDemoDialog<DialogDemoAction>( | |
context: context, | |
child: AlertDialog( | |
content: Text( | |
"Discard draft?", | |
style: dialogTextStyle, | |
), | |
actions: <Widget>[ | |
FlatButton( | |
child: const Text('CANCEL'), | |
onPressed: () { | |
Navigator.pop(context, DialogDemoAction.cancel); | |
}, | |
), | |
FlatButton( | |
child: const Text('DISCARD'), | |
onPressed: () { | |
Navigator.pop(context, DialogDemoAction.discard); | |
}, | |
), | |
], | |
), | |
); | |
}, | |
), | |
RaisedButton( | |
child: const Text('ALERT WITH TITLE'), | |
onPressed: () { | |
showDemoDialog<DialogDemoAction>( | |
context: context, | |
child: AlertDialog( | |
title: const Text('Use Google\'s location service?'), | |
content: Text( | |
_alertWithTitleText, | |
style: dialogTextStyle, | |
), | |
actions: <Widget>[ | |
FlatButton( | |
child: const Text('DISAGREE'), | |
onPressed: () { | |
Navigator.pop(context, DialogDemoAction.disagree); | |
}, | |
), | |
FlatButton( | |
child: const Text('AGREE'), | |
onPressed: () { | |
Navigator.pop(context, DialogDemoAction.agree); | |
}, | |
), | |
], | |
), | |
); | |
}, | |
), | |
RaisedButton( | |
child: const Text('SIMPLE'), | |
onPressed: () { | |
showDemoDialog<String>( | |
context: context, | |
child: SimpleDialog( | |
title: const Text('Set backup account'), | |
children: <Widget>[ | |
DialogDemoItem( | |
icon: Icons.account_circle, | |
color: theme.primaryColor, | |
text: 'username@gmail.com', | |
onPressed: () { | |
Navigator.pop(context, 'username@gmail.com'); | |
}, | |
), | |
DialogDemoItem( | |
icon: Icons.account_circle, | |
color: theme.primaryColor, | |
text: 'user02@gmail.com', | |
onPressed: () { | |
Navigator.pop(context, 'user02@gmail.com'); | |
}, | |
), | |
DialogDemoItem( | |
icon: Icons.add_circle, | |
text: 'add account', | |
color: theme.disabledColor, | |
), | |
], | |
), | |
); | |
}, | |
), | |
] | |
// Add a little space between the buttons | |
.map<Widget>((Widget button) { | |
return Container( | |
padding: const EdgeInsets.symmetric(vertical: 8.0), | |
child: button, | |
); | |
}).toList(), | |
), | |
); | |
} | |
} | |
class DialogDemoItem extends StatelessWidget { | |
const DialogDemoItem( | |
{Key key, this.icon, this.color, this.text, this.onPressed}) | |
: super(key: key); | |
final IconData icon; | |
final Color color; | |
final String text; | |
final VoidCallback onPressed; | |
@override | |
Widget build(BuildContext context) { | |
return SimpleDialogOption( | |
onPressed: onPressed, | |
child: Row( | |
mainAxisAlignment: MainAxisAlignment.start, | |
crossAxisAlignment: CrossAxisAlignment.center, | |
children: <Widget>[ | |
Icon(icon, size: 36.0, color: color), | |
Padding( | |
padding: const EdgeInsets.only(left: 16.0), | |
child: Text(text), | |
), | |
], | |
), | |
); | |
} | |
} | |
void main() => runApp(MyApp()); | |
class MyApp extends StatelessWidget { | |
// This widget is the root of your application. | |
@override | |
Widget build(BuildContext context) { | |
return MaterialApp( | |
title: 'Flutter Demo', | |
theme: ThemeData( | |
primarySwatch: Colors.blue, | |
), | |
home: DialogDemo(), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment