Bomi is worldstar

[Flutter/개인] 02. 소스 공부 본문

■ App/Flutter

[Flutter/개인] 02. 소스 공부

월드스타 2021. 4. 1. 16:33

내 맘대로 공부 1 (다트 프로그램 예)

// 1. 매개변수로 int형 aNumber를 받는 printInteger라는 함수를 정의하고
// 2. 받은 매개변수를 'The number is' 텍스트 뒤에 포함하여 콘솔에 출력하라.
printInteger(int aNumber){
  print('The number is $aNumber.');
}

// 3. main함수를 정의하고
// 4. 그 안에 var형 number 변수에 42를 넣어 선언한 뒤
// 5. printInteger함수에 number 변수를 넣어 실행하라.
main() {
  var number = 42;
  printInteger(number);
}

▶ 결과 값

This number is 42.

내 맘대로 공부 2 (비동기 처리 예)

// 1. main함수를 정의한다.
// 1-1. checkVersion 함수를 불러온다.
// 1-2. 'end process'를 콘솔에 출력한다.
void main() {
  checkVersion();
  print('end process');
}

// 2. checkVersion 함수를 정의하는데 이 함수는 값을 1개 반환하는 비동기 함수이다.
// 2-1. var형 타입의 version변수를 선언한다.
// 2-2. version 변수에 lookUpVersion함수를 생성하는데 이 함수는 언제끝날지 모르는 작업이다.
// 2-3. version 변수를 콘솔에 출력한다.
Future checkVersion() async{
  var version;
  version = await lookUpVersion();
  print(version);
}

// 3. int형 타입을 반환하는 lookUpVersion 함수를 정의한다.
// 3-1. 12값을 return한다.
int lookUpVersion(){
  return 12;
}

▶ 결과 값

end process
12

내 맘대로 공부 3 (then() 함수 사용법)

// 1. main함수를 정의하는데 이 함수는 비동기이지만 return값은 없다.
// 1-1. getVerionName함수를 불러오는데 이 함수는 언제 끝날지 모르는 작업이며 then을 통해 value 라는 변수를 지정하여 return값을 받는다.
// 1-2. 그리고 위 함수 안에서 then으로 받은 value를 콘솔에 출력한다.
// 1-3. 'end process'를 콘솔에 출력한다.
void main() async {
  await getVersionName().then((value) => {
    print(value)
  });
  print('end process');
}

// 2. getVersionName 함수를 정의하는데 이 함수는 비동기 함수이며 return타입은 String이다.
// 2-1. var형 타입인 versionName변수를 선언한다.
// 2-2. versionName변수에 lookUpVersionName함수를 생성 이 함수는 언제 끝날지 모르는 작업이다.
// 2-3. versionName을 반환한다.
Future<String> getVersionName() async {
  var versionName;
  versionName = await lookUpVersionName();
  return versionName;
}

// 3. return 타입이 String인 lookUpVersionName함수를 정의한다.
// 3-1. 'Android Q'라는 텍스트를 반환한다.
String lookUpVersionName() {
  return 'Android Q';
}

▶ 결과 값

Android Q
end process

내 맘대로 공부 4 (await 키워드 활용 예)

// 1. main함수를 정의한다.
// 1-1. printOne() 함수를 호출한다.
// 1-2. printTwo() 함수를 호출한다.
// 1-3. printThree() 함수를 호출한다.
void main() {
  printOne();
  printTwo();
  printThree();
}

// 2. 리턴값이 없는 printOne 함수를 정의한다.
// 2-1. 'One'을 콘솔에 출력한다.
void printOne() {
  print('One');
}

// 3. 리턴값이 없는 printThree 함수를 정의한다.
// 3-1. 'Three'를 콘솔에 출력한다.
void printThree() {
  print('Three');
}

// 4. 리턴값이 없는 printTwo 함수를 정의하는데 이 함수는 비동기 함수이다.
// 4-1. Future.delayed 함수를 이용하여 1초 기다린 후 'Future!!'를 콘솔에 출력한다.
// 4-2. 'Two'를 콘솔에 출력한다.
void printTwo() async {
  Future.delayed(Duration(seconds: 1), () {
    print('Future!!');
  });
  print('Two');
}

▶ 결과 값

One
Two
Three
Future!! //콘솔을 보면 1초 후에 출력 됨

만약 위 코드의 4번 코드를 아래와 같이 await를 넣어 변경한 경우 결과값 확인하기

// 4. 리턴값이 없는 printTwo 함수를 정의하는데 이 함수는 비동기 함수이다.
// 4-1. Future.delayed 함수를 이용하여 1초 기다린 후 'Future!!'를 콘솔에 출력하는데, 이 함수는 언제 끝날지 모르는 작업이다.
// 4-2. 'Two'를 콘솔에 출력한다.
void printTwo() async {
  await Future.delayed(Duration(seconds: 1), () {
    print('Future method!!');
  });
  print('Two');
}

▶ 결과 값

One
Three
Future method!! //1초 후에 출력된다.
Two

내 맘대로 공부 5 (JSON 데이터 디코딩 예)

// 1. convert라이브러리를 임포트 한다.
import 'dart:convert';

// 2. main함수를 정의한다.
// 2-1. var형 타입의 jsonString 변수를 선언한다.
// 2-2. jsonString 변수에 '''[{"score": 40}, {"score": 80}]''''; 텍스트를 저장한다.
// 2-3. var형 타입의 scores 변수를 선언한다.
// 2-4. scores 변수에 jsonString값을 decode한 값을 저장한다.
// 2-5. scores 변수가 List 인지 여부 값을 콘솔에 출력한다. (결과 : true / false)
// 2-6. var형 타입의 firstScore 변수를 선언한다.
// 2-7. firstScore변수에 scores의 첫번째 값을 저장한다.
// 2-8. fisrtScore 변수가 Map 인지 여부 값을 콘솔에 출력한다. (결과 : true / false)
// 2-9. firstScore의 키 값이 'score'가 40인지 여부 값을 콘솔에 출력한다. (결과 : true / false)
void main() {
  var jsonString;
  jsonString = '''
    [
      {"score": 40},
      {"score": 80}
    ]
  ''';
  
  var scores;
  scores = jsonDecode(jsonString);
  print(scores is List);
  
  var firstScore;
  firstScore = scores[0];
  print(firstScore is Map);
  print(firstScore['score'] == 40);
}

▶ 결과 값

true
true
true

내 맘대로 공부 6 (JSON 데이터 인코딩 예)

// 1. convert라이브러리를 임포트 한다.
import 'dart:convert';

// 2. main함수를 정의한다.
// 2-1. var형 타입의 scores 변수를 선언한다.
// 2-2. scores 변수에 [{'score': 40}, {'score': 80}, {'score': 100, 'overtime': true, 'special_guest': null}] 배열을 저장한다.
// 2-3. var형 타입의 jsonText 변수를 선언한다.
// 2-4. jsonText 변수에 scores변수를 encode한 값을 저장한다.
// 2-5. jsonText의 값이 '[{"score":40},{"score":80},{"score":100,"overtime":true,"special_guest":null}]'과 같은지 여부를 콘솔에 출력한다. (결과 값 : true / false)
void main() {
  var scores;
  scores = [
    {'score': 40},
    {'score': 80},
    {'score': 100, 'overtime': true, 'special_guest': null}
  ];
  
  var jsonText;
  jsonText = jsonEncode(scores);
  print(jsonText == '[{"score":40},{"score":80},{"score":100,"overtime":true,"special_guest":null}]');
}

▶ 결과 값

true

내 맘대로 공부 7 (스트림 통신 에)

// 1. async라이브러리를 임포트한다.
import 'dart:async';

// 2. sumStream 함수를 정의하는데 이 함수는 비동기 함수이고 return값이 int이다.
// 2-1. sumStream 함수에 매개변수 Stream<int> stream 를 추가한다.
// 2-2. var형 타입의 sum 변수를 선언한 뒤 0을 저장한다.
// 2-3. for in 함수를 정의하는데 이 함수는 언제 끝날지 모르는 작업이다.
// 2-4. for in 함수에 object 부분을 stream 변수로 지정하고 각 변수 값은 var value라는 명칭으로 지정한다.
// 2-5. for in 함수 안에서 'sumStream : ' 뒤에 value 값을 포함하여 콘솔에 출력한다.
// 2-6. for in 함수 안에서 sum에 value 값을 누적하여 저장한다.
// 2-7. sum을 리턴한다.
Future<int> sumStream(Stream<int> stream) async {
  var sum = 0;
  await for (var value in stream){
    print('sumStream : $value');
    sum += value;
  }
  return sum;
}

// 3. countStream 함수를 정의하는데 이 함수는 비동기 함수이고 return값이 int형으로 여러 개라 지속적으로 리턴값을 반환한다.
// 3-1. countStream 함수에 매개변수 int to를 추가한다.
// 3-2. for 함수를 정의한다.
// 3-3. for 함수에 int i = 1; i <= to; i++ 조건을 추가한다.
// 3-4. for 함수 안에서 'countStream : ' 뒤에 i값을 포함하여 콘솔에출력한다.
// 3-5. for 함수 안에서 i값을 지속적으로 반환한다.
Stream<int> countStream(int to) async* {
  for (int i = 1; i <= to; i++){
    print('countStream : $i');
    yield i;
  }
}

// 4. main함수를 정의하는데 이 함수는 비동기 함수이다.
// 4-1. var형 타입 stream 변수를 선언한다.
// 4-2. stream 변수에 countStream(10) 함수를 저장한다.
// 4-3. var형 타입 sum 변수를 선언한다.
// 4-4. sum 함수에 sumStream(stream) 함수를 저장하는데 이 함수는 언제 끝날지 모르는 작업이다.
// 4-5. sum값을 콘솔에 출력한다.
void main() async {
  var stream;
  stream = countStream(10);
  
  var sum;
  sum = await sumStream(stream);
  print(sum);
}

▶ 결과 값

countStream : 1
sumStream : 1
countStream : 2
sumStream : 2
countStream : 3
sumStream : 3
countStream : 4
sumStream : 4
countStream : 5
sumStream : 5
countStream : 6
sumStream : 6
countStream : 7
sumStream : 7
countStream : 8
sumStream : 8
countStream : 9
sumStream : 9
countStream : 10
sumStream : 10
55

 

내 맘대로 공부 8 (then() 함수를 활용한 스트림 예)

// 1. main 함수를 정의한다.
// 1-1. var타입의 stream 변수를 선언한다.
// 1-2. stream 변수에 Stream.fromIterable([1, 2, 3, 4, 5]) 값을 저장한다.
// 1-3. stream변수의 가장 앞의 데이터를 then 함수를 이용하여 콘솔에 출력한다. (예상 결과 값 : 'first: value');
// 1-4. stream변수의 가장 마지막 데이터를 then 함수를 이용하여 콘솔에 출력한다. (예상 결과 값 : 'last: value');
// 1-5. stream변수가 비어있는지 확인하는 여부를 then 함수를 이용하여 콘솔에 출력한다. (예상 결과 값 : 'isEmpty: value');
// 1-6. stream변수의 전체 길이를 then 함수를 이용하여 콘솔에 출력한다. (예상 결과 값 : 'length: value');

void main() {

  var stream;

  stream = Stream.fromIterable([1, 2, 3, 4, 5]);

  

  stream.first.then((value)) => print('first: $value'));

  stream.last.then((value) => print('last: $value'));

  stream.isEmpty.then((value) => print('isEmpty: $value'));

  stream.length.then((value) => print('length: $value'));

}

Uncaught Error: Bad state: Stream has already been listened to.
first: 1

 

Comments