계산기 Bloc 예제로 +-/* 를 처리 한다. 처음 switch 로 해결 하려 했지만,
안된다 . 이유는 Dart 언어의 타입 시스템 때문에 이런 현상이 발생
Dart는 if 문에서 타입 추론을 수행하여 event가 특정 하위 타입(AddEvent, SubtractEvent 등)인지 확인. 각 분기에서 num1과 num2에 접근할 수 있음
But,
switch 문에서는 Dart가 이러한 타입 추론을 수행하지 않음.
event.runtimeType을 확인하더라도
Dart는 event를 CalculatorEvent 타입으로 간주
따라서 num1과 num2에 접근하려고 하면 오류가 발생
이 문제를 해결하려면 각 case 분기에서 수동으로
타입 캐스팅을 수행해야 함
CalculatorBloc() : super(CalculatorInitial()) {
on<CalculatorEvent>((event, emit) {
// TODO: implement event handler
if (event is AddEvent) {
num result = calculatorRepo.add(num1: event.num1, num2: event.num2);
emit(CalculatorResult(result: result));
} else if (event is SubtractEvent) {
num result =
calculatorRepo.subtract(num1: event.num1, num2: event.num2);
emit(CalculatorResult(result: result));
} else if (event is MultiplyEvent) {
num result =
calculatorRepo.multiply(num1: event.num1, num2: event.num2);
emit(CalculatorResult(result: result));
} else if (event is DivideEvent) {
num result = calculatorRepo.divide(num1: event.num1, num2: event.num2);
emit(CalculatorResult(result: result));
}
switch (event.runtimeType) {
case AddEvent:
num result = calculatorRepo.add(num1: event.num1, num2: event.num2);
emit(CalculatorResult(result: result));
break;
case SubtractEvent:
num result = calculatorRepo.subtract(num1: event.num1, num2: event.num2);
emit(CalculatorResult(result: result));
break;
case MultiplyEvent:
num result = calculatorRepo.multiply(num1: event.num1, num2: event.num2);
emit(CalculatorResult(result: result));
break;
case DivideEvent:
num result = calculatorRepo.divide(num1: event.num1, num2: event.num2);
emit(CalculatorResult(result: result));
break;
default:
// Handle other events or throw an error
break;
위 예제의 switch 는 에러가 난다 . 아래처럼 수정 해야 사용 할 수 있다 .
final addEvent = event as AddEvent;
num result = calculatorRepo.add(num1: addEvent.num1, num2: addEvent.num2);
emit(CalculatorResult(result: result));
break;
'Flutter' 카테고리의 다른 글
RiverPod basic 1 add & sub 더하기 빼기 (0) | 2024.02.01 |
---|---|
flutter State Management 상태관리 어떤걸 쓰지? getx provoder bloc.... (0) | 2024.02.01 |
Ai Chat , 패키지 없이 List로만 GPT or Bard , Gemini . 만들기// Flutter 2024. (0) | 2024.01.19 |
Flutter Google Bard Gemini chat채팅 봇 만들기. (1) | 2023.12.30 |
API Key Hiding with DotEnv. Api 키 보안 관리하기. 키를 환경설정 파일로 숨기는 방법 (1) | 2023.12.17 |