1. 기본 설정
andoid/app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 쓰기권한부여 -->
....
</manifest>
AndroidManifest.xml에 쓰기 권한을 추가한다. 권한은 manifest 바로 밑에 추가한다.

pubspec.yml에 image_picker 와 gallery_saver 을 추가한다.
android/app/src/build.gradle

build.gradle 에서 해당 부분을 수정한다.
2. 사진 촬영, 저장 어플 만들기
import 'package:flutter/material.dart';
import 'package:gallery_saver/gallery_saver.dart';
import 'package:image_picker/image_picker.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Column(
children: [
Expanded(
child: Center(
child: Text(
"사진 저장하기",
style: TextStyle(fontSize: 50.0),
),
),
),
Row(
children: [
IconButton(
onPressed: () {
_takePhoto();
},
icon: Icon(Icons.camera_alt_outlined),
iconSize: 50.0,
),
],
),
],
),
),
);
}
void _takePhoto() async {
ImagePicker().pickImage(source: ImageSource.camera).then((value) {
if (value != null && value.path != null) {
print("저장경로 : ${value.path}");
GallerySaver.saveImage(value.path).then((value) {
print("사진이 저장되었습니다.");
},);
}
},);
}
}


하단의 카메라 버튼을 누르면 가상의 카메라가 뜨면서 사진을 찍을 수 있다.

포토를 들어가면 찍은 사진을 확인할 수 있다.
3. 사진 촬영 저장 및 불러오기 어플 만들기
andoid/app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 쓰기권한부여 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 읽기권한부여 -->
....
</manifest>
쓰기 권한과 함께 읽기 권한도 작성한다.
main.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:gallery_saver/gallery_saver.dart';
import 'package:image_picker/image_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
File? _selectedImage;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Column(
children: [
Expanded(
child: Center(
child: Text(
"사진 저장하기",
style: TextStyle(fontSize: 50.0),
),
),
),
Container(
child: _selectedImage != null
? Image.file(_selectedImage!)
: Text("사진 없음"),
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
IconButton(
onPressed: _takePhoto,
icon: Icon(Icons.camera_alt_outlined),
iconSize: 50.0,
),
IconButton(
onPressed: _pickImageFromGallery,
icon: Icon(Icons.image_outlined),
iconSize: 50.0,
)
],
),
],
),
),
);
}
void _takePhoto() async {
final pickedImage =
await ImagePicker().pickImage(source: ImageSource.camera);
if (pickedImage != null) {
setState(() {
_selectedImage = File(pickedImage.path);
});
GallerySaver.saveImage(pickedImage.path).then(
(bool? success) {
print(success == true ? "사진이 저장되었습니다." : "사진 저장 오류");
},
);
}
}
void _pickImageFromGallery() async {
final pickedImage =
await ImagePicker().pickImage(source: ImageSource.gallery);
if (pickedImage != null) {
setState(() {
_selectedImage = File(pickedImage.path);
});
}
}
}


카메라 버튼을 누르면 사진도 찍을 수 있고, 오른쪽으 사진 아이콘을 누르면 찍은 사진이 나온다.
Share article