inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 중급 1편 - 클린 아키텍처

중복된 페이지에서 같은 ViewModel이 여러 개 필요할 때

해결된 질문

487

2scent

작성한 질문수 13

0

강의에서 ViewModel은 provider_setup.dart 파일을 별도로 만들어서 의존성 주입을 해줬는데요. 중복된 페이지에서 페이지별로 ViewModel이 필요할 때는 어떤 방법이 좋을까요?

예를 들어, FeedPage가 있는데 이 FeedPage에는 새로운 FeedPage를 여는 버튼이 있을 수 있습니다. 이 버튼을 누르면 새로운 FeedPage가 열리는데 1번 FeedPage에서 2번 FeedPage를 여는 식이죠. 추가적으로 3번, 4번 등 계속해서 새로운 FeedPage를 열 수 있고요.

이때, FeedPage의 상태를 FeedViewModel에서 관리해야 하는데 중첩된 FeedPage가 4개면, 총 4개의 FeedViewModel이 필요한데 강의처럼 최상위에서 하나의 ViewModel만 생성하면 이게 어렵더라고요.

class FeedPage extends StatelessWidget {
const FeedPage({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
final viewModel = FeedViewModel();

return ChangeNotifierProvider<FeedViewModel>.value(
value: viewModel,
child: Scaffold(...),
);
}
}

제가 생각한 방법은 최상위에서 하나의 ViewModel만 생성하는 게 아니라 FeedPage의 build() 안에서 각자 ViewModel을 생성하고, 페이지 전체를 Provider로 감싸서 하위 위젯에 의존성을 주입하는 건데 괜찮은 방법일까요, 아니면 혹시 더 나은 방법이 있을까요?

android ios Flutter

답변 1

1

오준석

네. 괜찮은 방법입니다. 그렇게 하시거나 FeedPage를 띄울 때마다 ChangeNotifierProvider(create: ) 로 감싸는 것도 가능합니다. 둘 중에 편한 것으로 하시면 될 것 같습니다.

저는 후자를 선호하는데요.

이런식으로 매번 ViewModel을 새로 생성해야 할 때는 Provider 코드가 길어서 Get이나 다른 패키지를 사용하여 의존성 관련 코드를 줄이는 것도 고민할 부분인 것 같습니다.

MVVM, 클린 아키텍처 관련 질문 있습니다.

0

109

2

가끔씩 ui가 깨지는? 현상이 있어서 질문드립니다.

0

104

1

freezed 3.0 대응된 코드 깃헙에도 업데이트 해주실 수 있으신가요?

0

194

3

sealed class 사용시 기능은 동작하지만 Radio위젯에 선택 표시가 안되는 부분 질문

0

130

2

sealed class 사용시 The getter 'orderType' isn't defined for the type 'NoteOrder<dynamic>' 오류

0

102

2

유즈케이스 관련하여 질문 드립니다.

0

99

1

mockito사용시 오류 해결법

1

127

2

sealed class 사용 문의2

0

86

2

sealed class 사용 문의

0

123

2

freezed3.0에서 build시 when생성되지 않습니다.

0

275

2

Try implementing the missing methods, or make the class abstract. 문제해결 공유

0

245

2

This is likely caused by a misconfigured builder definition. 오류 해결 방법

1

328

3

강의 화면이 안보여요

0

141

3

Flutter에서 추천하는 Navigator, Router

0

332

2

The following ProgressEvent object was thrown resolving an image codec: [object ProgressEvent]

0

329

3

event와 ui_event

0

215

1

코드 색깔 관련 질문

0

212

1

Photo.fleezed.dart,photo.g.dart삭제시 에러

0

212

2

sealed class 적용 시...

0

332

1

클린 아키텍처 질문

0

315

1

sealed class 데이터 접근

0

328

1

서버에서 데이터를 가져와서 사용하는 경우...

0

237

1

뷰/뷰모델 작성 질문

0

275

1

freezed JsonKey 사용 예시 공유

1

795

1