작성
·
725
0
안녕하세요.
아래의 코드를 적용한 뒤 이미지 추가 버튼을 클릭하면 앱이 아예 꺼집니다.
//ImagePicker
final ImagePicker _picker = ImagePicker();
File? _imageFile; //갤러리 연동을 위해 사용
Future<void> _getImage() async {
//ImagePiker
var image = await _picker.pickImage(source: ImageSource.gallery);
setState(() {
_imageFile = File(image!.path);
});
}
}
sdk 2.12, imagePicker 패키지는 0.8.4 버전이고 연결이 끊겼다는것 외에는 다른 오류는 출력되지 않습니다.
create_page.dart의 전체 코드입니다.
import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart'; //갤러리 또는 카메라 연동하는 패키지
class createPage extends StatefulWidget {
const createPage({Key? key}) : super(key: key);
@override
_createPageState createState() => _createPageState();
}
class _createPageState extends State<createPage> {
//입력창을 위한 객체 생성
final TextEditingController createText = TextEditingController();
//ImagePicker
final ImagePicker _picker = ImagePicker();
File? _imageFile; //갤러리 연동을 위해 사용
//dispose : 객체가 해제될 때 (더 이상 사용되지 않을때) 그 객체에 있던 메모리를 삭제, 자원 관리를 위해 사용
//_createPageState가 제거될 때 호출됨
@override
void dispose() {
// TODO: implement dispose
createText.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: _buildAppbar(),
body: _buildBody(), //메소드 생성해서 정의
floatingActionButton: FloatingActionButton(
//갤러리에서 이미지 가져오기 (image_picker 패키지 사용)
onPressed: _getImage,
backgroundColor: Colors.blue,
child: Icon(Icons.add_a_photo),
),
);
}
_buildAppbar() {
return AppBar(
//앱바 오른쪽에 아이콘 생성
actions: [
Icon(Icons.send),
],
);
}
_buildBody() {
return SingleChildScrollView( //스크롤 추가
child: Column(
children: [
//이미지 출력 부분
//이미지가 선택되지 않았을 때(null)는 텍스트 출력, 선택되었다면 선택된 이미지를 출력
_imageFile == null ? Text("No Image") : Image.file(_imageFile!),
//입력창 생성
TextField(
controller: createText,
//텍스트필드의 스타일 설정
decoration: InputDecoration(
hintText: "내용을 입력하세요", //기본값
),
)
],
),
);
}
//갤러리 연동
//이미지를 File로 만들어 줘야하기 때문에 비동기 처리 방식 사용?
Future<void> _getImage() async {
//ImagePiker
var image = await _picker.pickImage(source: ImageSource.gallery);
setState(() {
_imageFile = File(image!.path);
});
}
}
_getImage 메소드의 문제일까요?
감사합니다.
답변 3
1
iOS 디바이스에서의 카메라 접근 권한 설정이 필요하기 때문입니다.
아마도 iOS에서 앱 접근권한을 엄격하게 하는 정책이 얼마 전에 추가되었기 때문인 것으로 보이네요.
ios/Runner/Info.plist 에 다음 내용을 추가합니다.
<key>NSCameraUsageDescription</key>
<string>Used to demonstrate image picker plugin</string>
<key>NSMicrophoneUsageDescription</key>
<string>Used to capture audio for image picker plugin</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Used to demonstrate image picker plugin</string>
그러면 정상적으로 진행 가능합니다.
해당 내용은 다음 주소에서 확인하였습니다.
https://minwook-shin.github.io/flutter-use-image-picker/
0
감사합니다! 덕분에 해결했습니다 :)