Events Topic
이벤트 Events (lib/events)
파머스핸즈 앱은 이벤트버스를 사용하여 팝업과 개체검색 화면을 띄우고 닫습니다. 또한 리포트 카드 핀 고정과 같은 처리도 이벤트로 처리합니다.
사용 예시
이벤트를 fire하려면 다음과 같은 코드를 사용합니다.
EventService().eventBus.fire(PopupEvent(type: PopupType.removeGroup, action: PopupAction.show, data: group));
fire된 이벤트는 어디선가 수신하여 처리를 해야하는데 팝업과 개체검색 화면과같은 경우에는 모든 화면에서 fire되는 이벤트이고 공통적으로 처리가 될 필요가 있으므로 Splash화면의 EventHandler에서 수신하여 해당하는 이벤트에 맞는 처리를 하게됩니다.
리포트카드 핀 고정 이벤트같은 경우에는 특정 화면에서만 사용하는 이벤트이므로 ReportScreen 뷰모델에서 수신하여 처리하고 있습니다.
사용 목적에 맞게 구현하시면 됩니다.
이벤트를 생성하는 방법
이벤트를 생성하는 방법에 대해서 알아보겠습니다.
- 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,
});
}
- 이벤트 리스너를 생성해야 합니다.
/// 이벤트 리스너는 Subscription을 사용하여 구현합니다.
StreamSubscription? popupEventSub;
...
/// 이벤트를 리스너를 선언합니다.
popupEventSub = EventService().eventBus.on<PopupEvent>().listen((PopupEvent event) async {
/// "event" 객체를 통해 필요한 파라메터에 접근하여 값을 가져옵니다.
print(event.type);
});
- Subscription은 화면이 사라진 후에도 계속 살아있기 때문에 dispose() 라이프사이클에서 꼭 해주를 시켜주어야 합니다.
@override
void dispose() {
super.dispose();
popupEventSub?.cancel();
}
Classes
- OnTapTogglePinEvent Events
- 리포트 카드 핀 버튼 토글 이벤트
- PopupEvent Events
- 팝업 이벤트
- SearchCowEvent Events
- 개체검색 이벤트