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
- geofencing
- FLUTTER
- Session
- Code
- Swift
- appstore
- Notification
- SwiftUI
- JPA
- Realm
- window
- IOS
- rxswift
- MacOS
- error
- Git
- UIButton
- github
- Archive
- Xcode
- view
- Firebase
- darkmode
- 한글
- 이미지
- 웹뷰
- Apple
- iOS16
- mac
- 개발자
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
GetIt , Go Router, BloC 함께 사용시 BloC이 계속 생성되는 문제 본문
반응형
개요
- GetIt, Go Router, BloC 사용
- FirstParty인 pushNamed를 사용할 때는 문제 없었으나, Go Router으로 마이그레이션 후 버그 발생
- A 페이지에 진입, 다른 페이지 이동, A 페이지로 pop 할 때 자꾸 A BloC이 생성됨
문제 현상
전역 / 싱글톤 BloC을 최대한 피하고자 A 페이지와 A BloC의 생명 주기를 같게하려 했었음
- GetIt registerFactoryParam으로 A BloC 등록
- Go Router코드
- BloC을 미리 생성하여 A 페이지로 이동하는 코드에 넣어줌으로써
GoRoute(
path: "a",
builder: (context, state) {
return BlocProvider.value(
value: getIt<ABloC>(),
child: const APage(),
);
},
),
- A 페이지에 진입시 A BloC 생성 (ok)
- A 페이지에서 서브페이지인 B 페이지로 이동할 때 A BloC 생성(?)
- B 페이지에서 pop하여 A 페이지로 이동할 때도 A BloC 생성 (???)
- B 에서 A 로 돌아왔을 때 A의 상태값도 이상함
솔루션
BlocProvider value를 사용하지 말고 create를 사용했더니 문제는 해결
GoRoute(
path: "a",
builder: (context, state) {
return BlocProvider(
create: () => getIt<ABloC>(),
child: const APage(),
);
},
),
다만 의문점 존재..
- create는, BlocProvider 본인이 BloC을 생성하고 BloC과 생명주기를 같이하는데,
- value는 BlocProvider가 BloC의 생명주기에 관여하지 않아서 BloC이 자꾸 dispose 된다 까지 이해 ok
- 왜 서브화면 진입이나 pop할 때 자꾸 Create 하는가?
- dispose 되는 거라면 왜 Observer의 onClose에 잡히지 않는가?
- pushNamed 에서는 왜 정상작동 했는가?
'Flutter' 카테고리의 다른 글
Flutter ) webview_flutter image, file 첨부 (0) | 2025.01.17 |
---|---|
Flutter ) Bloc 사용법 (0) | 2024.07.21 |
Comments