Blog'a dön
•
ByteGurus

Flutter ile Çapraz Platform Mobil Uygulama Geliştirme

Flutter ile tek kod tabanından iOS ve Android uygulaması: performans, hot reload, durum yönetimi, kullanım alanları, sınırlar ve iyi uygulamalar.

Flutter Mobil Çapraz Platform Dart

Aynı uygulamayı iOS ve Android’de yayınlamak genellikle iki kod tabanı, iki ekip ve iki ayrı sürüm takvimi demek. Google’ın açık kaynak arayüz çerçevesi Flutter bunu tek bir Dart kod tabanıyla değiştirir; uygulama her platform için yerel koda derlenir. Bu yazı bu ödünleşimin ne zaman karşılığını verdiğini, ne zaman vermediğini anlatıyor.

Flutter neyi çözer

Tek kod tabanıyla bir hata düzeltmesi ya da yeni özellik iOS ve Android’e aynı sürümde ulaşır; koordine edilecek tek bir yayın döngüsü vardır. Arayüz iki platformda tutarlı görünür, test ve tasarım işi tekrarlanmaz.

Teknik avantajlar

Yerele yakın performans: Flutter uygulamaları yayın sürümünde önceden (AOT) ARM koduna derlenir. Arayüzü platformun bileşenleriyle değil kendi çizim motoruyla (Impeller) çizdiği için animasyonlar akıcıdır ve iki platformda aynı davranır.

Hot reload: geliştirici kodu değiştirdiğinde değişiklik, uygulamanın durumunu kaybetmeden saniyeler içinde ekrana gelir. Arayüz üzerinde hızlı deneme yapmayı kolaylaştırır.

Bileşen (widget) tabanlı yapı: karmaşık ekranlar küçük, yeniden kullanılabilir bileşenlerden kurulur.

Küçük bir örnek

import 'package:flutter/material.dart';

void main() => runApp(const MaterialApp(home: CounterPage()));

class CounterPage extends StatefulWidget {
  const CounterPage({super.key});

  @override
  State<CounterPage> createState() => _CounterPageState();
}

class _CounterPageState extends State<CounterPage> {
  int _count = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Sayaç')),
      body: Center(child: Text('$_count', style: Theme.of(context).textTheme.displayMedium)),
      floatingActionButton: FloatingActionButton(
        onPressed: () => setState(() => _count++),
        tooltip: 'Artır',
        child: const Icon(Icons.add),
      ),
    );
  }
}

Durum yönetimi

Küçük ekranlarda setState yeterlidir. Uygulama büyüdükçe durumu ekranlardan ayırmak gerekir; yaygın seçenekler Riverpod, Bloc ve Provider’dır:

// Riverpod ile basit bir durum sağlayıcı
final counterProvider = StateProvider<int>((ref) => 0);

class CounterText extends ConsumerWidget {
  const CounterText({super.key});

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final count = ref.watch(counterProvider);
    return Text('$count');
  }
}

Hangisini seçtiğinizden çok, ekip içinde tek bir yaklaşımda anlaşmanız önemlidir.

Kullanım alanları

Finans uygulamaları: güvenlik ve tutarlı deneyim gerektiren uygulamalarda yerel koda derlenmesi ve platform API’lerine erişebilmesi işe yarar. Google’ın kendi ödeme uygulaması Google Pay de Flutter ile yeniden yazıldı.

Kurumsal uygulamalar: tek bir ekibin birden fazla platformu sürdürmesi, iç uygulamalarda bakım yükünü azaltır.

Yeni ürünler: iki platformda aynı anda çıkmak, fikri doğrulama süresini kısaltır.

Bulut ve CI/CD

Flutter uygulamaları için CI/CD hattı kurmak, iki platformu ayrı ayrı yönetmekten daha basittir: aynı hat testleri çalıştırır, iki platform için derler ve mağazalara gönderir. iOS derlemesi için macOS çalıştırıcı gerekir; imzalama sertifikaları ve mağaza anahtarları sır yöneticisinde tutulmalıdır.

Sınırlar

Platforma özgü özellikler: bazı yerel özellikler (yeni bir iOS API’si, özel bir donanım) için yine yerel kod gerekir. Flutter bunu platform kanallarıyla Swift ya da Kotlin koduna bağlanarak çözer.

Uygulama boyutu: çizim motoru uygulamayla birlikte geldiği için ilk boyut yerel uygulamadan büyük olabilir.

Platform hissi: Flutter arayüzü kendisi çizdiği için platform güncellemelerindeki görsel değişiklikler kendiliğinden gelmez; iki platformda tamamen yerel görünüm isteniyorsa ek iş gerekir.

Erişilebilirlik: ekran okuyucu desteği vardır ama anlamsal etiketleri (Semantics, tooltip) geliştiricinin eklemesi gerekir.

İyi uygulamalar

  1. Durum yönetimi yaklaşımını baştan seçin ve tek tutun
  2. İş mantığını arayüz bileşenlerinden ayırın
  3. Birim, bileşen ve entegrasyon testlerini hatta koyun
  4. Platform kanallarını küçük ve iyi belgelenmiş tutun
  5. Erişilebilirlik etiketlerini en baştan ekleyin
  6. Paket bağımlılıklarını düzenli güncelleyin ve bakımı süren paketleri seçin

Sonuç

Flutter, iOS ve Android’i tek kod tabanıyla taşımak isteyen ekipler için olgun bir seçenek. Ortak arayüz, tek yayın döngüsü ve yerel koda derlenen performans büyük kazanç; platforma çok özgü özellikler ve uygulama boyutu ise hesaba katılması gereken bedel.

Mobil uygulamanız için doğru yaklaşımı birlikte değerlendirmek isterseniz bize yazın.

B

ByteGurus

Yazar

Tüm yazılara dön
Başlamaya hazır mısınız?

Projenize başlamaya hazır mısınız?

Fikirlerinizi hayata geçirmek için size nasıl yardımcı olabileceğimizi konuşalım.