美文网首页
Flutter之Dialog

Flutter之Dialog

作者: wasdzy111 | 来源:发表于2019-02-14 22:15 被阅读0次
    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    
    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: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      _showDialog(BuildContext context) {
        showDialog(
            context: context,
            builder: (_) => AlertDialog(
                  title: Text('提示'),
                  content: Text('这是一个Dialog!'),
                  actions: <Widget>[
                    FlatButton(
                        onPressed: () {
                          Navigator.of(context).pop();
                        },
                        child: Text('取消')),
                    FlatButton(
                        onPressed: () {
                          Navigator.of(context).pop();
                        },
                        child: Text('确定'))
                  ],
                ));
      }
    
      _showSimpleDialog(BuildContext context) {
        showDialog(
            context: context,
            builder: (context) {
              return SimpleDialog(
                title: Text('SimpleDialog'),
                children: <Widget>[
                  new SimpleDialogOption(
                    child: new Text("SimpleDialogOption One"),
                    onPressed: () {
                      Navigator.of(context).pop("SimpleDialogOption One");
                    },
                  ),
                  new SimpleDialogOption(
                    child: new Text("SimpleDialogOption Two"),
                    onPressed: () {
                      Navigator.of(context).pop("SimpleDialogOption Two");
                    },
                  ),
                  new SimpleDialogOption(
                    child: new Text("SimpleDialogOption Three"),
                    onPressed: () {
                      Navigator.of(context).pop("SimpleDialogOption Three");
                    },
                  ),
                ],
              );
            });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                RaisedButton(
                  onPressed: () {
                    _showDialog(context);
                  },
                  child: Text(
                    'Material风格的AlertDialog',
                    style: TextStyle(fontSize: 18, color: Colors.red),
                  ),
                ),
                RaisedButton(
                  onPressed: () {
                    _showSimpleDialog(context);
                  },
                  child: Text(
                    'SimpleDialog',
                    style: TextStyle(fontSize: 18, color: Colors.red),
                  ),
                ),
                RaisedButton(
                  onPressed: () {
                    //Dialog 点击按钮返回值
                    _showIOSDialog(context).then((value) {
                      print("对话框消失:$value");
                    });
                  },
                  child: Text(
                    'IOS风格的AlertDialog',
                    style: TextStyle(fontSize: 18, color: Colors.red),
                  ),
                ),
                RaisedButton(
                  onPressed: () {
                    _showMyDialogWithColumn(context).then((val) {
                      print('${val}');
                    });
                  },
                  child: Text(
                    '列表项对话框',
                    style: TextStyle(fontSize: 18, color: Colors.red),
                  ),
                ),
                RaisedButton(
                  onPressed: () {
                    _showMyDialogWithStateBuilder(context);
                  },
                  child: Text(
                    'StatefulWidget',
                    style: TextStyle(fontSize: 18, color: Colors.red),
                  ),
                ),
                RaisedButton(
                  onPressed: () {
                    _showMyCustomLoadingDialog(context);
                  },
                  child: Text(
                    '自定义',
                    style: TextStyle(fontSize: 18, color: Colors.red),
                  ),
                ),
              ],
            ),
          ),
        );
      }
    
      Future _showIOSDialog(BuildContext context) {
        return showCupertinoDialog(
            context: context,
            builder: (context) {
              return new CupertinoAlertDialog(
                title: new Text("title"),
                content: new Text("内容内容内容内容内容内容内容内容内容内容内容"),
                actions: <Widget>[
                  new FlatButton(
                    onPressed: () {
                      Navigator.of(context).pop("点击了确定");
                    },
                    child: new Text("确认"),
                  ),
                  new FlatButton(
                    onPressed: () {
                      Navigator.of(context).pop("点击了取消");
                    },
                    child: new Text("取消"),
                  ),
                ],
              );
            });
      }
    
      Future _showMyDialogWithColumn(BuildContext context) {
        var index = -1;
        return showDialog(
            context: context,
            builder: (context) {
              return new AlertDialog(
                title: new Text("title"),
                content: Container(
                  height: 200,
                  child: new SingleChildScrollView(
                    child: new Column(
                      children: <Widget>[
                        GestureDetector(
                          onTap: () {
                            index = 1;
                          },
                          child: new SizedBox(
                            child: new Text("1"),
                          ),
                        ),
                        Divider(
                          color: Colors.grey,
                        ),
                        GestureDetector(
                          onTap: () {
                            index = 2;
                          },
                          child: new SizedBox(
                            child: new Text("2"),
                          ),
                        ),
                        Divider(
                          color: Colors.grey,
                        ),
                        GestureDetector(
                          onTap: () {
                            index = 3;
                          },
                          child: new SizedBox(
                            child: new Text("3"),
                          ),
                        ),
                        Divider(
                          color: Colors.grey,
                        ),
                        GestureDetector(
                          onTap: () {
                            index = 4;
                          },
                          child: new SizedBox(
                            child: new Text("4"),
                          ),
                        ),
                        Divider(
                          color: Colors.grey,
                        ),
                      ],
                    ),
                  ),
                ),
                actions: <Widget>[
                  new FlatButton(
                    onPressed: () {
                      Navigator.of(context).pop(index);
                    },
                    child: new Text("确认"),
                  ),
                  new FlatButton(
                    onPressed: () {
                      Navigator.of(context).pop(-1);
                    },
                    child: new Text("取消"),
                  ),
                ],
              );
            });
      }
    
      void _showMyDialogWithStateBuilder(BuildContext context) {
        showDialog(
            context: context,
            builder: (context) {
              bool selected = false;
              return new AlertDialog(
                title: new Text("StatefulBuilder"),
                content:
                    new StatefulBuilder(builder: (context, StateSetter setState) {
                  return Container(
                    child: new CheckboxListTile(
                        title: new Text("选项"),
                        value: selected,
                        onChanged: (bool) {
                          setState(() {
                            selected = !selected;
                          });
                        }),
                  );
                }),
              );
            });
      }
    
      void _showMyCustomLoadingDialog(BuildContext context) {
        showDialog(
            context: context,
            barrierDismissible: false,
            builder: (context) {
              return new MyCustomLoadingDialog();
            });
      }
    }
    
    class MyCustomLoadingDialog extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        Duration insetAnimationDuration = const Duration(milliseconds: 100);
        Curve insetAnimationCurve = Curves.decelerate;
    
        RoundedRectangleBorder _defaultDialogShape = RoundedRectangleBorder(
            borderRadius: BorderRadius.all(Radius.circular(2.0)));
    
        return AnimatedPadding(
          padding: MediaQuery.of(context).viewInsets +
              const EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0),
          duration: insetAnimationDuration,
          curve: insetAnimationCurve,
          child: MediaQuery.removeViewInsets(
            removeLeft: true,
            removeTop: true,
            removeRight: true,
            removeBottom: true,
            context: context,
            child: Center(
              child: SizedBox(
                width: 120,
                height: 120,
                child: Material(
                  elevation: 24.0,
                  //dialog背景颜色
                  color: Color(0x88000000),
                  type: MaterialType.card,
                  //在这里修改成我们想要显示的widget就行了,外部的属性跟其他Dialog保持一致
                  child: new Column(
                    mainAxisSize: MainAxisSize.min,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      new CircularProgressIndicator(
                        //圆圈颜色控制
                        valueColor: AlwaysStoppedAnimation(Colors.white),
                      ),
                      Padding(
                        padding: const EdgeInsets.only(top: 20),
                        child: new Text(
                          "加载中",
                          style: TextStyle(color: Colors.white),
                        ),
                      ),
                    ],
                  ),
                  shape: _defaultDialogShape,
                ),
              ),
            ),
          ),
        );
      }
    }
    
    

    相关文章

      网友评论

          本文标题:Flutter之Dialog

          本文链接:https://www.haomeiwen.com/subject/qytueqtx.html