image_picker라이브러리를 사용한다.
다트 파일에 image picker와 dart:io를 임포트해 주자.
import 'dart:io';
import 'package:image_picker/image_picker.dart';
소스코드
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
class Example1Page extends StatefulWidget {
const Example1Page({Key? key}) : super(key: key);
@override
State<Example1Page> createState() => _Example1PageState();
}
class _Example1PageState extends State<Example1Page> {
XFile? _pickedFile;
final ImagePicker imgpicker = ImagePicker();
XFile? imagefile;
openImages() async {
try {
var pickedfile = await imgpicker.pickImage(source: ImageSource.gallery);
//you can use ImageCourse.camera for Camera capture
if (pickedfile != null) {
imagefile = pickedfile;
setState(() {});
} else {
print("No image is selected.");
}
} catch (e) {
print("error while picking file.");
}
}
cameraImages() async {
try {
var pickedfile = await imgpicker.pickImage(source: ImageSource.camera);
//you can use ImageCourse.camera for Camera capture
if (pickedfile != null) {
imagefile = pickedfile;
setState(() {});
} else {
print("No image is selected.");
}
} catch (e) {
print("error while picking file.");
}
}
@override
Widget build(BuildContext context) {
final _imageSize = MediaQuery.of(context).size.width / 4;
return SafeArea(
child: Scaffold(
appBar: AppBar(
title: const Text('Example1'),
),
body: Column(
children: [
_builderImageUploader(),
const SizedBox(
height: 20,
),
if (_pickedFile == null)
Container(
constraints: BoxConstraints(
minHeight: _imageSize,
minWidth: _imageSize,
),
)
else
Center(
child: Container(
width: _imageSize,
height: _imageSize,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
width: 2, color: Theme.of(context).colorScheme.primary),
image: DecorationImage(
image: FileImage(File(_pickedFile!.path)),
fit: BoxFit.cover),
),
),
),
],
),
),
);
}
Widget _builderImageUploader() {
return Container(
alignment: Alignment.center,
child: Column(
children: [
//open button ----------------
Text("선택한 이미지:"),
Divider(),
imagefile != null
? Container(
child: Card(
child: Container(
width: double.infinity,
height: 200,
child: Image.file(
File(imagefile!.path),
),
),
))
: Container(),
Divider(),
SizedBox(
height: 70,
width: double.infinity,
child: ElevatedButton(
onPressed: () {
openImages();
},
style: TextButton.styleFrom(
backgroundColor: Colors.blue,
primary: Colors.black,
),
child: Text("이미지 선택")),
),
SizedBox(
height: 20,
),
SizedBox(
height: 70,
width: double.infinity,
child: ElevatedButton(
onPressed: () {
cameraImages();
},
style: TextButton.styleFrom(
backgroundColor: Colors.blue,
primary: Colors.black,
),
child: Text("이미지 촬영")),
),
],
),
);
}
}
'Flutter' 카테고리의 다른 글
modalBottomSheet (0) | 2022.12.09 |
---|---|
listview 안에 listview사용하기 (0) | 2022.12.08 |
datePicker 달력 (0) | 2022.12.04 |
Category_detail_page (0) | 2022.12.04 |
lesson_detail_page (0) | 2022.12.04 |