微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【Flutter】入门14-对话框

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 私信 关注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐