[flutter] 플러터 프로바이더를 사용하여 갤러리 앱 만들기
이번에는 플러터(Flutter)에서 프로바이더(Provider) 패키지를 사용하여 갤러리 앱을 만드는 방법을 살펴보겠습니다.
목표
이 갤러리 앱은 사용자의 사진을 로드하고 표시하는 데모 앱입니다. 또한 사용자는 각 사진을 클릭하여 확대된 이미지를 볼 수 있습니다.
단계
1. 프로바이더 패키지 추가
우선, pubspec.yaml 파일의 dependencies
섹션에 다음과 같이 프로바이더 패키지를 추가합니다.
dependencies:
flutter:
sdk: flutter
provider: ^5.0.0
# 나머지 의존성
그런 다음 터미널에서 다음 명령으로 패키지를 가져옵니다.
flutter pub get
2. 모델 및 프로바이더 생성
다음 단계는 데이터 모델 및 상태 관리를 위한 프로바이더를 만드는 것입니다. 사용자의 사진을 나타내는 Photo 모델과 그 모델을 관리하는 PhotoProvider 클래스를 작성합니다.
photo.dart
class Photo {
final String imageUrl;
Photo({required this.imageUrl});
}
photo_provider.dart
import 'package:flutter/foundation.dart';
import 'photo.dart';
class PhotoProvider extends ChangeNotifier {
List<Photo> _photos = [];
List<Photo> get photos => _photos;
void loadPhotos() {
// 사진을 가져오는 비동기 로직
// _photos에 사진 추가
notifyListeners();
}
}
3. UI 구성
이제 UI를 구성하고 프로바이더를 사용하여 데이터를 가져와 표시해 봅시다.
gallery_screen.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'photo.dart';
import 'photo_provider.dart';
class GalleryScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('갤러리'),
),
body: Consumer<PhotoProvider>(
builder: (context, photoProvider, child) {
if (photoProvider.photos.isEmpty) {
return Center(child: CircularProgressIndicator());
} else {
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
),
itemCount: photoProvider.photos.length,
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
// 이미지 확대 화면으로 네비게이션
},
child: Image.network(photoProvider.photos[index].imageUrl),
);
},
);
}
},
),
);
}
}
4. 앱 실행
마지막으로, 메인 앱 파일에 프로바이더를 등록하고 시작해 봅시다.
main.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'photo_provider.dart';
import 'gallery_screen.dart';
void main() {
runApp(
ChangeNotifierProvider(
create: (context) => PhotoProvider(),
child: MyApp(),
),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '갤러리 앱',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: GalleryScreen(),
);
}
}
여기까지 따라오셨다면 이제 갤러리 앱이 실행되고, 프로바이더를 사용하여 데이터를 효율적으로 관리할 수 있게 될 것입니다.
플러터 프로바이더를 사용하면 간단하게 상태를 관리하고 UI를 업데이트할 수 있습니다. 이를 통해 코드를 더 깔끔하게 유지하고 성능을 개선할 수 있습니다.
더 많은 정보를 원하시거나 문제가 있을 경우, 공식 프로바이더 문서를 참조하십시오.