Özet - Kamera
- Flutter kursu
- İleri seviye
- Ders 35/69
- 4 dk
image_picker ve CameraController'ı birleştirerek foto ekranı yaparsın.
Foto ekranı
Bir foto ekranı image_picker ve CameraController'ı birleştirir. Kullanıcı galeriden seçmek için pickImage, canlı kamera ile çekim yapmak için CameraController kullanır. Her iki yoldan da elde edilen XFile aynı şekilde file.path ile işlenir.
final file = await picker.pickImage(source: ImageSource.gallery);
// veya
final file = await controller.takePicture();
print(file.path);Uygulama Foto akışı yaz
Bir ImagePicker oluştur ve ImageSource.gallery ile görsel seç; yolunu yazdır. Sonra bir CameraController oluştur, initialize ile başlat, takePicture ile fotoğraf çek ve yolunu yazdır.
Başlangıç kodu
enum ImageSource { gallery, camera }
class XFile {
final String path;
XFile(this.path);
}
class ImagePicker {
Future<XFile?> pickImage({required ImageSource source}) async {
return XFile('/tmp/picked.png');
}
}
class CameraDescription {
final String name;
CameraDescription(this.name);
}
enum ResolutionPreset { low, medium, high }
class CameraController {
final CameraDescription camera;
final ResolutionPreset resolution;
CameraController(this.camera, this.resolution);
Future<void> initialize() async {}
Future<XFile> takePicture() async => XFile('/tmp/photo.png');
}
void main() async {
// ImagePicker ile galeriden görsel seç, yazdır
// CameraController oluştur, başlat, fotoğraf çek, yazdır
}Örnek çözüm
enum ImageSource { gallery, camera }
class XFile {
final String path;
XFile(this.path);
}
class ImagePicker {
Future<XFile?> pickImage({required ImageSource source}) async {
return XFile('/tmp/picked.png');
}
}
class CameraDescription {
final String name;
CameraDescription(this.name);
}
enum ResolutionPreset { low, medium, high }
class CameraController {
final CameraDescription camera;
final ResolutionPreset resolution;
CameraController(this.camera, this.resolution);
Future<void> initialize() async {}
Future<XFile> takePicture() async => XFile('/tmp/photo.png');
}
void main() async {
final picker = ImagePicker();
final picked = await picker.pickImage(source: ImageSource.gallery);
print(picked!.path);
final controller = CameraController(
CameraDescription('0'),
ResolutionPreset.high,
);
await controller.initialize();
final file = await controller.takePicture();
print(file.path);
}Beklenen çıktı
/tmp/picked.png /tmp/photo.png
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Foto ekranında galeriden seçim ve kamera ile çekim arasındaki ortak nokta nedir?
- İkisi de bir XFile döndürür ve file.path ile işlenir Doğru cevap
- İkisi de yalnızca Android'de çalışır
- İkisi de CameraController gerektirir
- İkisi de Future<int> döndürür
Açıklama: pickImage ve takePicture her ikisi de XFile döndürür; dosya yolu file.path ile alınır ve aynı şekilde işlenir.
2 Galeri görselini işle
final file = await picker.pickImage(
source: ImageSource.____,
);
print(file!.path);
final file = await picker.pickImage(
source: ImageSource.gallery,
);
print(file!.path);
Açıklama: Galeriden görsel seçmek için ImageSource.gallery kullanılır; camera kameradan çekim yapar.
3 Foto ekranı parçaları
| Kavram | Anlamı |
|---|---|
ImagePicker |
Galeri seçici |
CameraController |
Kamera denetleyicisi |
pickImage |
Galeriden seçer |
takePicture |
Fotoğraf çeker |