首页 > 解决方案 > 无法关闭对话框

问题描述

我正在使用SimpleDialogwhich 具有SimpleDialogOption可用于在对话框中构建列表的子项。我的对话框在一个FutureBuilder,所以我需要用WidgetsBinding.instance.addPostFrameCallback((_). SimpleDialogOption有一个onPressed回调,我可以在其中设置状态。这调用了另一个重建,因为WidgetsBinding.instance.addPostFrameCallback((_)(我认为!)而使对话框保持打开状态。如果我不调用 setState,对话框就会消失。我无法关闭我的对话。反正围绕这个...

FutureBuilder<List<Suburb>>(
            future: suburbs,
            builder: (context, snapshot) {
              switch (snapshot.connectionState) {

                // when future has not finished
                case ConnectionState.active:
                case ConnectionState.waiting:
                  return CircularProgressIndicator();

                // when future has finished
                case ConnectionState.done:
                  final suburbs = snapshot.data;
                  if (suburbs == null) {
                    WidgetsBinding.instance.addPostFrameCallback((_) {
                      showAlertDialog(
                        context: context,
                        title: 'No postocde',
                        content: 'We can' '/t seem to find that postocode ',
                        defaultActionText: 'OK',
                      ).then((_) => _controller.clear());
                    });
                    return Container();
                  }
                  if (suburbs.length == 1) {

                  suburb = suburbs[0].name;
                        suburbCode = suburbs[0].code;
                   return(Text(suburbs[0].name));

                  } else if (suburbs.length == 2) {

                      showDialog(
                          context: context,
                          builder: (BuildContext context) {
                            return SimpleDialog(
                              backgroundColor: Colors.white,
                              title: Text('Pick'),
                              children: [
                                SimpleDialogOption(
                                  child: Text(suburbs[0].name),
                                  onPressed: () {
                                    Navigator.of(context).pop();
                                    setState(() {
                                      WidgetsBinding.instance
                                          .cancelFrameCallbackWithId(1);
                                      suburb = suburbs[0].name;
                                    });
                                  },
                                ),
                                SimpleDialogOption(
                                  child: Text(suburbs[1].name),
                                  onPressed: () {
                                    Navigator.of(context).pop();
                                    setState(() {
                                      suburb = suburbs[0].name;
                                    });
                                  },
                                )
                              ],
                            );
                          });


                    return Column(
                      children: [
                        FlatButton(
                          child: Text(suburbs[0].name),
                          onPressed: () {
                            setState(() {
                              suburb = suburbs[0].name;
                              suburbCode = suburbs[0].code;
                            });
                          },
                        ),
                        FlatButton(
                          child: Text(suburbs[1].name),
                          onPressed: () {
                            setState(() {
                              suburb = suburbs[1].name;
                              suburbCode = suburbs[1].code;
                            });
                          },
                        ),
                      ],
                    );
                  }
                  return Container();

                // initial title
                default:
                  return Container();
              }
            },
          ),

标签: flutter

解决方案


推荐阅读