ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.