• flutter Material风格-弹出框、面板


    1.SimpleDialog

    简单对话框 

    class _MyHomePageState extends State<MyHomePage> {
      dialog() {
        showDialog(context: context,
          builder: (BuildContext context){
          return SimpleDialog(
            title: Text("data"),
          );
          }
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: RaisedButton(
              child: Text("btn"),
              color: Colors.amberAccent,
              textColor: Colors.grey,
              onPressed: dialog,
            ),
          ),
        );
      }
    }

     添加SimpleDialogOption

    dialog() {
        showDialog(context: context,
          builder: (BuildContext context){
          return 
            SimpleDialog(
            title: Text("data"),
            children: <Widget>[
              SimpleDialogOption(
                child: Text("aa"),
                onPressed: (){
                  print("aa");
                },
              ),
              SimpleDialogOption(
                child: Icon(Icons.pets),
                onPressed: (){
                  print("pets");
                },
              ),
            ],
          );
          }
        );
      }

     

    2.AlertDialog

    报警对话框

    Center(
                  child: AlertDialog(
                    title: Text("alert"),
                    content: Text("How are you!!!"),
                  ),
              )

    内容可以使用任意控件

    content: Icon(Icons.toys),

     添加按钮

    AlertDialog(
                    title: Text("alert"),
                    content: Text("是否要删除数据?"),
                    actions: [
                      FlatButton(child: Text("")),
                      FlatButton(child: Text("")),
                    ],
                    //高度
                    elevation: 20 ,
                  )

    各种属性

    AlertDialog(
                    title: Text("alert"),
                    content: Text("是否要删除数据?"),
                    actions: [
                      FlatButton(child: Text("")),
                      FlatButton(child: Text("")),
                    ],
                    //高度
                    elevation: 10 ,
                    //背景色
                    backgroundColor: Colors.white54,
                    //形状
                    shape: CircleBorder(),
                  )

    弹出

    class _MyHomePageState extends State<MyHomePage> {
      alert() {
        showDialog(
            context: context,
            barrierDismissible: false,
            builder: (BuildContext context) {
              return AlertDialog(
                title: Text("对话框"),
                content: Text("确定要删除数据吗?"),
                actions: <Widget>[
                  FlatButton(
                    child: Text("是的"),
                    onPressed: () {
                      Navigator.pop(context);
                    },
                  ),
                  FlatButton(
                    child: Text("取消"),
                    onPressed: () {
                      Navigator.pop(context);
                    },
                  ),
                ],
              );
            });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: RaisedButton(
              child: Text("按钮"),
              color: Colors.amberAccent,
              textColor: Colors.grey,
              onPressed: alert,
            ),
          ),
        );
      }
    }

    点击是或否触发事件

    enum Action { OK, Cancel }
    
    class _MyHomePageState extends State<MyHomePage> {
      String btn = "按钮";
    
      Future alert() async {
        final action = await showDialog(
            context: context,
            barrierDismissible: false,
            builder: (BuildContext context) {
              return AlertDialog(
                title: Text("对话框"),
                content: Text("确定要删除数据吗?"),
                actions: <Widget>[
                  FlatButton(
                    child: Text("是的"),
                    onPressed: () {
                      Navigator.pop(context,Action.OK);
                    },
                  ),
                  FlatButton(
                    child: Text("取消"),
                    onPressed: () {
                      Navigator.pop(context,Action.Cancel);
                    },
                  ),
                ],
              );
            });
        switch (action) {
          case Action.OK:
            setState(() {
              //更新界面内容
              btn = "按钮OK";
            });
            break;
          case Action.Cancel:
            setState(() {
              btn = "按钮取消";
            });
            break;
          default:
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: RaisedButton(
              child: Text(btn),
              color: Colors.amberAccent,
              textColor: Colors.grey,
              onPressed: alert,
            ),
          ),
        );
      }
    }

    3.SnackBar

    class app extends StatefulWidget {
      @override
      _appState createState() => _appState();
    }
    
    class _appState extends State<app> {
      @override
      Widget build(BuildContext context) {
        return Container(
          child: RaisedButton(
            child: Text(""),
            color: Colors.lightBlue,
            onPressed: () {
              Scaffold.of(context).showSnackBar(SnackBar(
                content: Text("是否要退出"),
                action: SnackBarAction(
                  label: "",
                  onPressed: (){
                    Navigator.pop(context);
                  },
                ),
              ));
            },
          ),
        );
      }
    }

     //可以设置持续时间  duration: Duration(seconds: 5),

     注意Scaffold.of(context).showSnackBar() 上层  build(BuildContext context) 要在Scaffold()之下 否则会报错:

    Scaffold.of() called with a context that does not contain a Scaffold

    4.BottomSheet

    和snack不同,它会持久的显示底部的滑动窗口

    Container(
              child: RaisedButton(
                child: Text("data"),
                onPressed: () {
                  showModalBottomSheet(
                    context: context,
                    builder: (BuildContext context) {
                      return new Container(
                        height: 30.0,
                        child: Text("data"),
                      );
                    },
                  ).then((val) {});
                },
              ),
            )

    5.ExpansionPanel 

    收缩面板 

    报错:RenderListBody must have unlimited space along its main axis.

    主轴要有无线空间

    class _MyHomePageState extends State<MyHomePage> {
      bool _isExpanded = false;
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text(widget.title),
            ),
            body: Container(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  ExpansionPanelList(
                    //控制点击收缩
                    expansionCallback: (int panelIndex, bool isExpanded){
                      setState(() {
                        _isExpanded = !isExpanded;
                      });
                    },
                    children: [
                      ExpansionPanel(
                          headerBuilder: (BuildContext context, bool isExpanded) {
                            return Container(
                              padding: EdgeInsets.all(16.0),
                              child: Text("aa"),
                            );
                          },
                          body: Container(
                            padding: EdgeInsets.all(16.0),
                             double.infinity,
                            child: Text("bbb"),
                          ),
                        //默认展开
                        isExpanded: _isExpanded,
                        canTapOnHeader: true
                      ),
                    ],
                  )
                ],
              ),
            ));
      }
    }

  • 相关阅读:
    【C#】进行HTTP请求需要设置的参数
    【C#】Json转换Xml真的有那么麻烦吗?用两句话真正搞定Json转Xml
    N queens 2
    Combination sum
    Convert sorted array into binary search tree
    Climbing stairs LeetCode
    Convert sorted list into binary search tree
    N queens LeetCode
    解决IIS安装的问题:要求输入用户名和密码
    实现动态下拉框
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/10937622.html
Copyright © 2020-2023  润新知