ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Flutter】入门14-对话框

2020-02-06 09:40:29  阅读:609  来源: 互联网

标签:14 对话框 Text title BuildContext children context child Flutter


SimpleDialog

 String _choice = '请选择';

  Future _openSimpleDialog() async {
    final option = await showDialog(
        context: context,
        builder: (BuildContext context) {
          return SimpleDialog(
            title: Text('请选择'),
            children: <Widget>[
              SimpleDialogOption(
                child: Text('item1'),
                onPressed: () {
                  //关闭对话框并放回 "item1"
                  Navigator.pop(context, "item1");
                },
              ),
              SimpleDialogOption(
                child: Text('item2'),
                onPressed: () {
                  Navigator.pop(context, 'item2');
                },
              ),
              FlatButton(
                  onPressed: () {
                    Navigator.pop(context, '请选择');
                  },
                  child: Text('取消'))
            ],
          );
        });

    setState(() {
      _choice = option;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text('Gecer')),
        body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              //使用InkWell 是为了给子元素添加点击事件
              InkWell(
                onTap: _openSimpleDialog,
                child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      Icon(
                        Icons.favorite,
                        color: Colors.redAccent,
                      ),
                      //DateFormat 引用于intl
                      Text(_choice)
                    ]),
              )
            ]));
  }

AlertDialog 

Future _openAlertDialog() async {
    final action = await showDialog(
      context: context,
      barrierDismissible: false, //当为flase时代表不能通过点击空白处关闭对话框
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('提示'),
          content: Text('To be?'),
          actions: <Widget>[
            FlatButton(
              child: Text('Cancel'),
              onPressed: () {
                Navigator.pop(context, false);
              },
            ),
            FlatButton(
              child: Text('Ok'),
              onPressed: () {
                Navigator.pop(context, true);
              },
            ),
          ],
        );
      },
    );
    setState(() {
      _choice = action.toString();
    });
  }

BottomSheet(通过key)

final _bottomSheetScaffoldKey = GlobalKey<ScaffoldState>();
  _openBottomSheet() {
    _bottomSheetScaffoldKey.currentState
        .showBottomSheet((BuildContext context) {
      return BottomAppBar(
        child: Container(
          height: 90.0,
          width: double.infinity,
          padding: EdgeInsets.all(16.0),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Icon(Icons.favorite,color:Colors.redAccent),
             Text('surprise')
            ],
          ),
        ),
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        key: _bottomSheetScaffoldKey,
        appBar: AppBar(title: Text('Gecer')),
        body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              //使用InkWell 是为了给子元素添加点击事件
              InkWell(
                onTap: _openBottomSheet,
                child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      Icon(
                        Icons.favorite,
                        color: Colors.redAccent,
                      ),
                      Text('打开')
                    ]),
              )
            ]));
  }

BottomSheet(不通过key)

String _choice = '打开';
  Future _openModalBottomSheet() async {
    final option = await showModalBottomSheet(
        context: context,
        builder: (BuildContext context) {
          return Container(
            height: 200.0,
            child: Column(
              children: <Widget>[
                ListTile(
                  title: Text('Item1'),
                  onTap: () {
                    Navigator.pop(context, 'Item1');
                  },
                ),
                ListTile(
                  title: Text('Item2'),
                  onTap: () {
                    Navigator.pop(context, 'Item2');
                  },
                ),
                ListTile(
                  title: Text('Item3'),
                  onTap: () {
                    Navigator.pop(context, 'Item3');
                  },
                ),
              ],
            ),
          );
        });
    setState(() {
      _choice = option;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text('Gecer')),
        body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              //使用InkWell 是为了给子元素添加点击事件
              InkWell(
                onTap: _openModalBottomSheet,
                child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      Icon(
                        Icons.favorite,
                        color: Colors.redAccent,
                      ),
                      Text(_choice)
                    ]),
              )
            ]));
  }

SnackBar

//调用
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text('Gecer')),
        body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              SnackBarButton()
            ]));
  }


//定义
class SnackBarButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FlatButton(
      child: Text('Open SnackBar'),
      onPressed: () {
        Scaffold.of(context).showSnackBar(
          SnackBar(
            content: Text('Processing...'),
            action: SnackBarAction(
              label: 'OK',
              onPressed: () {},
            ),
          )
        );
      },
    );
  }
}

 

夜雨Gecer 发布了63 篇原创文章 · 获赞 4 · 访问量 8008 私信 关注

标签:14,对话框,Text,title,BuildContext,children,context,child,Flutter
来源: https://blog.csdn.net/weixin_39370093/article/details/104191815

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有