flutter Material风格-弹出框、面板
  sX9JkgY3DY86 2023年11月13日 14 0

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,
),
),
);
}
}

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

 

 添加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");
},
),
],
);
}
);
}

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

2.AlertDialog

报警对话框

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

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

内容可以使用任意控件

 

content: Icon(Icons.toys),

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

 

 添加按钮

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

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

 

各种属性

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,
),
),
);
}
}

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

 

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

 

点击是或否触发事件

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);
},
),
));
},
),
);
}
}

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

 //可以设置持续时间  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),
width: double.infinity,
child: Text("bbb"),
),
//默认展开
isExpanded: _isExpanded,
canTapOnHeader: true
),
],
)
],
),
));
}
}

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

 



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: Flutter 安装vscode 下一篇: flutter 按键监听
  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  b1UHV4WKBb2S   2023年11月13日   24   0   0 ide抗锯齿
  b1UHV4WKBb2S   2023年11月13日   21   0   0 裁剪ideflutter
  zSWNgACtCQuP   2023年11月13日   19   0   0 ide
sX9JkgY3DY86