inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

event와 ui_event

211

지루한 성게

작성한 질문수 8

0

안녕하세요. event와 ui_event를 구분하셔서 다르게 구현하셨는데, 제가 이해한 것이 맞는지와 문제가 된 부분에 대한 의견이 궁금해서 문의 남깁니다.

event와 ui_event를 구분하신게 state의 변경 유뮤가 맞을까요?

state가 변경되어 화면의 재빌드가 필요한 경우 event

state의 변경없이 화면의 재빌드가 필요한경우 ui_event

하나의 뷰(StatelessWidget)에서 event와 ui_event를 나눠서 처리하는 경우 event -> notification -> 화면 재빌드 중에 ui_event의 스트림 리스너가 재등록되는 이슈가 있는데요.

이런 경우 어떤식으로 처리를 하시나요?

아니면 제가 이해를 잘못한 부분이 있을까요?

flutter ios android

답변 1

0

오준석

사용자가 어떤 행동을 취했다면 Event, 내부에서 비즈니즈 로직이 발생하고 뭔가 View에 알려줘야 하는 UI 이벤트가 발생했다면 UI_Event 로 구분했습니다.

Event 가 반스시 UI 재빌드를 해야할 필요는 없습니다.

헤깔리시면 Action, Event 로 이름을 바꿔도 될 것 같습니다.

 

발생하는 문제의 원인은 ViewModel 이 싱글턴으로 생성되어 계속 재활용되고 있기 때문에 발생하는 것으로 생각됩니다.

일반 Stream 의 경우 하나의 리스너만 허용하기 때문에, 여러번 리슨하게 되면 에러가 발생할 겁니다.

방법으로는 1안. ViewModel을 싱글턴이 아닌 매번 재생성 되도록 수정하거나

2안. 임시방편으로 StreamController<HomeUiEvent>.broadcast() 로 생성하면 여러개의 리스너를 허용하기 때문에 정상 동작할 것입니다.

추천하는 방법은 1안 입니다.

본 과정에서는 소규모 앱에서 의존성에 대해 크게 신경쓰지 않고 개발을 하였습니다.

참고로 이를 해결하는 강의는 "중급 3편 : 의존성 주입 가이드"에서 소개하고 있습니다.

0

지루한 성게

답변 감사합니다.

그렇다면 action과 event를 구분하여 사용하는 궁극적인 이유는 무엇이라고 할 수 있을까요?

0

오준석

아키텍처 측면에서 Action 은 View --> ViewModel 방향으로 발생하고

Event는 View <-- ViewModel 반대 방향으로 흐르는 것을 분리해서 다루기 위함입니다

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

0

85

2

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

0

91

1

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

0

176

3

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

0

117

2

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

0

92

2

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

0

91

1

mockito사용시 오류 해결법

1

122

2

sealed class 사용 문의2

0

74

2

sealed class 사용 문의

0

116

2

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

0

263

2

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

0

235

2

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

1

315

3

강의 화면이 안보여요

0

133

3

Flutter에서 추천하는 Navigator, Router

0

322

2

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

0

324

3

코드 색깔 관련 질문

0

207

1

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

0

203

2

sealed class 적용 시...

0

325

1

클린 아키텍처 질문

0

307

1

sealed class 데이터 접근

0

323

1

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

0

230

1

뷰/뷰모델 작성 질문

0

269

1

freezed JsonKey 사용 예시 공유

1

789

1

아이폰에서 APP 실행 안되는 현상

0

641

1