본문 바로가기

개발일기/Dart

Dart #6 Async

728x90
반응형

## Future

void main() async {

  //Future
  //미래에 받아올 값
  Future<String> name = Future.value('hello');
  Future<int> number = Future.value(1);
  Future<bool> isTrue = Future.value(true);
  
  
  final result1 = await addNumbers(1,1);
  final result2 = await addNumbers(2,2);
}

Future<int> addNumbers(int number1 , int number2) async {
  
  print('계산 시작 : $number1 + $number2');
  
  await Future.delayed(Duration(seconds: 2),(){
    print('완료 : $number1 + $number2 = ${number1+number2}');
  });
  
  print('함수 완료');
  
  return number1+number2;
}

# Future.delayed() -> 첫번째 파라미터는 지연시간을 정하고 두번째 파라미터에서는 지연시간 이후 실행할 함수를 지정한다.

# await -> 값을 기다렸다가 받는다는 의미

 

## stream

import 'dart:async';

void main(){
  final controller = StreamController();
  final stream = controller.stream;
  
  final streamListerner1 = stream.listen((val){
    print('Listener 1 : $val');
  });
  
  controller.sink.add(1);
}

 

# stream을 사용하기 위해서는 async 패키지가 필요하다 위 예제에서는 DartPad web을 이용 하였다.

# stream.listen에 매개변수가 입력되었을때 해당 함수가 실행된다.

 

## 다중 stream 및 조건 추가

import 'dart:async';

void main(){
  final controller = StreamController();
  final stream = controller.stream.asBroadcastStream();
  
  final streamListerner1 = stream.where((val) => val % 2 == 0).listen((val){
    print('Listener 1 : $val');
  });
  
  final streamListerner2 = stream.where((val) => val % 2 != 0).listen((val){
    print('Listener 2 : $val');
  });
  
  controller.sink.add(1);
  controller.sink.add(2);
  controller.sink.add(3);
  controller.sink.add(4);
}

# 다중 stream을 사용하기 위해서는 final stream = controller.stream.asBroadcastStream(); -> asBroadcastStream() 을 추가 해주면 된다.

# 각 stream의 where함수를 사용하여 조건을 추가할 수 있다.

 

## stream 함수화

import 'dart:async';

void main(){
  calculate(2).listen((val){
    print('calculate(2) == $val');
  });
  
  calculate(4).listen((val){
    print('calculate(4) == $val');
  });
}

Stream<int> calculate(int number) async*{
  for(int i=0; i < 5; i++){
    yield i*number;
    
    await Future.delayed(Duration(seconds: 1));
  }
}
728x90
반응형

'개발일기 > Dart' 카테고리의 다른 글

Dart #5 Functional Programming  (1) 2024.02.08
Dart #4 OOP  (0) 2024.02.02
Dart #3 typedef  (0) 2024.02.02
Dart #2 DATA TYPES  (0) 2023.11.29
Dart #1 VARIABLES  (0) 2023.11.29