inflearn logo
강의

講義

知識共有

Flutter中級3編 - 依存性注入ガイド

23-InjectableによるDIの設定

뷰 모델 분리하기

解決済みの質問

334

xwlwhsx122708

投稿した質問数 8

0

뷰모델을 분리하는 방법에 대해 질문 드립니다.

하나의 scaffold (activity) 내에 여러개의 container (fragment : no scaffold) 가 있을 때 각각 프레그 먼트에 뷰모델을 사용하면 좋겠지만 부득이하게 상위 activity 뷰모델에 모든 프레그먼트의 로직을 담당해야 하는 상황에서 각 화면별로 뷰모델을 나누고자 합니다. swift 에서는 클래스 외부에 extension 으로 메소드 들을 기능별로 분리하여 사용하는 것을 알고 있고 dart 에도 extension 이 있어서 사용하려니 extention 할때 changenotifier 의 notifyListeners() 를 사용 할 수가 없어서 어려움을 겪고 있습니다. 다중상속도 지원하지 않기 때문에 어떻게 하면 좋을 지 조언 부탁드립니다. 감사합니다.

flutter mvvm provider 클린-아키텍처 dependency

回答 1

0

survivalcoding

각 화면별로 ViewModel을 나누지 마시고, 상위 activity 쪽에서만 ViewModel을 사용하시고 하위 fragment 쪽으로는 UI의 State와 이벤트를 올려 받을 콜백 함수만 전달하도록 합니다.

하위 fragment 에서의 State를 받아서 화면을 그리고, 유저 액션이 있는 경우에는 콜백 함수를 통해서 상위로 이벤트를 끌어올립니다.

콜백으로 올라온 이벤트를 activity 쪽의 ViewModel 에 전달하여 처리하는 방식으로 하시면 될 것 같습니다.

즉, 모든 fragment 들은 일반적으로 컴포넌트를 작성하는 느낌으로 State 와 콜백함수를 생성자로 받도록 작성하고

activity 쪽에서 모든 이벤트를 콜백으로 받아서 ViewModel에 전달하는 방식입니다.

해 보시다가 어려우시면 샘플 코드를 제시해 드리겠습니다.

0

xwlwhsx122708

답변 감사드립니다.

Q1) 제가 현재 하고 있는 방식은 activity에 뷰모델을 두고 있고 프레그먼트에서 이벤트에 해당하는 부분은 해당 뷰모델에 context.read<>().method 이렇게 접근하고 있는데요. 이렇게 하면 문제가 생기는 지요?

 

Q2) Ui측면에서 복잡성 보다 뷰모델의 복잡성에 대해 문제점을 삼고 있었습니다. 하나의 뷰모델에 여러 프레그 먼트를 담당하다보니 코드가 너무 더러워지는 데요. 이때 기능별로 메소드를 분리하는 기법? 같은게 있을까해서 여쭤봅니다.

0

survivalcoding

Q1) 상황에 따라 문제가 될 수도 안 될수도 있습니다. fragment에서 매번 context.read<>() 를 하면 모든 fragment 가 ViewModel과 Provider와의 불필요한 의존성이 생기고 UI Test 코드 를 짜야 하는 경우에는, 테스트 코드를 짜기 어렵기 때문에 개인적으로 선호하지는 않습니다.

Q2) 뷰모델이 방대해 지는 경우 최대한 모든 기능을 UseCase 로 만들어서 뷰모델측의 코드를 단순화 하는 것이 최선인 것 같습니다.

198강 (){onTap(e);}의 이해 돕기

0

29

1

Node 관련 질문입니다

0

30

3

구글 소셜 로그인 후 로그인 시 구글에러

0

26

2

실습중(개인 비용 관리 앱) 문의드려요

0

43

2

6강에 비디오가 이상해요

0

27

2

Isar 마지막 업데이트는 2년전입니다.

0

30

0

수강연장부탁드려도될까요..

0

42

2

Chat GPT API 설정하기 프롬프트

0

46

2

FlutterSecureStorage 질문

0

31

0

구글 플레이 등록 시, Privact Policy URL 등록 팁

0

41

1

질문있습니다!

0

19

0

2-8강 Websocket server running on port가 안 뜹니다.

0

42

2

마스크 json url이 안보여서 공유합니다

0

66

1

DI 에 대해 문의 좀 드립니다.

0

114

2

Bad state 에러

0

188

1

여러 화면 di강의는 언제 나올 예정인가요?

0

187

1

Riverpod 프로바이더에 의존성 주입

0

955

1

remote data source impl

0

271

1

go router 의존성

0

282

1

객체가 아닌 일반 변수의 get it

0

282

1

네트워크 통신 에러 처리

0

331

1

데이터 추상화 문제

0

326

2

로그인(auth)관련 데이터 흐름

0

261

1

소스코드 공유

0

432

1