Flutter 当需要调用setState时,关闭颤振中的简单对话框
在Flutter 当需要调用setState时,关闭颤振中的简单对话框,flutter,Flutter,在simpledialogooption小部件的onPressed属性上调用Navigator.of(context).pop()时遇到问题。我需要设置状态并关闭对话框。但是调用setState会阻止对话框关闭。如果不使用setState,对话框将关闭。这是我的对话 WidgetsBinding.instance.addPostFrameCallback((_) { showDialog(
simpledialogooption
小部件的onPressed
属性上调用Navigator.of(context).pop()时遇到问题。我需要设置状态并关闭对话框。但是调用setState
会阻止对话框关闭。如果不使用setState
,对话框将关闭。这是我的对话
WidgetsBinding.instance.addPostFrameCallback((_) {
showDialog(
builder: (BuildContext context) {
return SimpleDialog(
children: _children(suburbs),
backgroundColor: Colors.white,
title: Text('Pick your suburb'),
);
},
context: context);
});
以及我用于对话框列表的方法:
List<Widget> _children(List<Suburb> suburbs) {
return suburbs
.map((suburb) => SimpleDialogOption(
onPressed: () {
print('@@@@@@@@@@@@@@@@@@@@@');
setState(() {
postcode = suburb.name;
});
Navigator.of(context).pop();
},
child: Text(suburb.name)))
.toList();
}
List\u子项(列表){
返回郊区
.map((郊区)=>SimpleDialog选项(
已按下:(){
打印('@@@@@@@@@@@@@@@@@@@@');
设置状态(){
邮政编码=郊区名称;
});
Navigator.of(context.pop();
},
子项:文本(郊区名称)))
.toList();
}
您可以等待,直到navigator.pop返回值,
然后调用setState
WidgetsBinding.instance.addPostFrameCallback((_) async {
postcode = await showDialog(
builder: (BuildContext context) {
return SimpleDialog(
children: _children(suburbs),
backgroundColor: Colors.white,
title: Text('Pick your suburb'),
);
},
context: context);
setState(() {
postcode;
});
});
List<Widget> _children(List<Suburb> suburbs) {
return suburbs
.map((suburb) => SimpleDialogOption(
onPressed: () {
print('@@@@@@@@@@@@@@@@@@@@@');
Navigator.of(context).pop(suburb.name);
},
child: Text(suburb.name)))
.toList();
}
WidgetsBinding.instance.addPostFrameCallback((\ux)异步{
邮政编码=等待显示对话框(
生成器:(BuildContext上下文){
返回SimpleDialog(
儿童:_儿童(郊区),
背景颜色:Colors.white,
标题:文本(“选择你的郊区”),
);
},
语境:语境);
设置状态(){
邮政编码
});
});
列出儿童(列出郊区){
返回郊区
.map((郊区)=>SimpleDialog选项(
已按下:(){
打印('@@@@@@@@@@@@@@@@@@@@');
Navigator.of(context.pop)(郊区名称);
},
子项:文本(郊区名称)))
.toList();
}
您可以等待,直到navigator.pop返回值,
然后调用setState
WidgetsBinding.instance.addPostFrameCallback((_) async {
postcode = await showDialog(
builder: (BuildContext context) {
return SimpleDialog(
children: _children(suburbs),
backgroundColor: Colors.white,
title: Text('Pick your suburb'),
);
},
context: context);
setState(() {
postcode;
});
});
List<Widget> _children(List<Suburb> suburbs) {
return suburbs
.map((suburb) => SimpleDialogOption(
onPressed: () {
print('@@@@@@@@@@@@@@@@@@@@@');
Navigator.of(context).pop(suburb.name);
},
child: Text(suburb.name)))
.toList();
}
WidgetsBinding.instance.addPostFrameCallback((\ux)异步{
邮政编码=等待显示对话框(
生成器:(BuildContext上下文){
返回SimpleDialog(
儿童:_儿童(郊区),
背景颜色:Colors.white,
标题:文本(“选择你的郊区”),
);
},
语境:语境);
设置状态(){
邮政编码
});
});
列出儿童(列出郊区){
返回郊区
.map((郊区)=>SimpleDialog选项(
已按下:(){
打印('@@@@@@@@@@@@@@@@@@@@');
Navigator.of(context.pop)(郊区名称);
},
子项:文本(郊区名称)))
.toList();
}
我认为您需要先使用Navigator,然后调用SetState谢谢,但尝试过了。为什么不从SimpleDialog选项中调用导航器.of(context).pop()
,在该选项中,您可以调用按下的
?回调中的上下文
可能是错误的,但对话框小部件中的上下文应该是正确的。不幸的是,如果没有对话框小部件的具体实现,我就想不出其他任何东西了。我试过了。我认为你需要先使用Navigator,然后调用SetState谢谢,但试过了。你为什么不从SimpleDialog选项中调用Navigator.of(context).pop()
,您在哪里调用按下的
?回调中的上下文
可能是错误的,但对话框小部件中的上下文应该是正确的。不幸的是,没有你的对话框小部件的具体实现,我想不出任何其他的东西。我试过了。没有用