Haftanın Flutter Paketi: image_picker

 

Merhaba, haftanın paketi serimizin ikinci yazısı projelerimizde resim dosyalarını ele almak ile ilgili. Ve paketimiz image_picker. Bu paket, uygulama geliştirenlerin en sık kullandığı araçlardan biri, çünkü bir uygulamada kullanıcıların cihazlarından fotoğraf ya da video seçmesi çok yaygın bir ihtiyaç.

Ne işe yarıyor?

Image Picker cihazın galerisinden ya da direkt kameradan medya dosyaları almanı sağlıyor yani aslında kullanıcıların fotoğraf ya da video seçmesini kolaylaştırıyor. Diyelim ki bir profil fotoğrafı ekleme ekranı yapıyorsun, kullanıcının galeriden bir resim seçmesine ya da anında fotoğraf çekmesine izin vermek istersin. İşte bu paket sayesinde, o iş birkaç satır kodla hallediliyor.

Nasıl kullanılır?

Önce her zamanki gibi aşağıdaki komutu kullanarak paketin pubspec.yamldosyana eklenmesini sağlıyorsun:

flutter pub add image_picker
dependencies:
image_picker: ^1.1.2 //versiyon numarası değişkenlik gösterebilir

Sonrasında paketi kullanacağın dart dosyasına aşağıdaki satır ile import etmen gerekiyor:

import 'package:image_picker/image_picker.dart';

İzinlere bakacak olursak,

Sürüm 0.8.1'den itibaren Android uygulaması Android 4.3 veya üzeri sürümlerde (birden fazla) görüntü seçmeyi desteklemektedir. Dolayısıyla yapılandırma gerekmez — eklenti kutudan çıkar çıkmaz çalışmalıdır.

Ama iOS’ta Info.plist dosyasına aşağıdaki satırları eklemelisin:

<key>NSCameraUsageDescription</key>
<string>We need access to your camera to take photos.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to select photos.</string>

Şimdi işin eğlenceli kısmı geliyor. Paketin sunduğu ImagePicker sınıfı sayesinde galeri veya kameradan kolayca resim seçebiliyorsun. İşte nasıl kullanacağına dair basit bir örnek:

final ImagePicker _picker = ImagePicker();

// Galeriden resim seçmek
final XFile? image = await _picker.pickImage(source: ImageSource.gallery);

// Kameradan resim çekmek
final XFile? photo = await _picker.pickImage(source: ImageSource.camera);

Yukarıdaki kodda, kullanıcı galeriden bir resim seçerse image değişkenine dosya yolu atanıyor. Aynı şekilde, kamerayı kullanmak istersen ImageSource.camera parametresiyle kameradan çekim yapabilirsin.

Aynı yöntemle video seçmek de mümkün:

final XFile? video = await _picker.pickVideo(source: ImageSource.gallery);

Ayrıca, bu paket hem fotoğrafları hem de videoları küçültme (compression) seçenekleri sunuyor. Bu, özellikle büyük dosya boyutlarını optimize etmek için harika bir özellik!

Şimdi bu paketi kullanarak ne gibi özelleştirmeler yapabiliriz, bir de ona bakalım.

Image Picker’da ayrıca çözünürlük ayarları yaparak kullanıcıların yükleyeceği medya dosyalarının boyutunu ve kalitesini kontrol edebilirsin. Örneğin, kamera kullanılırken düşük çözünürlüklü bir fotoğraf çekmek istersen imageQualityparametresini ayarlayabilirsin.

final XFile? compressedPhoto = await _picker.pickImage(
source: ImageSource.camera,
imageQuality: 50, // %50 kalite
);

Bu sayede, uygulamanın performansını da koruyabilirsin. Özellikle internet üzerinden medya dosyaları yükleyeceksen, düşük boyutlu resimler daha hızlı yüklenir.

Ayrıca maxWidth, maxHeight ile resimlerin boyutunu ve preferredCameraDevice parametresi ile ön ya da arka kamera tercihini de belirleyebilirsin.

Aşağıda tüm kodları ile bu paket kullanılarak yapılmış proje örneğini paylaşıyorum.

!!! Projeyi iOS Simulator kullanarak oluşturduğum ve sanal cihazda kamera bulunmadığından Camera butonunda Error görünüyor ancak gerçek cihazda sorunsuz çalışır.

final ImagePicker _picker = ImagePicker();
Future pickImageFromGallery() async {
final XFile? image = await _picker.pickImage(source: ImageSource.gallery);
}

Future pickImageFromCamera() async {
final XFile? photo = await _picker.pickImage(source: ImageSource.camera);
}

Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.purple,
padding: const EdgeInsets.all(16.0),
),
child: const Text("Pick Image from Gallery",
style: TextStyle(
color: Colors.white70, fontWeight: FontWeight.bold)),
onPressed: () {
pickImageFromGallery();
},
),
const SizedBox(
height: 22.0,
),
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.purple,
padding: const EdgeInsets.all(16.0),
),
child: const Text("Pick Image from Camera",
style: TextStyle(
color: Colors.white70, fontWeight: FontWeight.bold)),
onPressed: () {
pickImageFromCamera();
},
),
],
),
),

Avantajları ve dezavantajlarından da bahsederek yazımı tamamlıyorum.

ImagePicker paketinin en büyük avantajı kullanıcıların galeriden ya da kameradan medya dosyalarını seçmesinin sadece birkaç satır kodla halledilebiliyor olması. Ayrıca dosya boyutu ve kalitesini de kontrol edebiliyorsun.

Dezavantajına gelince, büyük medya dosyalarıyla çalışırken performans yönetimini iyi yapman gerekebilir. Ve bir de platformlara özgü izinlerin manuel olarak ayarlanması biraz zahmetli olabilir.

Özetle, Image Picker, Flutter projelerinde kullanıcıların medya seçmesini veya kamera kullanmasını isteyen herkesin başvurduğu en popüler paketlerden biri. Eğer uygulamanda profil fotoğrafı, galeri seçimi ya da video yükleme gibi özellikler varsa, bu paket seni epey rahatlatacak! Hem basit, hem de çok yönlü bir çözüm sunuyor.

Umarım faydalı olmuştur.

İyi kodlamalar.

Selin.

Hiç yorum yok: