Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- PCA
- BOF
- Widget
- Image Processing
- ARM
- rao
- Computer Architecture
- BAEKJOON
- FastAPI
- study book
- llm을 활용 단어장 앱 개발일지
- 백준
- Stream
- MATLAB
- Got
- BFS
- DART
- system hacking
- Kaggle
- fastapi를 사용한 파이썬 웹 개발
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- Flutter
- Dreamhack
- Algorithm
- MDP
- ML
- 영상처리
- pytorch
- bloc
- C++
Archives
- Today
- Total
Bull
[Flutter] 부모위젯이 자식위젯의 method 호출 방법 본문
서론
appBar와 BottomBar는 BottomNavigator 때문에 home_page 스크립트에서 관리되고 각 메뉴별 페이지를 렌더링하는 방식이다. 그래서 appBar에 편집 메뉴를 실행하면 tag_page의 method를 사용하고 싶었다.
home_page에 HomePage 클래스에 메소드를 선언하고 callBack으로 전달해주어도 되지만 그렇게하면 구조적으로 역할이 모호해지는 게 싫었다.
그래서 TagPage에 method를 선언하고 HomePage의 appBar에서 메소드를 호출할 수 있도록 하고 싶었다. 즉 부모 위젯이 자식위젯의 메소드를 사용하게끔 유도해주는 것이다.
방법
방법은 다음과 같다.
1. 글로벌 키 생성
// home_page.dart
final GlobalKey<TagPageState> _tagPageKey = GlobalKey<TagPageState>();
해당 키를 통해 메소드를 호출할 수 있다. 여기서 주의해야할 사항은 페이지의 상태를 나타내는 클래스인 TagPageState
은 원래 private로 지정되어있는데 임포트를 통해 사용할 수 있어야하므로 _
를 제거 해주어야 한다.
2. 글로버 키 전달
// home_page.dart
List<Widget> _widgetOptions() {
return <Widget>[
WordPage(),
StreakPage(),
TagPage(key: _tagPageKey),
SettingsPage(),
];
}
해당 키를 프로퍼티로 전달해준다. 키 프로퍼티는 기본적으로 StatefulWidget
에서 상속 받기 때문에 TagePage에서 생성자를 통해 초기화된다.
// tag_page.dart
class TagPage extends StatefulWidget {
const TagPage({super.key});
@override
TagPageState createState() => TagPageState();
}
3. 자식 메소드 호출
// home_page.dart
_tagPageKey.currentState!.showEditOptionsDialog(context);
TagPage에 있는 showEditOptionsDialog
메소드를 호출한다.
'Software Framework > Flutter' 카테고리의 다른 글
[Flutter::trubleshooting] flutter_launcher_icons black background trubleshooting (android) (0) | 2024.09.29 |
---|---|
[Flutter:: Widget] ReorderableListView 수동 정렬하기 (0) | 2024.09.26 |
[Flutter::Widget] Netiveview(ImagePicker)에서 상태 변경으로 이미지가 렌더링될 때 스크롤 하는 방법 (1) | 2024.09.01 |
[Flutter::Widget] StatefulBuilder (0) | 2024.08.27 |
[Flutter::Widget] Dialog 종류 (0) | 2024.08.27 |