CodeBlanks Logo Icon CodeBlanks

Özet - Kamera

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

main.dart
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

main.dart
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&lt;int&gt; 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

Soru
final file = await picker.pickImage(
  source: ImageSource.____,
);
print(file!.path);
Cevap
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

İleri seviye bölümündeki tüm dersler