본문 바로가기
new

Flutter Stream에서 onData, onDone, onError

by ftbd 2024. 3. 18.

Flutter에서 Stream은 데이터 스트림을 처리하는 데 유용한 기능입니다. Stream은 비동기 방식으로 데이터를 전달하며, 데이터가 도착할 때마다 콜백 함수를 호출하여 처리합니다.

 

1. onData:

onData 콜백 함수는 Stream에서 새로운 데이터가 도착할 때마다 호출됩니다. 콜백 함수는 데이터를 매개변수로 받아 처리합니다.

 

Stream<int> counterStream() async* {
  for (int i = 1; i <= 5; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i;
  }
}

void main() {
  final stream = counterStream();

  stream.listen((data) {
    print('onData: $data');
  });
}

 

이 코드는 1초 간격으로 1부터 5까지 숫자를 출력하는 Stream을 생성하고, onData 콜백 함수를 사용하여 출력합니다.

 

2. onDone:

onDone 콜백 함수는 Stream이 종료될 때 호출됩니다. Stream이 종료되는 경우는 다음과 같습니다.

  • 모든 데이터가 전송된 경우
  • Stream이 에러를 발생시킨 경우
  • cancel() 메서드를 사용하여 Stream을 강제로 종료한 경우
void main() {
  final stream = Stream.fromIterable([1, 2, 3]);

  stream.listen((data) {
    print('onData: $data');
  }, onDone: () {
    print('onDone');
  });
}

이 코드는 Stream.fromIterable 메서드를 사용하여 3개의 숫자를 포함하는 Stream을 생성하고, onDone 콜백 함수를 사용하여 Stream이 종료될 때 "onDone" 메시지를 출력합니다.

 

3. onError:

onError 콜백 함수는 Stream이 에러를 발생시킬 때 호출됩니다. 콜백 함수는 에러 객체를 매개변수로 받아 처리합니다.

void main() {
  final stream = Stream.error('Error!');

  stream.listen((data) {
    print('onData: $data');
  }, onError: (error) {
    print('onError: $error');
  });
}

이 코드는 "Error!"라는 에러를 발생시키는 Stream을 생성하고, onError 콜백 함수를 사용하여 에러 메시지를 출력합니다.