main() 함수
로 시작dynamic 타입
을 이용 가능함.List<int>;
List<dynamic>;
int? test = 1; // Null 가능
List<int>? nullsList; // 리스트 자체가 Null 일 수 있음
List<int?> countNumList; // List의 요소에 Null이 들어갈 수 있음
var number = 42;
동적 타입 변수 지정 가능**${표현식}**
과 같은 형태로 사용하면 표현식에 변수를 직접 넣을 수 있음.함수 이름 뒤 본문이 시작하는 중괄호 { 앞에 **async**
키워드를 붙여 비동기로 만듦.
비동기 함수 안에서 언제 끝날지 모르는 작업 앞에 **await**
키워드를 붙임.
2번 작업을 마친 결과를 받기 위해 비동기 함수 이름 앞에 Future (값이 여러 개면 stream) 클래스를 지정함.
void main(){
checkVersion();
print('end proess');
}
// 결과를 여기서 바로 받음
Future checkVersion() async{ // 비동기
var version = await lookUpVersion(); //언제 끝날지 모르는 작업
print(version)
}
int lookUpVersion(){
return 12;
}
**then()**
함수를 사용해야 함.void main() async{
await getVersionName().then((value) => {
print(value)
});
print('end process');
}
Future<String> getVersionName() async {
var versionName = await lookUpVersionName();
return versionName;
}
String lookUpVersionName(){
return 'Android Q';
}
async 함수가 데이터를 성공적으로 반환하면 호출하는 쪽에서 then() 함수를 이용해 처리할 수 있음. then() 이외에 error()함수도 사용 가능함. error() 함수는 실행 과정에서 오류가 발생했을 때 호출되므로 이를 이용해 예외를 처리할 수 있음.import 'dart:convert';
//jsonString은 json 데이터를 문자열로 직렬화 한 것
//디코딩
var data = jsonDecode(jsonString)
//인코딩
var jsonText = jsonEncode(data)
Stream
자료구조를 사용함. 스트림은 처음에 넣은 데이터가 꺼낼 때도 가장 먼저 나오는 데이터 구조임. → 스트림을 사용하면 데이터를 차례대로 주고 받는 코드를 작성할 수 있음**then**
함수를 사용해서 스트림 코드를 작성할 수도 있음. 단, 스트림을 통해 데이터를 사용하면 데이터는 사라지기 때문에 한 번만 실행하도록 코드를 짜야 함.