일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 청년도약계좌환승
- 도약연계
- flutter #dart #stream
- Flutter #Stream
- 희망적금전환
- 도약계좌전환
- 희망적금연계
- 플러터 #안드로이드 #플레이콘솔 #앱내리기
- 안드로이드 #코틀린 #코루틴 #콜백 #채널
- 조립 후 재부팅
- Flutter #Stream #dart
- 도약전환
- Today
- Total
Flutter 개발 상자
[Flutter] Riverpod의 Provider(Notifier) 영역에서 context나 TextEditingController를 써도 되는가? 본문
[Flutter] Riverpod의 Provider(Notifier) 영역에서 context나 TextEditingController를 써도 되는가?
망고상자 2024. 1. 1. 21:36
선결론
답은 안된다.
물론 이 답변은 된다/안된다 2개중에 선택하라고 했을때 안된다는거고
프로그래머의 성향에 따라서 Provider영역에서 Context를 받아서 ShowDialog를 해준다거나... 해줄수도 있다. 어찌됐건 권장하지 않는다는거지 아예 컴파일이 안되거나 런타임 에러가 발생하는건 아니다.
왜 안되는가? 에 대한 답변은
https://riverpod.dev/ko/docs/essentials/do_dont#avoid-using-providers-for-local-widget-state
DO/DON'T | Riverpod
To ensure good maintainability of your code, here is a list of good practices
riverpod.dev
리버팟의 공식 문서에 적혀있다.
요점은 로컬 위젯의 상태를 Provider에 넘기지 말라는것이다.
그리고 Context나 TextEditingController는 로컬 위젯 상태에 해당한다.
의문점
근데 Context는 둘째치고
TextEditingController는 참 애매한 부분이긴하다.
TextEditingController는 위젯과 연결되며, 위젯이 더이상 사용되지 않을때 Dispose를 해주어야한다.
따라서 위젯의 생명주기와 함께해야하기에 위젯의 일부분으로 볼 수 있다.
하지만 본질적으로 TextEditingController는 ValueNotifier를 상속받고 있다. 어떠한 값을 저장하고 있다가 값이 변하는 순간 위젯에게 알려주는 전형적인 상태관리를 위한 클래스이다.
이런 두가지의 특성이 합쳐지면서 Riverpod의 창시자 레미는 '로컬 위젯 상태' 라는 단어를 언급한것같다.
분명 '상태' 는 맞다.
하지만 이 '상태'는 상태관리라는 명목하에 위젯과 분리되선 안되고, 위젯과 함께 해야한다.
그럼에도 불구하고 불편하다.
머리로는 이해했다. 이해했는데 위젯에 순수하게 View를 위한 코드 이외에 뷰의 상태가 있는 코드가 공존하는것 자체가 거부감이 심하다. 특히 MVVM 패턴에 뇌가 절여진 상태라면 더더욱 그렇다.
레미는 그래서 Flutter_hooks를 사용해보라고 하고 있다.
근데 저것도 결국 위젯단의 코드를 줄여주는 역할을 할뿐 위젯에서 아예 코드를 분리시켜 버리는 방법은 아니라서 찜찜하다. Getx <<<< 이 금단의 비기를 사용한다면 완벽한 분리가 가능하긴하다. 이것때문에 사람들이 Getx를 좋아하는 것 같기도 하다.
나도 Getx의 열혈팬이지만 더이상 사용하지 않고있다. Getx의 창시자는 다른사람과의 협업을 극도로 싫어하는 성향을 보이는데 최근 1년간 Getx에 대한 업데이트가 뜸해지기 시작해서 지속해서 이 패키지가 유지보수 될 수 있을지 불투명하기에 사용을 하지 않는 것이 좋다고 생각한다.
결론은 최대한 위젯을 쪼개자
위젯을 최대한 쪼개서 하나의 위젯 파일에 과도하게 많은 상태코드가 들어가지 않도록 만들어주자.
그렇게 하다보면 생각보다 코드가 지저분하지 않다.
그리고 TextEdting이나 Form을 사용하는곳에서는 hook을 이용해보는것도 좋을것이다.
'Flutter' 카테고리의 다른 글
[Flutter] 현 시점 GetX를 쓰지 말아야 하는 이유 (2) | 2024.01.05 |
---|---|
[Flutter Stream⑤] StreamTransformer 스트림을 변형 (1) | 2024.01.01 |
[Flutter] Talker 패키지를 이용하여 로그(Log)를 파일로 저장하기 (0) | 2023.12.21 |
[Flutter Stream④] StreamController 활용 (2) | 2023.11.12 |
[Flutter Stream③] StreamSubscription 활용 (0) | 2023.11.12 |