일단 dart 공부하는 챕터까지는
dartpad.dev/? 를 써보려고 한다.
import 'dart:convert';
void main() {
var jsonString = '''
[
{"score":40},
{"score":80},
]
''';
var scores = jsonDecode(jsonString);
print(scores is List);
var firstScore = scores[0];
print(firstScore is Map);
print(firstScore['score'] == 40);
}
이렇게 써봤는데... 난 다 똑같이 썼다고 생각했는데 뭐가 틀렸는지 아래와 같은 에러가 떴다.
그치그치, 장고에서 JSON 쓸 때 대괄호 썼던 것 같아 싶어서 이렇게 바꿔봤는데
var jsonString = '''
{
{"score":40},
{"score":80},
}
상관 없었다.
후후 발견했다. 아래처럼 쓰면 된다.
var jsonString = '''
[
{"score":40},
{"score":80}
]
{"score":80} 뒤의 쉼표가 문제였음...
아래 코드가 원래 true가 나와야한다는데, 나는 false가 나왔다.
import 'dart:convert';
void main() {
var jsonString = [
{"score":40},
{"score":80},
{"score": 100, "overtime": true, "special_guest": null}
];
var jsonText = jsonEncode(jsonString);
print(jsonText ==
'[{"score":40}, {"score":80},'
'{"score": 100, "overtime": true,'
'"special_guest": null}]');
}
항상 json 형식에서는 속성 이름을 작은 따옴표 안에, string 형식에서는 속성 이름을 큰 따옴표 안에 넣으시길래 따라해봤는데 그게 문제도 아니었다.
콜론과 세미콜론 전후 띄어쓰기를 몽땅 없애니 해결!
async 배우는 챕터에서 배운 거에 stream을 씌운 느낌이라
1. Stream<int> 반환형을 가진 함수
2. Stream<int>을 입력 받고 Future<int>를 반환하는 함수
3. Future<int>을 반환하는 함수의 결과를 await으로 받는 main 함수
이렇게 있었는데 처음 보는게 있었다.
Stream<int> countStream(int to) async* {
for (int i = 1; i <= to; i++) {
print("countStream: $i");
yield i;
}
}
async에 *가 붙는 것!
책에 의하면 비동기적으로 yield를 통해 지속적으로 데이터를 전달할 경우 쓰이는 명령어라고 한다.
또 하나는 await이 함수 호출문이 아니라 for문 앞에 붙는 형식
await for (var value in stream) {
print('sumStream : $value');
sum += value;
}
stream이 비동기적으로 데이터를 전송해주고 있기 때문에 붙는 것 같다.
main() {
var stream = Stream.fromIterable([1,2,3,4,5]);
stream.first.then((value) => print('first: $value'));
}
이것 외에도 last, isEmpty, length 함수 뒤에 then 함수를 붙여쓸 수 있다.