Flutter & Mobil İle Qr Kod Okuyucu Uygulaması Nasıl Yapılır?

Flutter & Mobil İle Qr Kod Okuyucu Uygulaması Nasıl Yapılır?
Flutter & Mobil İle Qr Kod Okuyucu Uygulaması Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Projeye başlamadan önce geliştirme ortamınızın güncel olduğundan emin olmalısınız. Flutter 3.x ve üzeri sürümler, performans iyileştirmeleri ve güvenlik yamalarıyla güncel mobil uygulamalar için en stabil ortamı sunar. Aşağıdaki araçların yüklü olduğunu kontrol edin:

  • Flutter SDK (3.22 veya üzeri önerilir)
  • Dart SDK (3.5 veya üzeri)
  • Android Studio veya VS Code (Gerekli eklentilerle birlikte)
  • Fiziksel bir test cihazı (Kamera simülasyonu emülatörlerde kısıtlıdır)

Projenizi oluşturmak için terminalinize flutter create qr_scanner_app komutunu yazarak başlayabilirsiniz. Ardından, pubspec.yaml dosyanıza gerekli bağımlılıkları ekleyeceğiz.

Gerekli Paketlerin Kurulumu

Flutter ekosisteminde QR okuma işlemleri için en performanslı ve güncel kütüphane mobile_scanner paketidir. Bu paket, kamera erişimini ve görüntü işleme süreçlerini optimize edilmiş şekilde yönetir. Bağımlılıkları projenize eklemek için aşağıdaki adımları izleyin.

dependencies:
  flutter:
    sdk: flutter
  mobile_scanner: ^6.0.0

Paketi ekledikten sonra terminalde flutter pub get komutunu çalıştırarak kütüphaneyi projenize dahil edin. Bu kütüphane, hem iOS hem de Android için gerekli olan kamera izinlerini yönetmenize olanak tanır.

Platform İzinlerinin Ayarlanması

Mobil uygulamalarda kamera kullanımı hassas bir izne tabidir. Kullanıcıdan izin almadan kameraya erişmeye çalışmak, uygulamanın çökmesine veya mağaza reddine neden olur. Android ve iOS için gerekli yapılandırmaları aşağıda bulabilirsiniz.

Android için: android/app/src/main/AndroidManifest.xml dosyasına şu satırı ekleyin:

iOS için: ios/Runner/Info.plist dosyasına şu anahtarı ekleyerek kullanıcıyı bilgilendirin:

NSCameraUsageDescription
QR kodları tarayabilmek için kameranıza erişmemiz gerekiyor.

QR Tarayıcı Arayüzünü Oluşturma

Şimdi lib/main.dart dosyasında tarayıcı ekranımızı tasarlayalım. MobileScanner widget'ı, kameradan gelen görüntüyü anlık olarak işler ve onDetect metodu ile sonucu bize döndürür. Bu adımda, tarama sonucunu yakalayan temel yapıyı kuruyoruz.

import 'package:flutter/material.dart';
import 'package:mobile_scanner/mobile_scanner.dart';

class QrScannerScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("QR Kod Okuyucu")),
      body: MobileScanner(
        onDetect: (capture) {
          final List barcodes = capture.barcodes;
          for (final barcode in barcodes) {
            debugPrint('Bulunan Kod: ${barcode.rawValue}');
          }
        },
      ),
    );
  }
}

Bu kod bloğu, kamerayı açar ve her başarılı taramada konsola veriyi yazdırır. barcode.rawValue değişkeni, QR kodun içindeki metin veya URL bilgisini taşır.

Veri İşleme ve Hata Yönetimi

Kullanıcıya sadece veriyi konsolda göstermek yeterli değildir. Tarama sonucunda elde edilen verinin bir URL olup olmadığını kontrol etmek ve kullanıcıyı yönlendirmek daha profesyonel bir yaklaşımdır. Ayrıca, tarama esnasında oluşabilecek hataları yönetmek için errorBuilder kullanmalısınız.

MobileScanner(
  errorBuilder: (context, error, child) {
    return Center(child: Text("Kamera erişimi sağlanamadı: ${error.errorCode}"));
  },
  onDetect: (capture) {
    final String? data = capture.barcodes.first.rawValue;
    if (data != null) {
      // Burada veriyi işleyin, örneğin bir sayfaya yönlendirin
      print("Taranan Veri: $data");
    }
  },
);

Bu yapı, uygulamanın kamera hatası durumunda çökmesini engeller ve kullanıcıya anlamlı bir hata mesajı gösterir.

QR Kod Okuyucu Yöntemlerinin Karşılaştırılması

Yöntem Avantajı Dezavantajı
MobileScanner Hızlı, güncel, düşük bellek kullanımı Daha fazla yapılandırma gerektirir
QR_Code_Scanner Eski ve geniş topluluk desteği Güncellemeleri yavaş, bazı sürümlerde hata verir

Güvenlik Uyarısı: QR kodlar üzerinden gelen veriler her zaman güvenli olmayabilir. Bir URL'yi doğrudan tarayıcıda açmadan önce mutlaka bir doğrulama (validation) sürecinden geçirin. Kötü niyetli kişilerin hazırladığı QR kodlar, kullanıcıyı sahte web sitelerine yönlendirebilir.

Sıkça Sorulan Sorular

QR kod okuyucu uygulaması neden kamerayı açmıyor?

Genellikle AndroidManifest.xml veya Info.plist dosyalarındaki izinlerin eksik olmasından kaynaklanır. Ayrıca emülatör kullanıyorsanız, emülatörün kamera ayarlarının "Emulated" veya "Webcam" olarak seçildiğinden emin olun.

Taranan veriyi nasıl bir web sitesine yönlendirebilirim?

url_launcher paketini kullanarak, onDetect içerisinde gelen veriyi launchUrl(Uri.parse(data)) metodu ile tarayıcıda açabilirsiniz.

Uygulama arka planda çalışırken tarama devam eder mi?

Hayır, pil tasarrufu ve güvenlik nedeniyle uygulama arka plana alındığında kamera erişimi otomatik olarak kesilir. Uygulama tekrar ön plana geldiğinde kamerayı yeniden başlatmanız gerekebilir.

QR kod okuma hızı nasıl artırılır?

MobileScanner içindeki scanWindow parametresini kullanarak tarama alanını ekranın belirli bir bölümüyle sınırlayabilir, böylece işlemci üzerindeki yükü azaltabilirsiniz.

Karanlık ortamlarda tarama yapmak için ne yapmalıyım?

MobileScanner controller'ı üzerinden controller.toggleTorch() metodunu kullanarak cihazın flaş ışığını kontrol edebilirsiniz.

Uygulama Performansını Optimize Etme ve İleri Seviye İpuçları

QR kod okuyucu uygulamanızın kullanıcı deneyimini iyileştirmek için sadece çalışması yeterli değildir; aynı zamanda hızlı ve enerji verimli olması gerekir. Kamera akışları yüksek kaynak tüketimine neden olabilir. Performansı artırmak için aşağıdaki stratejileri uygulayabilirsiniz:

  • Kamera Çözünürlüğünü Sınırlandırma: Yüksek çözünürlüklü kamera akışları işlemciyi yorar. QR kod okuma için 720p veya daha düşük bir çözünürlük genellikle yeterlidir.
  • Tarama Frekansını Ayarlama: Her kareyi (frame) işlemek yerine, saniyede belirli sayıda (örneğin 5-10 kare) analiz yaparak CPU kullanımını düşürebilirsiniz.
  • Gereksiz Paketlerden Kaçınma: Uygulamanızda sadece QR okuma işlevine odaklanın. Arka planda çalışan ağır servisleri tarama anında durdurun.

Özel QR Kod Arayüzü (Overlay) Tasarımı

Kullanıcıların QR kodu doğru hizalaması için bir "tarama çerçevesi" eklemek, uygulamanın profesyonel görünmesini sağlar. Stack widget'ını kullanarak kamera görüntüsünün üzerine yarı saydam bir katman ekleyebilirsiniz.


Stack(
  children: [
    QRView(key: qrKey, onQRViewCreated: _onQRViewCreated),
    Container(
      decoration: BoxDecoration(
        color: Colors.black.withOpacity(0.5),
      ),
      child: Center(
        child: Container(
          width: 250,
          height: 250,
          decoration: BoxDecoration(
            border: Border.all(color: Colors.green, width: 4),
            borderRadius: BorderRadius.circular(12),
          ),
        ),
      ),
    ),
  ],
)

Uygulamayı Yayına Hazırlama (Deployment) ve Test Süreçleri

Uygulamanızı mağazalara göndermeden önce farklı cihazlarda test etmek hayati önem taşır. Özellikle düşük bütçeli Android cihazların kamera odaklama (auto-focus) yetenekleri farklılık gösterebilir.

Farklı Cihazlarda Test Stratejileri

  1. Fiziksel Cihaz Testi: QR kod okuma simülatörlerde sağlıklı çalışmaz. Mutlaka en az bir düşük segment ve bir yüksek segment fiziksel cihazda test yapın.
  2. İzin Yönetimi Testi: Kullanıcı kameraya erişim izni vermediğinde uygulamanın çökmediğinden, aksine kullanıcıyı ayarlar menüsüne yönlendiren bir uyarı gösterdiğinden emin olun.
  3. Kamera İzinleri (iOS/Android): Info.plist (iOS) ve AndroidManifest.xml (Android) dosyalarınızdaki izin açıklamalarının net olduğundan emin olun; aksi takdirde Apple mağaza reddi verebilir.
Pro İpucu: Uygulamanızın üretim sürümünü alırken flutter build apk --split-per-abi komutunu kullanarak APK boyutunu optimize edebilir, böylece kullanıcılarınızın daha hızlı indirme yapmasını sağlayabilirsiniz.

Hata Ayıklama (Debugging) İçin İpuçları

Eğer tarama işlemi başlamıyorsa, konsolunuzda CameraAccessDenied hatası alıp almadığınızı kontrol edin. Ayrıca, onQRViewCreated metodu içerisinde controller.resumeCamera() çağrısının yapıldığından emin olun. Uygulama arka plana geçtiğinde kamerayı serbest bırakmak (dispose) bellek sızıntılarını önlemek için zorunludur.

Sonuç

Flutter ile QR kod okuyucu geliştirmek, modern mobil geliştirme araçlarının ne kadar güçlü olduğunu gösteren harika bir örnektir. Bu rehberde, kamera izinlerinden başlayarak, veriyi yakalama ve hata yönetimine kadar olan süreci adım adım inceledik. Bir sonraki adım olarak, taranan verileri yerel veritabanında (SQLite veya Hive) saklayarak bir "Tarama Geçmişi" özelliği eklemeyi deneyebilirsiniz.

Kod Güvenliği Sorumluluk Reddi: Bu makaledeki kod örnekleri eğitim amaçlıdır. Üretim ortamına (production) alacağınız uygulamalarda, kullanıcı girdilerini filtrelemeyi, ağ isteklerini SSL ile şifrelemeyi ve uygulama içi güvenlik katmanlarını (örneğin: jailbreak/root tespiti) mutlaka uygulayınız.

Bu yazıya tepkinizi paylaşın:
Zeynep Kaya

Adım adım rehber hazırlama ve kullanıcı deneyimi odaklı içerik mimarisi konusunda yetkinim. Okuyucuların sorunlarını hızlı çözen, net ve uygulanabilir metinler üretmeyi seviyorum.

Yorumlar (18)

18
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Caner Yıldırım
Caner Yıldırım 31 Temmuz 2026

Harika bir rehber olmuş Zeynep Hanım, elinize sağlık. Özellikle kamera izinleri konusunda hep hata alıyordum, buradaki adımları takip edince çözdüm.

Zeynep Kaya
Zeynep Kaya 01 Ağustos 2026

Çözebilmenize çok sevindim, bazen izinler gerçekten baş ağrıtabiliyor. Başarılar dilerim!

Deniz Kara
Deniz Kara 02 Ağustos 2026

bunu denedim ama ios tarafında kamera açılmıyo neden olabilir acaba? info.plist ayarlarınıda yaptım aslında.

Burak S.
Burak S. 03 Ağustos 2026

Kanka pod install yaptın mı? Bazen xcode tarafında temiz kurulum (clean) yapmak gerekiyor, bi dene istersen.

Selin Yılmaz
Selin Yılmaz 03 Ağustos 2026

Çok açıklayıcı bir yazı olmuş. Peki bunu uygulamanın arka planında sürekli çalışacak şekilde kurgulayabilir miyiz?

Zeynep Kaya
Zeynep Kaya 04 Ağustos 2026

Arka planda sürekli çalışması pil tüketimi açısından zorlayıcı olabilir ama 'background_fetch' paketine göz atabilirsiniz.

Hakan Demir
Hakan Demir 04 Ağustos 2026

yazı cok güzel ama keşke daha fazla kod bloğu olsaydı, bazen nerde neyi import ediceğimizi karıştırıyorum.

Zeynep Kaya
Zeynep Kaya 05 Ağustos 2026

Haklısınız, bir sonraki yazımda daha detaylı kod parçacıkları eklemeye çalışacağım, geri bildirim için teşekkürler.

Mertcan Ateş
Mertcan Ateş 04 Ağustos 2026

qr_code_scanner yerine mobile_scanner kullansak performans farkı olur mu? Bu aralar onu çok öneriyolar.

Ece Nur
Ece Nur 05 Ağustos 2026

Bence mobile_scanner kesinlikle daha stabil, ben geçtim çok daha hızlı çalışıyor.

Oğuzhan Vural
Oğuzhan Vural 05 Ağustos 2026

emülatörde çalışmıyor bu kodlar, illa fiziksel cihaz mı lazım? hata alıyorum sürekli.

Zeynep Kaya
Zeynep Kaya 06 Ağustos 2026

Evet, çoğu QR kütüphanesi emülatörün kamerasını doğrudan kullanamaz, fiziksel cihazla test etmenizi öneririm.

Zeynep Arslan
Zeynep Arslan 05 Ağustos 2026

Flutter'da QR okuma işlemini ilk defa yapacağım, rehber çok anlaşılır olmuş. Teşekkürler.

Furkan Şahin
Furkan Şahin 06 Ağustos 2026

karanlık mod desteği için ekstra bir işlem yapmamız gerek mi yoksa kütüphane kendi hallediyo mu?

Derya K.
Derya K. 06 Ağustos 2026

Genelde kütüphanenin üstündeki overlay'i kendin tasarladığın için senin ayarlaman gerekiyor, kütüphane sadece kareyi görüyor.

Melis Çelik
Melis Çelik 06 Ağustos 2026

Kodlar çalışıyo, elinize sağlık. Çok temiz anlatılmış.

Caner Tekin
Caner Tekin 07 Ağustos 2026

Yazılarınızı ilgiyle takip ediyorum, bir sonraki içerik ne zaman gelir? State management ile ilgili bir şeyler olsa süper olur.

Zeynep Kaya
Zeynep Kaya 07 Ağustos 2026

Öneri için teşekkürler, bir sonraki içerik planımda Provider veya Riverpod üzerine bir yazı var!

Yorum Yaz