[Flutter] PopupMenuButton 에서 Dialog 안열릴때 방법

love&peace·2023년 12월 25일

상황: PopupMenuButton에 PopupMenuItem를 눌렀을 때 Dialog가 열리지 않음


이유: PopupMenuItem의 onTap 콜백은 Navigator.pop을 호출하여 팝업을 닫음 -> dialog 도 같이 닫힘


해결: 딜레이를 줘서 해결

 PopupMenuButton(itemBuilder: (context) {
                              return [
                                PopupMenuItem(
                                  child: const Text("리뷰 등록"),
                                  onTap: () {
                                    Future.delayed(
                                        const Duration(seconds: 0),
                                        () => showDialog(
                                              context: context,
                                              builder: (context) {
                                                return AlertDialog(
                                                  title: const Text("리뷰 등록"),
                                                  actions: [
                                                    TextButton(
                                                      onPressed: () =>
                                                          Navigator.of(
                                                                  context)
                                                              .pop(),
                                                      child: const Text("취소"),
                                                    ),
                                                    TextButton(
                                                        onPressed: () {},
                                                        child:
                                                            const Text("등록"))
                                                  ],
                                                  content: Column(
                                                    mainAxisSize:
                                                        MainAxisSize.min,
                                                    children: [
                                                      TextFormField(),
                                                      Row(
                                                        children:
                                                            List.generate(
                                                          5,
                                                          (index) =>
                                                              const Icon(
                                                            Icons.star,
                                                            color:
                                                                Colors.orange,
                                                          ),
                                                        ),
                                                      ),
                                                    ],
                                                  ),
                                                );
                                              },
                                            ));
                                  },
                                ),
                                PopupMenuItem(child: Text("data"))
                              ];
                            }),

참고 : stackoverflow

0개의 댓글