본문 바로가기

Flutter/04 Widgets

[Flutter] Widgets - Completer

이번에는 Completer 에 대해서 알아보겠습니다.

Completer 는 future 객체를 방법입니다(나중에 값이나 에러를 반환 가능, callback 으로 사용가능). 

개발환경 : dart pad, flutter 3.0.3

 

 

 

소스코드는 아래와 같음.

 

import 'dart:async';
import 'dart:math';


void main() {

  // futureOne 함수는 동기방식으로 결과는 간단하다, 짝수면 성공 홀수면 실패 출력
  // 1. Lucky number is 0
  // 1. Success

  final Future futureOne = Future(() {
    Random rnd = Random();
    int luck = rnd.nextInt(10);

    print('1. Lucky number is $luck');

    if (luck % 2 == 0) {
      return '1. Success';
    } else {
      return '1. Failure';
    }
  });

  futureOne.then((value) {
    print(value);
  }).catchError((err) {
    print(err);
  });
  
  // futureTwo 함수는 비동기방식인데, Completer 를 사용하지 않아서 원하는 결과가 나오지 않음
  // null
  // 2. Lucky number is 7
  // 2. Failure

  final Future futureTwo = Future (() {
    Timer(const Duration(seconds: 1), () {
      Random rnd = Random();
      int luck = rnd.nextInt(10);

      print('2. Lucky number is $luck');

      if (luck % 2 == 0) {
        print("2. Success");
//         return "2. Success";
      } else {
        print("2. Failure");
//         return '2. Failure';
      }
    });
  });

  futureTwo.then((value) {
    print(value);
  }).catchError((err) {
    print(err);
  });  

  // futureThree 함수는 비동기방식고, Completer 를 사용하여 원하는 결과가 나옴
  // 3. Lucky number is 0
  // 3. Success
  
  Future futureThree(int sec) {
    Completer c = Completer();

    Timer(Duration(seconds: sec), () {
      Random rnd = Random();
      int luck = rnd.nextInt(10);

      print('3. Lucky number is $luck');

      if (luck % 2 == 0) {
        c.complete('3. Success');
      } else {
        c.completeError('3. Failure');
      }
    });

    return c.future;
  }

  futureThree(2).then((value) {
    print(value);
  }).catchError((err) {
    print(err);
  });  
  
}

 

 

 

 

 

[참고자료] 헤비프랜

- https://www.youtube.com/watch?v=DWmhEtZ0EVU&t=13s 

 

'Flutter > 04 Widgets' 카테고리의 다른 글

[Flutter] Widgets - Google map 2  (0) 2022.06.30
[Flutter] Widgets - Google map  (0) 2022.06.28
[Flutter] Widgets - FormBuilder 4  (0) 2022.06.27
[Flutter] Widgets - FormBuilder 3  (0) 2022.06.25
[Flutter] Widgets - FormBuilder 2  (0) 2022.06.24