版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
转自:https://blog.csdn.net/yumi0629/article/details/81939936
showDialog(
context: context,
builder: (context) {
String label = 'test';
return StatefulBuilder(
builder: (context, state) {
print('label = $label');
return GestureDetector(
child: Text(label),
onTap: () {
label = 'test8';
print('onTap:label = $label');
// 注意不是调用老页面的setState,而是要调用builder中的setState。
//在这里为了区分,在构建builder的时候将setState方法命名为了state。
state(() {});
},
);
},
);
});
例子:多选
//显示多选框
_showDialog() async {
boolList = List<bool>();
await showDialog(
context: context,
builder: (context) {
return StatefulBuilder(
builder: (context,state){
return CupertinoAlertDialog(
title: Text('请选择'),
actions: <Widget>[
CupertinoDialogAction(
isDestructiveAction: true,
onPressed: () {
Navigator.of(context).pop('取消');
},
child: new Text('取消')),
CupertinoDialogAction(
isDestructiveAction: true,
onPressed: () {
//保存数据
_jyfw.text = "";
for(int i=0;i<boolList.length;i++){
if(boolList[i]){
if(_jyfw.text==null||_jyfw.text.isEmpty){
_jyfw.text = _selctlist[i]['value'];
}else{
_jyfw.text = _jyfw.text + "," +_selctlist[i]['value'];
}
}
}
setState(() {});
Navigator.of(context).pop('确定');
},
child: new Text('确定')),
],
content: SingleChildScrollView(
child: Material(
child: Column(
children: _getMulitiWidget(_selctlist,state)
),
),
),
);
}
);
}
);
}
List<Widget> _getMulitiWidget(List<Map> list,state){
List<Widget> widgetList = List<Widget>();
for(int i=0;i<list.length;i++){
boolList.add(false);
widgetList.add(Container(
child: CheckboxListTile(
title: Text(list[i]['name']),
value: boolList[i],
onChanged: (value){
boolList[i] = value;
state(() {});
}
),
));
};
return widgetList;
}