PopupMenu example on Flutter

Flutter 앱에서 깔끔한 Popup Menu 라이브러리 를 사용해서 팝업을 띄우는 예제를 작성해 본다.

근데, 이미 Popup Menu 저장소에 샘플 코드가 포함되어 있음.. ㅎ;

플러터 프로젝트 어떻게 만드는지 모르면, Flutter 는 여기를 참고해서 작성하자.

popup_menu_prj$ tree
.
├── README.md
├── android
├── build
├── ios
├── lib
│   └── main.dart
├── pubspec.yaml
└── test

이 샘플에, 다음과 같은 팝업 메뉴를 띄우도록 할 거임.

Add Dependency

pubspec.yaml 파일에 popup_menu 의존성 추가.

dependencies:
+  popup_menu: ^1.0.1

소스에 Popup Menu 관련 코드 추가.

샘플을 만들떄 diff 를 남겨둔게 없어서, 기억에 의존해서 적은것임. 따라서, 실제 diff 포멧과는 다름 :P

Note. 소스코드 라인이 너무 길어지는거 같아서… 불필요한 라인은 줄여서 적음.

import 'package:flutter/material.dart';
+ import 'package:popup_menu/popup_menu.dart';
...

class _MyHomePageState extends State<MyHomePage> {
+  GlobalKey btnKey2 = GlobalKey();
...

  Widget build(BuildContext context) {
+    PopupMenu.context = context;
...

            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
+            Container(
+              child: MaterialButton(
+                  onPressed: customPopupMenu,
+                  key: btnKey2,
+                  height: 45.0,
+                  child: Text('Show Menu')),
+            ),
...

+  void customPopupMenu() {
+    var menu = PopupMenu(items: [
+      MenuItem(title: 'Home', image: Icon(Icons.home, color: Colors.white,)),
+      MenuItem(title: 'Setting',
+            image: Icon(Icons.settings, color: Colors.white,)),
+      MenuItem(title: 'PopupMenu',
+            image: Icon(Icons.menu, color: Colors.white,)),
+      MenuItem(title: 'Mail', image: Icon(Icons.mail, color: Colors.white,)),
+      MenuItem(title: 'Power', image: Icon(Icons.power, color: Colors.white,)),
+    ],
+    onClickMenu: onClickMenu,
+    onDismiss: onDismiss);
+
+    menu.show(widgetKey: btnKey2);
+  }
+
+  void onDismiss() { print('Menu is closed'); }
+
+  void onClickMenu(MenuItemProvider item) {
+    print('Click menu -> ${item.menuTitle}');
+  }

여기서 뭐 설명할건 없지만, _MyHomePageState::build() 에서 ‘Show Menu’ 텍스트가 적힌 MaterialButton 을 추가하고, 버튼이 눌렸을떄 customPopupMenu 가 호출되도록 처리함.

customPopupMenu 에서는 팝업 메뉴에 추가될 메뉴 아이템을 만들고, 핸들러를 등록 (onClickMenu: , onDismiss:) 후 메뉴를 보여 (.show) 줍니다.

간단하죠?


comments powered by Disqus