블록을 배우기 이전에 stream 의 개념을 알아야 더 이해하기 쉽다.
Streams
스트림은 비동기 데이터의 시퀀스이다.
파이프는 Stream 이고 그 안을 흐르는 물을 비동기 데이터라고 이해하면 쉽다.
dart에서는 이를 쉽게 만들수 있다.
Stream<int> countStream(int max) async* {
for (int i = 0; i < max; i ++ ){
yield i;
}
}
aysnc* 를 사용함으로서 yield 키워드를 사용할 수 있고 stream 데이터를 반환한다. 위의 예는 integer stream을 반환한다.
위의 예를 비슷하게 사용하여 다른 값들을 반환할 수 있다.
Future<int> sumStream(Stream<int> stream) async {
int sum = 0;
await for (int value in stream){
sum += value;
}
return sum;
}
위의 함수를 보면 async 로 함수를 표시해서 await 키워드를 사용 할수 있고 Future 를 반환 가능해진다.
이렇게 대략 적으로 스트림을 봤으면 이제 Bloc 의 코어 패키지인 Cubit을 배울수 있다.
Cubit
Cubit은 BlocBase를 상속한 클래스이며 여러 타입의 상태(state)를 매니지 할수 있도록 상속 가능하다.
Cubit은 함수를 공개 하므로서 상태 변화 트리거를 걸 수 있다.
Creating a Cubit
counter_cubit.dart
class CounterCubit extends Cubit<int> {
CounterCubit() : super(0);
}
Cubit을 만들때는 어떤 타입의 상태를 컨트롤 할 것인지 정의해 줘야한다. 위의 CounterCubit의 경우 int 타입을 통해 상태를 다루게 되지만 복잡한 경우에는 원시타입이 아닌 클래스로 상태를 컨트롤해줘야한다.
그 다음으로 우리가 해줘야 할 것은 Cubit의 initial state를 정해주는 것이다. super 값에 값을 넣어줌으로서 해결이 가능하다.
counter_cubit.dart
class CounterCubit extends Cubit<int> {
CounterCubit(int initalState) : super(initialState);
}
Cubit State Changes
모든 Cubit은 emit 을 통해 상태를 바꿀수 있다.
counter_cubit.dart
class CounterCubit extends Cubit<int> {
CounterCubit() : super(0);
void increment() => emit(state + 1);
}
'FLUTTER' 카테고리의 다른 글
[Bloc] 개념 이해하기 (0) | 2024.06.16 |
---|---|
[Bloc] 개념 이해하기 2 (0) | 2024.06.05 |
.framework does not support the minimum OS Version specified in the (2) | 2024.04.27 |
[Flutter] Gradle issue (2) | 2023.11.24 |
[FLUTTER]Unable to process request - PLA Update available 해결 방법 (0) | 2023.11.01 |