개요
이번 프로젝트에서는 Flutter의 Stepper 위젯을 활용하여 사용자가 선택한 해상도로 사진을 편집하는 애플리케이션을 개발해보겠습니다. Stepper를 사용하면 여러 단계로 나누어진 작업을 사용자에게 보여줄 수 있기 때문에 사진 편집 앱에 적합한 UI를 구현할 수 있습니다.
Stepper 위젯
Stepper는 일련의 스텝으로 구성된 UI를 제공하는 위젯입니다. 사용자는 이전 단계로 돌아가거나 다음 단계로 이동할 수 있습니다.
프로젝트 구성
1. 프로젝트 생성
먼저 Flutter 프로젝트를 생성합니다. 터미널에서 다음 명령어를 실행합니다:
flutter create photo_editor_app
2. 패키지 의존성 추가
프로젝트의 pubspec.yaml
파일에서 다음과 같이 image_picker
와 flutter_staggered_grid_view
패키지를 추가합니다:
dependencies:
flutter:
sdk: flutter
image_picker: ^0.6.2+3
flutter_staggered_grid_view: ^0.3.0
저장 후 터미널에서 flutter pub get
을 실행하여 패키지를 불러옵니다.
3. UI 디자인
이제 애플리케이션의 UI를 디자인해보겠습니다. lib
폴더에 main.dart
파일을 생성하고 다음과 같이 코드를 작성합니다:
import 'package:flutter/material.dart';
void main() => runApp(PhotoEditorApp());
class PhotoEditorApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Photo Editor',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PhotoEditorScreen(),
);
}
}
class PhotoEditorScreen extends StatefulWidget {
@override
_PhotoEditorScreenState createState() => _PhotoEditorScreenState();
}
class _PhotoEditorScreenState extends State<PhotoEditorScreen> {
int _currentStep = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Photo Editor'),
),
body: Stepper(
currentStep: _currentStep,
onStepContinue: () {
if (_currentStep >= 2) return;
setState(() {
_currentStep += 1;
});
},
onStepCancel: () {
if (_currentStep <= 0) return;
setState(() {
_currentStep -= 1;
});
},
steps: [
Step(
title: Text('Step 1'),
content: Text('Choose a resolution'),
isActive: _currentStep == 0,
),
Step(
title: Text('Step 2'),
content: Text('Select an image'),
isActive: _currentStep == 1,
),
Step(
title: Text('Step 3'),
content: Text('Edit the photo'),
isActive: _currentStep == 2,
),
],
),
);
}
}
이 코드에서는 애플리케이션의 기본 구조를 설정하고, Stepper를 이용하여 단계별로 보여줄 UI를 구성하였습니다.
4. 해상도 선택 UI 구현
이제 각 단계에 맞는 UI를 구현해보겠습니다. 먼저 첫 번째 단계인 해상도 선택 UI를 구현해보겠습니다. lib
폴더에 resolution_screen.dart
파일을 생성하고 다음과 같이 코드를 작성합니다:
import 'package:flutter/material.dart';
class ResolutionScreen extends StatelessWidget {
final List<String> resolutions = ['Low', 'Medium', 'High'];
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView.builder(
itemCount: resolutions.length,
itemBuilder: (context, index) {
final resolution = resolutions[index];
return ListTile(
title: Text(resolution),
onTap: () {
// 선택한 해상도로 이미지 편집 화면으로 이동
},
);
},
),
);
}
}
이 코드에서는 ResolutionScreen
클래스를 정의하고, ListView.builder를 사용하여 해상도 목록을 보여줍니다. 각 해상도를 선택하면 선택한 해상도로 이미지 편집 화면으로 이동하는 코드를 작성해야 합니다.
5. 이미지 선택 UI 구현
두 번째 단계인 이미지 선택 UI를 구현해보겠습니다. lib
폴더에 image_screen.dart
파일을 생성하고 다음과 같이 코드를 작성합니다:
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
class ImageScreen extends StatefulWidget {
@override
_ImageScreenState createState() => _ImageScreenState();
}
class _ImageScreenState extends State<ImageScreen> {
final ImagePicker _imagePicker = ImagePicker();
dynamic _pickedImage;
Future<void> _pickImage() async {
final pickedImage = await _imagePicker.getImage(source: ImageSource.gallery);
setState(() {
_pickedImage = pickedImage;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
RaisedButton(
child: Text('Choose Image'),
onPressed: _pickImage,
),
if (_pickedImage != null)
Image.file(
_pickedImage,
width: 200,
height: 200,
),
],
),
),
);
}
}
이 코드에서는 ImageScreen
클래스를 정의하고, ImagePicker를 이용하여 갤러리에서 이미지를 선택하는 기능을 구현하였습니다. 선택한 이미지는 화면에 표시되도록 처리되었습니다.
6. 사진 편집 UI 구현
마지막으로 사진 편집 UI를 구현해보겠습니다. lib
폴더에 editor_screen.dart
파일을 생성하고 다음과 같이 코드를 작성합니다:
import 'package:flutter/material.dart';
class EditorScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('Photo Editor'),
),
);
}
}
이 코드에서는 EditorScreen
클래스를 정의하고, 기본적인 사진 편집 UI를 구현하였습니다.
실행해보기
이제 애플리케이션을 실행해보겠습니다. 터미널에서 다음 명령어를 실행하여 시뮬레이터 또는 기기에 앱을 빌드하고 실행합니다:
flutter run
실행한 후 앱에서 단계별로 진행해보면 해상도 선택, 이미지 선택, 사진 편집까지의 UI를 확인할 수 있습니다.
결론
이번에는 Flutter의 Stepper를 활용하여 사용자가 선택한 해상도로 이미지를 편집할 수 있는 사진 편집 애플리케이션을 개발해보았습니다. Stepper의 기능을 활용하면 다양한 작업을 단계별로 구성할 수 있으므로, 여러분의 소프트웨어 개발에 활용해보시기 바랍니다.