이전 정리 : 2024.06.04 - [FLUTTER] - [Flutter] Bloc 개념 이해하기 1
[Flutter] Bloc 개념 이해하기 1
블록을 배우기 이전에 stream 의 개념을 알아야 더 이해하기 쉽다. Streams스트림은 비동기 데이터의 시퀀스이다.파이프는 Stream 이고 그 안을 흐르는 물을 비동기 데이터라고 이해하면 쉽다.dart에
kimsw509.tistory.com
Using a Cubit
이제 여러가지를 응용해 볼 차례이다.
Basic Usage
main.dart
void main(){
final cubit = CounterCubit();
print(cubit.state); // 0
cubit.increment();
print(cubit.state); // 1
cubit.close();
}
위는 기본적으로 사용한 것이다.
Stream Usage
Future<void> main() async {
final cubit = counterCubit();
final subscription = cubit.stream.listen(print); // 1
cubit.increment();
await Future.delayed(Duration.zero);
await subscription.cancel();
await cubit.close();
}
위를 보면 CounterCubit을 구독 하고 있다가 상태 변화가 일어나면 print를 호출한다. 그 후 increment를 호출해서 상태 변화를 야기하고 cancel 해서 더이상 스트림을 구독하지 않는다.
Observing a Cubit
Cubit의 상태가 변하면 change가 호출된다. 이를 onChange를 통해 관찰할 수 있다.
counter_cubit.dart
class CounterCubit extends Cubit<int> {
CounterCubit() : super(0);
void increment() => emit(state +1)
@override
void onChange(Change<int> change) {
super.onChange(change);
print(change);
}
}
BlocObserver
블록옵져버를 이용하면 모든 상태 변화를 한곳에서 볼수 있다.
simple_bloc_observer.dart
class SimpleBlocObserver extends BlocObserver {
@override
void onChange(BlocBase bloc, Change change) {
super.onchange(bloc, change);
print('${bloc.runtimeType} $change');
}
}
Cubit Error Handing
모든 Cubit은 addError가 있어서 에러가 발생했을때를 알수 있다.
counter_cubit.dart
class CounterCubit extends Cubit<int> {
CounterCubit() : super(0);
void increment(){
addError(Exception('increment error!'), StackTrace.current);
emit(state +1);
}
@override
void onChange(Change<int> change) {
super.onChange(change);
print(change);
}
@override
void onError(Object error, StackTrace stackTrace) {
print('$error, $stackTrace');
super.onError(error, stackTrace);
}
}
onError는 BlocObserver에서 override하여 전역적인 에러를 잡아낼수 있다.
simple_bloc_observer.dart
class SimpleBlocObserver extends BlocObserver {
@override
void onChange(BlocBase bloc, Change change) {
super.onChange(bloc, change);
print('$bloc.runtimeType} $change');
}
@override
void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
print('${bloc.runtimeType} $error $stackTrace');
super.onError(bloc, error, stackTrace);
}
}
'FLUTTER' 카테고리의 다른 글
[FLUTTER][iOS] '..., but they required a higher minimum deployment target’ 오류 (0) | 2024.08.23 |
---|---|
[Bloc] 개념 이해하기 (0) | 2024.06.16 |
[Flutter] Bloc 개념 이해하기 1 (2) | 2024.06.04 |
.framework does not support the minimum OS Version specified in the (2) | 2024.04.27 |
[Flutter] Gradle issue (2) | 2023.11.24 |