CodeBlanks Logo Icon CodeBlanks

CameraController

CameraController ile fotoğraf çekmeyi öğrenirsin.

CameraController ile fotoğraf

CameraController başlatıldıktan sonra takePicture metodu ile fotoğraf çekilir. Bu metot asenkron bir XFile döndürür. Çekilen fotoğrafın yolu file.path ile alınır.

final file = await controller.takePicture();
print(file.path);

dispose metodu

CameraController kullanılmadığında dispose ile kaynakları serbest bırakılır. Kamera donanımı sınırlı kaynak olduğu için controller'ı dispose etmemek bellek ve donanım sızıntısına yol açar. Stateful widget'ların dispose metodunda çağrılır.

@override
void dispose() {
  controller.dispose();
  super.dispose();
}

Uygulama Fotoğraf çek ve yazdır

Bir CameraController oluştur, initialize ile başlat, takePicture ile fotoğraf çek ve dosya yolunu yazdır.

Başlangıç kodu

main.dart
class CameraDescription {
  final String name;
  CameraDescription(this.name);
}

enum ResolutionPreset { low, medium, high }

class XFile {
  final String path;
  XFile(this.path);
}

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 dispose() {}
}

void main() async {
  // controller oluştur ve başlat
  // fotoğraf çek, dosya yolunu yazdır
  // dispose çağır
}

Örnek çözüm

main.dart
class CameraDescription {
  final String name;
  CameraDescription(this.name);
}

enum ResolutionPreset { low, medium, high }

class XFile {
  final String path;
  XFile(this.path);
}

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 dispose() {}
}

void main() async {
  final controller = CameraController(
    CameraDescription('0'),
    ResolutionPreset.high,
  );
  await controller.initialize();
  final file = await controller.takePicture();
  print(file.path);
  controller.dispose();
}

Beklenen çıktı

/tmp/photo.png

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 takePicture metodu ne döndürür?

  • Future&lt;void&gt;
  • Future&lt;XFile&gt; Doğru cevap
  • Future&lt;int&gt;
  • Future&lt;Widget&gt;

Açıklama: takePicture asenkron bir XFile döndürür; bu dosya çekilen fotoğrafın yolunu içerir.

2 Fotoğraf çek

Soru
final file = await controller.____;
Cevap
final file = await controller.takePicture();

Açıklama: Fotoğraf çekmek için takePicture metodu çağrılır; parantezlerle çağrılır ve await ile beklenir.

3 CameraController parçaları

Kavram Anlamı
takePicture Fotoğraf çeker
XFile Çekilen dosya
dispose Kaynakları serbest bırakır
initialize Başlatma

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