Flutter에서는 useEffect 훅을 사용하여 위젯이나 페이지가 렌더링될 때 동적으로 데이터를 가져와야 하는 경우에 유용하게 활용할 수 있습니다. 이를테면 API 호출, 데이터베이스 연동 등이 있습니다.
이 예제에서는 useEffect 훅을 사용하여 Flutter 앱에서 API를 호출하여 동적 데이터를 불러오는 방법을 살펴보겠습니다.
useEffect 훅이란?
useEffect 훅은 함수형 컴포넌트에서 부작용(예: 데이터 가져오기, 구독 설정, 수동으로 수행하는 DOM 변이 등)을 수행할 수 있도록 도와주는 React 훅입니다. Flutter에서는 이를 이용하여 앱의 상태 변화나 렌더링 사이에 비동기 동작을 수행할 수 있습니다.
예제 코드
먼저, use_effect_example.dart
파일을 생성하고 다음과 같이 코드를 작성합니다.
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('useEffect Example'),
),
body: Center(
child: useEffectExample(),
),
),
);
}
}
class useEffectExample extends StatefulWidget {
@override
_useEffectExampleState createState() => _useEffectExampleState();
}
class _useEffectExampleState extends State<useEffectExample> {
List<dynamic> data = [];
@override
void initState() {
_getData();
super.initState();
}
void _getData() async {
final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
if (response.statusCode == 200) {
setState(() {
data = json.decode(response.body);
});
} else {
throw Exception('Failed to load data');
}
}
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: data.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(data[index]['title']),
subtitle: Text(data[index]['body']),
);
},
);
}
}
위의 코드는 http
패키지를 사용하여 https://jsonplaceholder.typicode.com/posts API에서 데이터를 가져와 ListView에 표시하는 간단한 Flutter 앱 예제입니다.
이제 main.dart
파일에서 useEffectExample
위젯을 호출하여 앱을 실행하면 useEffect를 사용하여 API에서 데이터를 가져와서 화면에 표시하는 앱을 확인할 수 있습니다.
결론
Flutter에서의 useEffect 훅을 사용하여 동적 데이터를 불러오는 방법에 대한 예제를 살펴보았습니다. 이를 통해 앱의 초기 로딩 시나 렌더링 과정에서 비동기 동작을 수행하고 데이터를 효율적으로 관리하는 방법을 익힐 수 있습니다.
위의 코드를 활용하여 나만의 Flutter 앱을 개발해보세요!