-
bloc 7.2버전부터 바뀐 이벤트 처리flutter 2021. 12. 10. 19:52
flutter_bloc 7.2부터
@override
Stream > transformEvents(events, transitionFn) {
return super.transformEvents(
events.distinct(),
transitionFn,
);함수의 지원이 되지 않습니다. 이전버전에서 Deprecated 표기가 되고,
**@Deprecated - Use on<Event> with an EventTransformer instead. Will be removed in v8.0.0**
라는 팝업이 뜹니다.
transformEvent 를 사용하지말고 핸들링할 이벤트를 on<Event> 와 EventTransformer를 함께 사용하라고 합니다.
최근에 flutter_bloc 8.0으로 업그레이드 했는데, mapEventToState 도 사라졌습니다.
기존 7.1 이하 bloc 에서는 mapEventToState 에 일단 이벤트가 던져졌는데 아예 사라지다보니, 기존 코드에서는
이벤트 자체를 받지 못합니다.
Bad state: add(이벤트) was called without a registered event handler.
I/flutter ( 8998): Make sure to register a handler via on<이벤트>((event, emit) {...})위와 같은 오류메세지가 뜨며, on<이벤트>로 핸들링하라고 나옵니다.
7.2이후부터는 다음과 같은 식으로 이벤트를 핸들링해야합니다.
블록생성자() {
on<이벤트>((event, emit) async { 비즈니스 로직.. emit(상태 인스턴스); }, /// Apply the custom `EventTransformer` to the `EventHandler`. transformer: 이벤트 핸들링 함수(), );
}
EventTransformer<이벤트> 이벤트 핸들링 함수<이벤트>() { return (events, mapper) => events.distinct().flatMap((mapper)); // return (events, mapper) => events.distinctUnique().flatMap((mapper)); }
EventTransformer
에서 return 에 events와 mapper를 함께 처리해줘야합니다.
그냥
events.distinct()
만 하면 컴파일 오류는 없지만 적용이 안됩니다.
상태 클래스도 yield 를 사용하던 것이 Emitter 객체를 이용해 상태를 방출해야합니다.
바뀐게 꽤 되는거같아 공부가 좀 필요해보입니다.
'flutter' 카테고리의 다른 글
FirebaseAuth.instance.authStateChanges (1) 2022.09.21 BehaviorSubject close 이슈 Bad state: Cannot add new events after calling close (0) 2022.05.13 [메모/스크랩] map 함수 (0) 2021.12.10 copyWith 함수 (0) 2021.12.07 Stream과 Future (0) 2021.12.01