통신X, 박혀있던 데이터 가져오는 코드
home_body
import 'package:flutter/material.dart';
import 'package:mockapp/home_repository.dart';
class HomeBody extends StatelessWidget {
@override
Widget build(BuildContext context) {
HomeRepository repo = const HomeRepository();
int one = repo.getOne();
List<int> list = repo.getList();
return Column(
children: [
Text("$one", style: TextStyle(fontSize: 50)),
Expanded(
child: ListView.builder(
itemCount: list.length,
itemBuilder: (context, index) {
return ListTile(leading: Text("${list[index]}"),title: Text("내용"));
}),
),
],
);
}
}
home_repository
// SRP : 데이터를 가져오는 곳
// (휴대폰 디바이스(파일), 휴대폰 DB, Firebase(외부서버), 내 서버, 공공데이터서버)
class HomeRepository {
const HomeRepository();
List<int> getList() {
return [1,2,3,4];
}
int getOne() {
return 1;
}
}
Flutter 비동기 통신하는 법
await / async 사용한다.
Future가 사용된다.
※ Future == Promise
// SRP : 데이터를 가져오는 곳 (휴대폰 디바이스(파일), 휴대폰 DB, Firebase(외부서버), 내 서버, 공공데이터서버)
class HomeRepository {
const HomeRepository();
// 반환 타입 Future<실제 받을 반환타입> <-형태 기억하기
Future<List<int>> getList() async {
// 비동기 / response는 promise데이터
List<int> response = await Future.delayed(Duration(seconds: 3), () {
// 3초 후 실행됨..
return [1,2,3,4];
},);
return response;
}
Future<int> getOne() async{
int response = await Future.delayed(Duration(seconds: 3), () {
// 3초 후 실행됨..
return 5;
},);
return response;
}
}
반환타입 형태와 전체 형태: Future<실제 반환 될 타입> 함수명() async{ }
future_body
import 'package:flutter/material.dart';
import 'package:mockapp/home_repository.dart';
class FutureBody extends StatelessWidget {
@override
Widget build(BuildContext context) {
HomeRepository repo = const HomeRepository();
return Column(
children: [
FutureBuilder(
future: repo.getOne(),
builder: (context, snapshot) {// 다운로드 끝났을 때 결과값 > 스냅샵으로간다.
if(snapshot.hasData){ // 스냅샵이 데이터를 가지고 있으면 그림 그려짐
return Center(child: Text("1", style: TextStyle(fontSize: 50)));
}else{
// 안가지고 있으면 다른 그림...
return CircularProgressIndicator();
}
},
),
Expanded(
child: ListView.builder(
itemCount: 4,
itemBuilder: (context, index) {
return ListTile(
leading: Text("${index + 1}"), title: Text("내용"));
}),
),
],
);
}
}
Share article