앱에서 서버의 데이터를 가져와보자.
dependencies:
flutter:
sdk: flutter
http: ^0.13.4
//최상단 부분에
import 'package:http/http.dart' as http;
import 'dart:convert';
<uses-permission android:name="android.permission.INTERNET" />
해당 위치에 코드를 추가 해주자
getData() async { // await를 사용하기 위해 함수 생성.
var result = await http.get( Uri.parse('https://codingapple1.github.io/app/data.json') );
print( jsonDecode(result.body) ) //가져온 값이 JSON형식이라 풀어주기위해jsonDecode() 함수 사용
}
var data = [];
getData() async {
var result = await http.get(Uri.parse('https://codingapple1.github.io/app/data.json'));
var result2 = jsonDecode(result.body);
setState(() {
data = result2;
});
}
//페이지 실행되면 getData 함수 바로 실행
void initState() {
super.initState();
getData();
}
print(data[0]);
//결과
{id: 0, image: https://codingapple1.github.io/app/img0.jpg, likes: 5, date: July 25, content: 등을 대라 등대, liked: false, user: John Kim}
Text(data[0]['user'])
//결과
//John Kim
지금 코드를 실행하면 페이지 로드시 잠깐 붉은 화면이 뜬다.
이유는 서버에 데이터를 아직 안가져왔는데 바로 호출(Text(data[0]['user']))하여 그렇다.
if(data.isNotEmpty) { // 불러오면 실행
Text(data[0]['user']
} else { // 아직 안불러왔다면 실행
return
Text('로딩중~);
//CircularProgressIndicator(); 로딩바
}
위 코드를 사용하면 초기 실행시 "로딩중~" 이라는 문자가 뜨고 데이터가 불러와지면
서버에서 불러온 값들이 출력됨.
CircularProgressIndicator(); 를 대신 써주면
흔히 인터넷 사용할 때 보이던 로딩bar를 CircularProgressIndicator();로
간단히 구현할 수 있다. (이게 있으면 있어보임)