๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿฅ– Bread Basics/Flutter

Future, async, await, stream, listen, sink, yield

by BreadDev 2025. 4. 25.
728x90
void main() async {
  // Future - ๋ฏธ๋ž˜
  // ๋ฏธ๋ž˜์— ๋ฐ›์•„์˜ฌ ๊ฐ’?
  Future<String> name = Future.value('๋ธŒ๋ž˜๋“œ');
  Future<int> number = Future.value(1);
  Future<bool> isTrue = Future.value(true);

  final result1 = await addNumbers(1, 1);
  final result2 = await addNumbers(2, 2);

  print('result1: $result1');
  print('result2: $result2');
  print('result1 + result2 : ${result1 + result2}');
}

Future<int> addNumbers(int number1, int number2) async {
  print('๊ณ„์‚ฐ ์‹œ์ž‘: $number1 + $number2');

  await Future.delayed(Duration(seconds: 2), () {
    print('๊ณ„์‚ฐ์™„๋ฃŒ: $number1 + $number2 = ${number1 + number2}');
  });

  print('ํ•จ์ˆ˜ ์™„๋ฃŒ: $number1 + $number2');
  
  return number1 + number2;
}
----------------------------------------------
import 'dart:async';

void main() {
  final controller = StreamController();
  final stream = controller.stream.asBroadcastStream();

  final streamListener1 = stream.where((val) => val % 2 == 0).listen((val) {
    print('Listener1 : $val');
  });

  final streamListener2 = stream.where((val) => val % 2 == 1).listen((val) {
    print('Listener2 : $val');
  });

  controller.sink.add(1);
  controller.sink.add(2);
  controller.sink.add(3);
  controller.sink.add(4);
  controller.sink.add(5);
  controller.sink.add(6);
}
----------------------------------------------
import 'dart:async';

void main() {
  playAllStream().listen((val){
    print(val);
  });
}

Stream<int> playAllStream() async* {
  yield* calculate(1);
  yield* calculate(1000);
}

Stream<int> calculate(int number) async* {
  for (int i = 0; i < 5; i++) {
    yield i * number;
    
    await Future.delayed(Duration(seconds: 1));
  }
}
๊ณ„์‚ฐ ์‹œ์ž‘: 1 + 1
๊ณ„์‚ฐ์™„๋ฃŒ: 1 + 1 = 2
ํ•จ์ˆ˜ ์™„๋ฃŒ: 1 + 1
๊ณ„์‚ฐ ์‹œ์ž‘: 2 + 2
๊ณ„์‚ฐ์™„๋ฃŒ: 2 + 2 = 4
ํ•จ์ˆ˜ ์™„๋ฃŒ: 2 + 2
result1: 2
result2: 4
result1 + result2 : 6
----------------------------------------------
Listener2 : 1
Listener1 : 2
Listener2 : 3
Listener1 : 4
Listener2 : 5
Listener1 : 6
----------------------------------------------
0
1
2
3
4
0
1000
2000
3000
4000