μ΄λ€ νλ«νΌ, νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ¬μ©νλ κ°λ°μμκ² λΉλκΈ° νλ‘κ·Έλλ°μ΄λ κ΅μ₯ν μ€μν μμμ
λλ€.
μλλ‘μ΄λ κ°λ°μμΈ μ μκ² μμ΄μλ μ½νλ¦°μ μ½λ£¨ν΄μ΄ κ΅μ₯ν μ€μν μμμκ³ , μ΄λ² νλ¬ν°μμμ λΉλκΈ° νλ‘κ·Έλλ°μ Future ν΄λμ€λ₯Ό μ΄μ©ν©λλ€.
μ΄ κΈμμ λΉλκΈ° νλ‘κ·Έλλ°μ μ€λͺ
νμ§λ μμ ν
μ§λ§ μ΄μ§ μ§§κ²λλ§ λΉλκΈ° νλ‘κ·Έλλ°μ λν λ΄μ©μ λ΄μ보μλ©΄... λ³΄ν΅ λΉλκΈ° νλ‘κ·Έλλ°μ ꡬννλ λͺ©μ μ APIλ₯Ό ν΅ν΄μ λ°μμ€κ² λλ λ³ννλ μ΄λ ν κ°λ€μ ν΅ν΄μ νλ©΄μ ꡬμ±ν΄ μ£Όκ±°λ μνκ° λ³νλκ±°λ νλ λ±μ μ²λ¦¬λ₯Ό μ°μμ μΌλ‘ ν΄μΌ ν λ ꡬνμ ν©λλ€.
μλνλ©΄ μ΄λ ν κ°μ μν΄ μ’
μμ μΌλ‘ λ°μ΄ν°λ€μ μ²λ¦¬ν΄μΌ ν ν
λ° κ·Έ λͺ¨λ κ²°κ³Όκ° μ λ¬λλ κ·Έ μκ° λμ μ 체μ μ½λκ° κΈ°λ€λ €μ€ νμλ μκΈ° λλ¬Έμ
λλ€. μ΄λ° λΆλΆλ€μ λΉλκΈ°μ μΌλ‘ ꡬννμ¬ μ 체μ½λκ° νλμ νΈμΆλ‘ μΈν΄ λ©μΆλ κ²μ μ§μνλ κ²μ΄ λΉλκΈ° νλ‘κ·Έλλ°μ λͺ©μ μ΄λΌκ³ ν μ μκ² μ΅λλ€.
λΉλκΈ° νλ‘κ·Έλλ°μ μ΄λ €μ΄ κ°λ μ μλλλ€. κ²°κ³Όλ₯Ό κΈ°λ€λ¦¬κΈ°λ³΄λ¨ κ·Έ μμ μ κ·Έ μμ λλ‘ μ²λ¦¬λκ³ κ²°κ³Όλ₯Ό λμΆνλλ‘ λκ³ λ€λ₯Έ μ½λλ€μ΄ μ μμ μΌλ‘ μ²λ¦¬λ μ μλλ‘ ν΄μ£Όλ κ²μ΄ λΉλκΈ° νλ‘κ·Έλλ°μ λλ€.
κ·ΈλΌ Flutterμ Futureλ 무μμΈμ§ μ΄ν΄λ³ΌκΉμ.
μμΈν κΈμ Dartμ λ¬Έμλ₯Ό μ°Έμ‘°νλ κ²μ΄ κ°μ₯ μ’μ λ°©λ²μΌ κ² κ°μ΅λλ€. μ΄ λ¬Έμμλ Futureμ κ°λ
κ³Ό ꡬ쑰 κ·Έλ¦¬κ³ κ΅¬ν λ°©λ²μ λν λ€μν μμλ₯Ό λ€μ΄μ μ€λͺ
ν΄μ£Όκ³ μλλ°μ. μ΄κΈμμλ async ~await ν€μλλ₯Ό μ΄μ©ν Future μ¬μ©λ²μ κ΄ν΄μλ§ μμ±ν μμ μ΄λΌ λ€λ₯Έ ꡬν λ°©λ²μ μ°Έμ‘°νμ λ€λ©΄ 곡μλ¬Έμλ₯Ό μ°Έμ‘°νμ¬ κ΅¬ννμκΈ° λ°λλλ€.
Futureλ₯Ό μ΄μ©νμ¬ λΉλκΈ° νλ‘κ·Έλλ°μ μν ν¨μλ₯Ό ꡬννκ³ κ΄λ ¨ ν΄λμ€μ μ°Έμ‘° λ΄μ©μ μΊ‘μ²ν΄ 보μμ΅λλ€.
κ·Έ λ΄μ©μ μμ½νλ©΄ Futureμ λΉλκΈ° μ°μ°μ κ²°κ³Όλ₯Ό λ§ν©λλ€.
κ°μ λ°ν λ° μ λ¬ν¨μΌλ‘μ¨ μ»μ κ²°κ³Όμ λν΄μ λΉλκΈ°μ μ°μ°μ κ·Έ κ²°κ³Όλ₯Ό λ°λ‘ μ 곡ν μ μκΈ°μ λΉλκΈ°μ μ°μ°μ νλ‘κ·Έλ¨ μΈλΆμ κ²°κ³Ό(νμΌμ μ½κΈ°, DB쿼리, μΉ νμ΄μ§μ λ‘λ©)λ₯Ό κΈ°λ€λ €μΌ ν©λλ€. Futureμ κ²°κ³Όκ° λμ¬ λκΉμ§μ λͺ¨λ μ°μ°μ μ°¨λ¨νλ λμ μ λΉλκΈ°μ μ°μ°μ λν κ²°κ³Όμ ν¨κ» μ΅μ’ μ μΈ κ²°κ³Όλ₯Ό μ¦μ λ°ννλλ‘ νλ€.λΌλ λ΄μ©μ λλ€.
abstract class Future<T> { }
κ·Έλμ Futureλ₯Ό μ μΈν λμλ returnμ λν <Type>μ μ§μ ν΄μ£Όμ΄μΌ ν©λλ€. κ·ΈλμΌ κ²°κ³Όμ λν λ°νκ°μ 미리 μ μνκ³ κ·Έ λͺ¨λΈμ λ§λ λ°μ΄ν°μ λν μ²λ¦¬λ₯Ό μ§νν μ μκ² μ£ . κ°λ μ κ°λ¨ν©λλ€.
asyncμ await ν€μλλ₯Ό μ¬μ©νλ©΄ μλμ κ°μ΄ ꡬμ±μ ν΄λ³Ό μκ° μμ΅λλ€. μ΄λ ν΄λΉ ν€μλλ€μ Dartμμ μ¬μ©νκΈ° μν΄ 2κ°μ§μ μμΉμ΄ μ‘΄μ¬ν©λλ€.
- await ν€μλλ₯Ό ν¨μμμ μ¬μ©νλ €λ©΄ ν¨μλ async ν¨μμ¬μΌλ§ νλ€.
- async ν¨μλ Futureλ₯Ό λ°νν΄μΌ νλ€.
static Future<List<WebtoonModel>> getTodaysToons() async {
List<WebtoonModel> webtoonInstances = [];
final url = Uri.parse('$baseUrl/$today');
final response = await http.get(url);
if (response.statusCode == 200) {
final List<dynamic> webtoons = jsonDecode(response.body);
for (var webtoon in webtoons) {
webtoonInstances.add(WebtoonModel.fromJson(webtoon));
}
return webtoonInstances;
}
throw Error();
}
getTodaysToons() ν¨μλ₯Ό μ μνμ¬ λ°ν κ°μΌλ‘ Future<List<WebtoonModel>> μ μ μΈνμμ΅λλ€.
νμ§λ§ ν¨μμ λ΄λΆ returnκ°μ μ΄ν΄λ³΄λ©΄ List<WebtoonModel> μ΄μ£ . νΉμ throwμ 걸리λ Errorκ° μ΄ ν¨μμ λ°νκ°μ΄ λ©λλ€.
asyncμ awaitν€μλλ μ΅μν ν€μλμ΄κΈ°μ ν¬κ² μ€λͺ
μ νμ§λ μκ² μ§λ§,
awaitν€μλλ₯Ό λ§λλ©΄ ν΄λΉ μ½λλ μ§νμν©μ λ©μΆ₯λλ€. λν κ·Έ μμ μ ν¨μλ₯Ό νΈμΆν κ³³μ ν΄λΉ ν¨μμ returnμΈ Futureμ μ λ¬ν©λλ€.
awaitμ λν μ½λκ° μλ£λ λκΉμ§ ν΄λΉ ν¨μλ μ μ§μνλ‘ λκΈ°ν©λλ€. awaitμ λκΈ°κ° μ’
λ£λκ³ μ½λ μ§ν μμμ λ°λΌ returnκ°μ Futureλ₯Ό λ°ννλλ‘ νλ©° List<WebtoonModel>μ΄ Futureλ₯Ό ν΅ν΄ λ°νλ©λλ€. (μ΄λ ν¨μμ λͺ¨λ return κ°μ Futureμ
λλ€.)
μ΄λ¬ν ν¨μ μ§νμ λν κ²°κ³Όλ‘ νλ©΄μ κ·Έλ €μΌ νλλ°, μ΄λλ Futureλ₯Ό μμ ―μ λ λλ§ ν μ μλλ‘ νλ FutureBuilder μμ ―μ μ¬μ©νμ¬ νλ©΄μ 그립λλ€.
Future<List<WebtoonModel>> webtoons = ApiService.getTodaysToons();
body: FutureBuilder(
future: webtoons,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Column(
children: [
const SizedBox(
height: 50,
),
Expanded(
child: makeList(snapshot),
)
],
);
}
return const Center(
child: CircularProgressIndicator(),
);
},
),
ListView makeList(AsyncSnapshot<List<WebtoonModel>> snapshot) {
return ListView.separated(
scrollDirection: Axis.horizontal,
itemCount: snapshot.data!.length,
padding: const EdgeInsets.symmetric(
vertical: 10,
horizontal: 10,
),
itemBuilder: (context, index) {
var webtoon = snapshot.data![index];
return Webtoon(
title: webtoon.title,
thumb: webtoon.thumb,
id: webtoon.id,
);
},
separatorBuilder: (context, index) => const SizedBox(
width: 40,
),
);
}
μ λ asyncμ awaitν€μλλ₯Ό ν΅ν΄ ꡬνμ νμλλ°, thenμ λνμ¬λ μκ³ λ μμ΄μΌ μΈμ κ° μΈ μ μκΈ°μ ν΄λΉ λ΄μ©μ 첨λΆν©λλ€.
λ¨Όμ μμ ꡬνλ΄μ©μ²λΌ await ν€μλλ μν μ€μΈ ν¨μλ₯Ό μ€κ°μ ν€μλκ° λΆμ λμμ΄ μλ£λ λκΉμ§ μ§νμ λ©μΆλ ν€μλμ λλ€. λ°λΌμ ν΄λΉ ν€μλλ‘ μΈν΄ λμμ΄ λ©μΆμ΄μ§λ©΄ λμμ΄ μλ£λ λκΉμ§ μ½λλ μ€νλμ§ μμ΅λλ€.
νμ§λ§ thenμ κ²½μ°λ μνμ€μΈ ν¨μλ₯Ό μ€κ°μ λ©μΆλλ‘ νμ§ μκ³ μ½λλ κ³μ μ€νλλλ‘ λ‘λλ€.
'π» κ°λ°μ μ΄μΌκΈ° > Flutter ννμΌμ§' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Flutter, Image Codec Exception κ·Έλ¦¬κ³ CORS Policy... (0) | 2023.01.19 |
---|---|
VS Code, Preview Flutter Ui Guides νμ±ν (0) | 2023.01.14 |
Flutter λμ , κ·Έλ¦¬κ³ ν μ΄ νλ‘μ νΈμ μμ±κΉμ§. (0) | 2023.01.14 |