GeriWhatsApp'tan yaz

Çorum · Flutter & Dart

Çorum Flutter mobil uygulama geliştirme

Çorum'da Flutter ile mobil uygulama geliştiriyorum: tek bir Dart kod tabanından hem iOS hem Android için çalışan, mağazaya yüklenmeye hazır ürünler. Flutter'ı seçmemin sebebi popüler olması değil; arayüzü kendi render motoruyla çizdiği için tasarımın iki platformda da birebir aynı görünmesi, tek kod tabanının iki ayrı native ekibe göre geliştirme süresini belirgin şekilde kısaltması ve Firebase ile hızlı bir backend kurulabilmesi. Şu anda Ajans Mikrofon bünyesinde Cedgo SuperApp adlı canlı bir Flutter ürününü geliştiriyorum; ayrıca kesenek_yoyo_player adında açık kaynak bir Flutter HLS video oynatıcı paketi yayımladım. Bu sayfada Flutter'ın ne olduğunu, hangi işler için doğru hangi işler için yanlış seçim olduğunu ve kullandığım mimariyi olabildiğince açık anlatıyorum.

Teknoloji
Flutter + Dart, tek kod tabanı
Backend
Firebase, REST ve GraphQL
Açık kaynak
kesenek_yoyo_player (HLS)
Çalışma
Çorum'da yüz yüze, Türkiye geneli uzaktan

Flutter nedir, tek kod tabanı pratikte ne demek?

Flutter, Google'ın geliştirdiği açık kaynak bir arayüz geliştirme kiti. Dart dilini kullanıyor ve en ayırt edici özelliği şu: ekrandaki her pikseli işletim sisteminin hazır bileşenlerine bırakmak yerine kendi render motoruyla kendisi çiziyor. Sonucu doğrudan hissediyorsunuz — tasarladığınız ekran iPhone'da da Android telefonda da aynı görünüyor, aynı ekranın iki cihazda farklı davranması sorunu büyük ölçüde ortadan kalkıyor.

Tek kod tabanı ise şu demek: iş mantığı, ekranlar, form doğrulamaları ve API çağrıları bir kez yazılıyor, iki platforma birden derleniyor. Bu, iki ayrı native uygulama yazdırmaya kıyasla hem geliştirme süresini hem sonraki her değişikliğin maliyetini düşürüyor. Kazanç asıl bakım aşamasında ortaya çıkıyor: bir özelliği güncellerken iki ayrı kod tabanında iki ayrı düzeltme yapmıyorsunuz.

Geliştirme sırasında hot reload sayesinde kod değişikliğini saniyeler içinde çalışan uygulamada görebiliyorum. Size yansıyan tarafı şu: çalışan sürümü telefonunuza kurup deneyebiliyorsunuz, ekran akışıyla ilgili yanlış anlaşılmalar aylar sonra değil aynı hafta ortaya çıkıyor.

Flutter hangi işler için doğru, hangileri için yanlış seçim?

Flutter her işin cevabı değil ve bunu baştan söylemeyi tercih ediyorum. Güçlü olduğu alan, arayüzü yoğun ama donanımla ilişkisi sınırlı uygulamalar: işletme ve katalog uygulamaları, sipariş ve rezervasyon akışları, üyelik sistemleri, gerçek zamanlı veri gösteren paneller ve markaya özel çizilmiş arayüzler. Çorum'da gelen taleplerin neredeyse tamamı bu tarafta kalıyor.

Uygun olmadığı işler de var. Ağır 3D grafik veya oyun geliştirmek istiyorsanız Flutter yanlış araç; bu iş için oyun motorları var. Platforma çok derin gömülmüş donanım entegrasyonları — özel kamera işleme hattı, ileri düzey Bluetooth cihaz protokolleri, artırılmış gerçeklik çerçeveleri — Flutter'da doğrudan çalışmıyor, native tarafa köprü yazmayı gerektiriyor; bu da Flutter'ın sağladığı avantajın bir kısmını götürüyor. Uygulama dosya boyutunun çok sıkı sınırlı olması gereken işlerde de uygun değil; kendi render motorunu içinde taşıdığı için boş bir Flutter uygulaması bile native karşılığından büyük başlıyor.

Projeyi konuşurken yaptığım ilk şey bu ayrımı yapmak. İşiniz ikinci gruba giriyorsa bunu ilk görüşmede söylüyorum; elimde Flutter var diye her işi Flutter'a sokmuyorum.

İş tipiFlutter uygun mu?Gerekçe
İşletme, sipariş ve rezervasyon uygulamalarıUygunForm, liste ve akış ağırlıklı; donanım bağımlılığı düşük.
İçerik, katalog ve üyelik uygulamalarıUygunAynı içerik iki platformda tek tasarımla sunuluyor.
Gerçek zamanlı veri ve canlı yayın akışlarıUygunFirebase ve akış tabanlı durum yönetimiyle çözülüyor.
Markaya özel, standart dışı arayüzlerUygunKendi render motoruyla çizdiği için tasarım kısıtı az.
Ağır 3D grafik ve oyunlarUygun değilBu işin doğru aracı oyun motorları.
Derin donanım ve platform entegrasyonlarıGenelde uygun değilNative köprü yazmayı gerektirir, avantajı azaltır.
Uygulama boyutunun çok küçük olması şart olan işlerUygun değilRender motoru pakete dahil olduğu için taban boyut yüksek.
Flutter'ın uygun olduğu ve olmadığı iş tipleri

Kullandığım stack ve mimari

Uygulamanın ilk sürümünü ayakta tutmak zor değil; asıl mesele altı ay sonra yeni bir modül eklenirken kodun dağılmaması. Bu yüzden proje kurulumuna standart bir iskeletle başlıyorum ve kararları baştan veriyorum.

Feature-first modüler klasör yapısı

Kodu teknik katmanlara göre değil özelliklere göre bölüyorum: cüzdan, sipariş, profil gibi her modül kendi ekranlarını, iş mantığını ve veri katmanını içinde taşıyor. Yeni modül eklenirken mevcutlara dokunulmuyor, bir modül kaldırılırken tek klasör siliniyor.

Durum yönetimi ve veri akışı

Durum yönetimini projenin büyüklüğüne göre seçiyorum; küçük bir uygulamaya kurumsal ölçekli katman yığını kurmuyorum. Ortak kural şu: ekran yalnızca kendisine verilen durumu çiziyor, veri akışı ayrı bir katmanda yönetiliyor.

Firebase servisleri

Kimlik doğrulama için Authentication, veri için Firestore, medya için Storage, bildirim için Cloud Messaging kullanıyorum. Küçük ve orta ölçekli işlerde sunucu kurup yönetmeye kıyasla hem hızlı hem öngörülebilir; ölçek gerektirdiğinde ayrı bir backend'e geçiş planını baştan konuşuyoruz.

REST ve GraphQL entegrasyonu

Çalışan bir sisteminiz varsa — muhasebe programı, stok yazılımı, mevcut paneliniz — uygulamayı sıfırdan bir veri modeline değil sizin API'nize bağlıyorum. Bağlantı katmanı ve hata yönetimi ayrı yazılıyor ki API tarafındaki değişiklik ekranları kırmasın.

Sürüm, ortam ve derleme akışı

Test ve canlı ortamlar ayrı yapılandırmalarla derleniyor; test sürümü canlı veritabanına yazmıyor. Yayın öncesi TestFlight ve Google Play iç test kanallarından dağıtım yapıyorum, böylece uygulamayı mağazaya çıkmadan kendi telefonunuzda deniyorsunuz.

Tasarımdan koda geçiş

Arayüzü Figma'da kuruyorum ve renk, tipografi, boşluk değerlerini tek bir tema katmanına bağlıyorum. Grafik tasarım geçmişim olduğu için bu adım ayrı bir devir teslim aşaması değil; marka rengi değiştiğinde otuz ekranı tek tek düzeltmek gerekmiyor.

Deneyim: canlı ürün ve açık kaynak paket

Flutter tarafındaki deneyimimin iki somut karşılığı var ve ikisi de dışarıdan incelenebilir durumda.

Birincisi Cedgo SuperApp: Ajans Mikrofon bünyesinde geliştirdiğim, iOS ve Android'de yayında olan bir ebeveyn süper uygulaması. Beş üzeri modülü tek uygulama içinde barındırıyor — cüzdan, Cedgo Live adlı canlı yayın modülü, atölye kayıtları ve çocuk gelişim takibi bunların başlıcaları. Bu ölçekte asıl zorluk özelliklerin tek tek yazılması değil, modüllerin birbirini kilitlemeden aynı uygulama içinde yaşaması. Modüler mimariyi de, canlı yayın akışlarının Flutter içinde sorunsuz oynatılmasını da, güvenli ödeme akışını da bu üründe uçtan uca kurdum. Uygulamadaki yapay zekâ destekli gelişim analizi modülünde ise mesele, yapay zekâyı sonradan yapıştırılan bir eklenti olarak değil mevcut veriden anlamlı çıktı üreten bir özellik olarak kurgulamaktı.

İkincisi kesenek_yoyo_player: Flutter için yazdığım açık kaynak bir HLS video oynatıcı kütüphanesi. Yayın akışlarında kullanılan .m3u8 formatını, master playlist okumasını ve kalite seçimini destekliyor. Bu paketi yazmamın sebebi Cedgo Live tarafında ihtiyaç duyduğum davranışı hazır çözümlerde bulamamış olmam; kodu GitHub üzerinde açık, incelemek isteyen bakabilir. Manifest V3 ile yazılmış m3u8-hunter adında bir Chrome eklentim de var. Kısacası akış tarafında kütüphane seviyesinde çalıştım, hazır paketleri bağlamakla yetinmedim.

Flutter'da performans: gerçekte neyi yavaşlatır?

Flutter uygulamaların yavaş olduğu yönündeki yaygın kanı, çoğunlukla çerçevenin değil kodun sonucudur. Yavaşlığın kaynağı neredeyse her zaman aynı birkaç yerden çıkıyor: veri değişmediği halde tekrar tekrar çizilen arayüz bileşenleri, binlerce satırı tembel yükleme yapmadan oluşturmaya çalışan listeler, telefona olduğu gibi indirilen büyük görseller ve her ekran açılışında yinelenen gereksiz ağ istekleri.

Bunların hepsi ölçülebilir sorunlar. Uygulamayı profil modunda derleyip Flutter DevTools ile hangi karenin neden geciktiğine bakıyorum; tahminle değil ölçümle çalışıyorum. Teslim öncesi geçtiğim kontroller şunlar:

  • Listelerin tembel yükleme ile çalışması, uzun listelerde sayfalama kurulması
  • Yeniden çizim alanının daraltılması, değişmeyen bileşenlerin sabitlenmesi
  • Görsellerin sunucu tarafında boyutlandırılması ve önbelleğe alınması
  • Ağ isteklerinin önbelleklenmesi ve aynı verinin tekrar tekrar çekilmemesi
  • Uygulamanın düşük donanımlı gerçek bir Android cihazda test edilmesi
  • İlk açılış süresinin ölçülmesi ve başlangıçta yapılan işin azaltılması
  • Yayın sürümünün profil modunda kare düşüşü açısından incelenmesi

Mevcut projeyi devralma ve teslim koşulları

Gelen taleplerin bir kısmı sıfırdan uygulama değil, yarım kalmış bir Flutter projesi oluyor. Bu işleri alıyorum ama önce koda bakıyorum. İnceleme sonunda iki şeyi net söylüyorum: mevcut kod üzerinden devam etmek mi yoksa belirli modülleri yeniden yazmak mı daha kısa sürer, ve projenin teknik borcu nedir. Bazen dürüst cevap yeniden yazmak oluyor, bazen de bir bağımlılık güncellemesiyle proje ayağa kalkıyor.

Teslim tarafında kural sade: kaynak kodun tamamı sizin oluyor, depo erişimi size devrediliyor, Firebase ve mağaza hesapları sizin adınıza açılıyor. Böylece benimle çalışmaya devam etmeseniz bile projeniz elinizde kalıyor. Süre tarafında kapsamı görmeden tarih vermiyorum; sınırlı kapsamlı bir ilk sürüm birkaç hafta, çok modüllü bir uygulama birkaç ay sürüyor.

Süreç nasıl işliyor?

  1. 01

    Keşif & netleştirme

    Problem, kullanıcı ve hedefi konuşup kapsamı netleştiriyorum.

  2. 02

    Tasarım & akış

    Wireframe, UI ve marka dili — Figma ile hızlı iterasyon.

  3. 03

    Geliştirme

    Flutter ile uçtan uca mobil ürün; Firebase ve API entegrasyonları.

  4. 04

    AI & optimizasyon

    Gerçek kullanım senaryolarına uygun akıllı özellikler ve performans.

  5. 05

    Teslim & iterasyon

    Canlıya alma, geri bildirim ve sürekli iyileştirme döngüsü.

Sık sorulan sorular

Flutter ile yapılan uygulamalar yavaş mı?

Hayır, doğru yazıldığında yavaş değil. Flutter kodu makine koduna derleniyor ve arayüzü kendi render motoruyla çiziyor; yavaşlık şikâyetlerinin kaynağı genelde çerçeve değil, gereksiz yeniden çizim, tembel yükleme yapmayan listeler ve optimize edilmemiş görseller oluyor. Bunlar Flutter DevTools ile ölçülebilen ve düzeltilebilen sorunlar. Ben de teslim öncesi uygulamayı düşük donanımlı gerçek bir cihazda test ediyorum.

Flutter ile yapılan uygulama native görünür mü?

Evet, kullanıcı farkı anlamıyor. Flutter arayüzü kendisi çizdiği için hem iOS hem Android'de aynı tasarımı verebiliyor, istenirse her platformun kendi görsel diline yakın bileşenler de kullanılabiliyor. Kullanıcıların fark ettiği şey teknoloji değil, akıcı geçişler ve tanıdık davranışlar oluyor. Zaten mağazalardaki birçok tanınmış uygulama Flutter ile geliştirildi.

Mevcut Flutter projemi devralır mısınız?

Evet, yarım kalmış veya bakımsız projeleri devralıyorum. Önce kodu inceleyip mevcut yapı üzerinden devam etmenin mi yoksa belirli modülleri yeniden yazmanın mı daha kısa süreceğini söylüyorum. İnceleme sonucunda kapsam, teknik borç ve tahmini süreyi yazılı olarak paylaşıyorum; kararı ondan sonra birlikte veriyoruz.

Flutter yerine React Native daha mı iyi olur?

İkisi de tek kod tabanından iki platforma çıkabilen sağlam çözümler; seçim ekibin uzmanlığına ve projeye bağlı. React Native platformun kendi arayüz bileşenlerini kullanıyor, Flutter ise arayüzü kendisi çiziyor — bu yüzden markaya özel ve iki platformda birebir aynı görünmesi istenen tasarımlarda Flutter'ı daha rahat buluyorum. Ben Flutter ile çalışıyorum; projeniz için Flutter yanlış seçimse bunu baştan söylerim.

Flutter uygulamaların dosya boyutu native'e göre büyük mü?

Evet, taban boyutu daha büyük çünkü uygulama kendi render motorunu içinde taşıyor. Pratikte bu, günümüz telefonlarında çoğu proje için sorun çıkarmıyor; yayın sürümünde kullanılmayan kod ayıklanıyor ve mimariye göre ayrı paketler üretilerek boyut düşürülebiliyor. Yalnızca uygulama boyutunun sıkı şekilde sınırlı olması gereken işlerde bu gerçek bir kısıt haline geliyor.

Flutter uygulamalar App Store ve Google Play'e kabul ediliyor mu?

Evet, Flutter ile geliştirilen uygulamalar her iki mağazada da normal şekilde yayımlanıyor. Mağaza incelemelerinde sorun çıkaran şey kullanılan teknoloji değil; eksik gizlilik politikası, hesap silme akışının bulunmaması veya izin açıklamalarının yetersiz olması gibi konular oluyor. Yayın sürecini ben yürütüyorum ve bu gereklilikleri geliştirme sırasında hallediyorum.

Uygulama fikrinizi teknik olarak konuşalım

Aklınızdaki uygulamayı anlatın; Flutter'ın bu iş için doğru seçim olup olmadığını, hangi modüllerin gerçekten gerektiğini ve yaklaşık ne kadar süreceğini ilk görüşmede net söylüyorum. Çorum içindeyseniz yüz yüze görüşebiliriz, Türkiye'nin başka bir şehrindeyseniz süreç uzaktan aynı şekilde yürüyor.

İlgili sayfalar

  • Mobil Uygulama Geliştirme

    Çorum'da mobil uygulama geliştirme: Flutter ile Android ve iOS uygulaması. Fikirden yayına süreç, süreyi etkileyen faktörler ve teslim sonrası bakım.

  • Android & iOS Uygulama

    Çorum'da Android ve iOS uygulama geliştirme: tek kod tabanı mı ayrı native mi, App Store ve Google Play süreçleri ve yayın öncesi hazırlık listesi.

  • Çorum Yazılımcı

    Hizmetlerin tamamı, çalıştığım sektörler ve sık sorulanlar tek sayfada.