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()
,您在哪里调用按下的
?回调中的
上下文
可能是错误的,但对话框小部件中的上下文应该是正确的。不幸的是,没有你的对话框小部件的具体实现,我想不出任何其他的东西。我试过了。没有用