Events Topic

이벤트 Events (lib/events)

파머스핸즈 앱은 이벤트버스를 사용하여 팝업과 개체검색 화면을 띄우고 닫습니다. 또한 리포트 카드 핀 고정과 같은 처리도 이벤트로 처리합니다.

사용 예시

이벤트를 fire하려면 다음과 같은 코드를 사용합니다.

EventService().eventBus.fire(PopupEvent(type: PopupType.removeGroup, action: PopupAction.show, data: group));

fire된 이벤트는 어디선가 수신하여 처리를 해야하는데 팝업과 개체검색 화면과같은 경우에는 모든 화면에서 fire되는 이벤트이고 공통적으로 처리가 될 필요가 있으므로 Splash화면의 EventHandler에서 수신하여 해당하는 이벤트에 맞는 처리를 하게됩니다.

리포트카드 핀 고정 이벤트같은 경우에는 특정 화면에서만 사용하는 이벤트이므로 ReportScreen 뷰모델에서 수신하여 처리하고 있습니다.

사용 목적에 맞게 구현하시면 됩니다.

이벤트를 생성하는 방법

이벤트를 생성하는 방법에 대해서 알아보겠습니다.

  1. events 디렉토리에 이벤트 클래스를 생성합니다. 이벤트에 전달할 파라메터들을 클래스 변수에 선언합니다.
class PopupEvent {
  PopupType type;
  PopupAction action;
  Function? onTapCancel;
  Function? onTapNormal;
  Function? onTapNo;
  Function? onTapYes;
  Function? onTapOutside;
  Function? onClose;
  dynamic data;

  PopupEvent({
    required this.type,
    required this.action,
    this.onTapCancel,
    this.onTapNormal,
    this.onTapNo,
    this.onTapYes,
    this.onTapOutside,
    this.onClose,
    this.data,
  });
}
  1. 이벤트 리스너를 생성해야 합니다.
/// 이벤트 리스너는 Subscription을 사용하여 구현합니다.
StreamSubscription? popupEventSub;

...

/// 이벤트를 리스너를 선언합니다.
popupEventSub = EventService().eventBus.on<PopupEvent>().listen((PopupEvent event) async {
    /// "event" 객체를 통해 필요한 파라메터에 접근하여 값을 가져옵니다.
    print(event.type);
});
  1. Subscription은 화면이 사라진 후에도 계속 살아있기 때문에 dispose() 라이프사이클에서 꼭 해주를 시켜주어야 합니다.
@override
void dispose() {
    super.dispose();
    popupEventSub?.cancel();
}

Classes

OnTapTogglePinEvent Events
리포트 카드 핀 버튼 토글 이벤트
PopupEvent Events
팝업 이벤트
SearchCowEvent Events
개체검색 이벤트