Gereksinimler ve Ön Hazırlık
Flutter ile geliştirmeye başlamadan önce sisteminizde gerekli araçların kurulu olduğundan emin olmalısınız. 2026 standartlarına göre en güncel Flutter SDK (Yazılım Geliştirme Kiti) sürümünü kullanmanız, güvenlik ve performans güncellemelerinden yararlanmanızı sağlar.
- Flutter SDK: Resmi kanallardan indirilmiş en güncel kararlı sürüm.
- IDE: VS Code veya Android Studio (Flutter ve Dart eklentileri kurulu olmalı).
- Mobil Emülatör: Geliştirme aşamasında gerçek cihaz yerine kullanabileceğiniz sanal cihazlar.
- Dart Bilgisi: Flutter'ın temelini oluşturan nesne yönelimli programlama dili.
Kurulumu doğrulamak için terminalinize flutter doctor komutunu yazın. Tüm işaretlerin yeşil olduğundan emin olun; bu, geliştirme ortamınızın hazır olduğunu gösterir.
Temel Bir Uygulama Yapısı Oluşturma
Flutter'da her şey bir "Widget"tır. Uygulamanızın iskeletini oluştururken MaterialApp yapısını kullanmak, Google'ın Material Design standartlarına uygun bir arayüz sağlar. Aşağıdaki kod bloğu, basit bir "Merhaba Dünya" uygulamasının temel yapısını göstermektedir.
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('İlk Flutter Uygulamam')),
body: const Center(child: Text('Merhaba Dünya!')),
),
);
}
}
Bu kod, uygulamanın giriş noktası olan main fonksiyonunu ve uygulamanın kök widget'ı olan MyApp sınıfını tanımlar. Scaffold widget'ı ise standart bir sayfa düzeni (AppBar, Body, FloatingActionButton) sağlar.
State Management (Durum Yönetimi) ile Dinamik İçerik
Mobil uygulamalarda verinin değişmesi, arayüzün de güncellenmesini gerektirir. Flutter'da StatefulWidget kullanarak kullanıcı etkileşimlerine yanıt veren dinamik içerikler oluşturabilirsiniz. Bir sayaç uygulaması üzerinden durum yönetimini inceleyelim.
class CounterApp extends StatefulWidget {
const CounterApp({super.key});
@override
State createState() => _CounterAppState();
}
class _CounterAppState extends State {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('Sayaç: $_counter'),
ElevatedButton(onPressed: _incrementCounter, child: const Text('Artır')),
],
);
}
}
Burada setState metodu kritik öneme sahiptir. Bu metod, Flutter'a "değişkenler değişti, arayüzü yeniden çiz" komutunu verir. Aksi takdirde, değişkenin değeri değişse bile ekranda bir güncelleme göremezsiniz.
API Entegrasyonu: Veri Çekme İşlemleri
Gerçek dünya uygulamaları genellikle bir sunucudan veri çeker. HTTP istekleri için http paketini kullanırız. Güvenli veri transferi için her zaman HTTPS protokolünü tercih etmelisiniz.
import 'package:http/http.dart' as http;
import 'dart:convert';
Future fetchUserData() async {
final response = await http.get(Uri.parse('https://api.ornek.com/kullanici/1'));
if (response.statusCode == 200) {
return jsonDecode(response.body);
} else {
throw Exception('Veri çekilemedi');
}
}
Bu fonksiyon, asenkron bir yapı olan Future kullanarak ağ trafiğini bloklamadan veri çeker. jsonDecode ile gelen JSON verisini Dart nesnesine dönüştürürüz.
Veri Güvenliği ve Yerel Depolama
Kullanıcı verilerini yerel cihazda saklarken güvenliğe dikkat etmelisiniz. Hassas veriler (token, şifre vb.) için flutter_secure_storage paketini kullanmak, verilerin şifrelenerek saklanmasını sağlar.
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
final storage = const FlutterSecureStorage();
Future saveToken(String token) async {
await storage.write(key: 'jwt_token', value: token);
}
Future getToken() async {
return await storage.read(key: 'jwt_token');
}
Asla token veya şifre gibi hassas bilgileri SharedPreferences gibi şifrelenmemiş alanlarda saklamayın. Bu, uygulamanız için ciddi bir güvenlik açığı oluşturur.
Flutter Geliştirme Yöntemleri Karşılaştırması
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| StatefulWidget | Basit, hızlı prototipleme | Büyük projelerde karmaşıklaşır |
| Provider/Riverpod | Ölçeklenebilir, temiz mimari | Öğrenme eğrisi daha dik |
| Bloc | Kurumsal düzeyde yönetim | Çok fazla boilerplate kod |
Sıkça Sorulan Sorular
Flutter öğrenmek için ne kadar Dart bilmeliyim?
Temel OOP (Nesne Yönelimli Programlama) prensiplerini, asenkron programlamayı (Future, Stream) ve koleksiyon yapılarını bilmeniz yeterlidir.
Flutter uygulamaları yerel uygulamalar kadar hızlı mı?
Evet, Flutter doğrudan GPU ile etkileşime giren kendi render motorunu kullandığı için yerel uygulama performansına çok yakındır.
Uygulamamı nasıl yayınlarım?
Android için AAB (Android App Bundle), iOS için ise Xcode üzerinden IPA dosyası oluşturarak ilgili mağazalara yüklersiniz.
State yönetimi için en iyi kütüphane hangisidir?
Orta ölçekli projeler için Riverpod, kurumsal ve büyük ölçekli projeler için ise Bloc mimarisi 2026 standartlarında en çok tercih edilenlerdir.
Güvenlik için nelere dikkat etmeliyim?
Veri iletiminde HTTPS, yerel depolamada şifreli kütüphaneler ve API anahtarlarını kod içinde değil, çevresel değişkenlerde (environment variables) saklamalısınız.
Kritik Güvenlik Uyarısı: Uygulamanızda kullandığınız tüm API anahtarlarını ve gizli servis bilgilerini asla doğrudan kaynak kod içerisinde "hard-coded" olarak bırakmayın. Üretim ortamına (production) çıkmadan önce bu bilgileri güvenli bir yapılandırma dosyası veya uzaktan konfigürasyon servisi üzerinden yönetin.
Uygulama Performansını Optimize Etme Stratejileri
Flutter uygulamalarınızın akıcı bir kullanıcı deneyimi sunması için 60 FPS (veya destekleyen cihazlarda 120 FPS) değerini korumak kritiktir. Performans darboğazlarını tespit etmek ve gidermek için aşağıdaki yöntemleri uygulayabilirsiniz.
Widget Ağacı Optimizasyonu
Gereksiz yeniden oluşturmaları (rebuilds) engellemek, uygulamanızın bellek tüketimini doğrudan azaltır. const anahtar kelimesini kullanmak, Flutter'ın bu widget'ları derleme zamanında sabit olarak işaretlemesini sağlar ve çalışma zamanında yeniden oluşturulmalarını engeller.
// Yanlış kullanım: Her rebuild'de yeniden oluşturulur
Text('Merhaba Dünya')
// Doğru kullanım: Sabit widget olarak işaretlenir
const Text('Merhaba Dünya')
Görüntü ve Varlık Yönetimi
Büyük boyutlu görseller, uygulamanın açılış süresini ve bellek kullanımını olumsuz etkiler. cached_network_image gibi kütüphaneler kullanarak ağdan gelen görselleri önbelleğe almalı ve mümkünse WebP gibi sıkıştırılmış formatlar tercih etmelisiniz.
Uygulama Test Süreçleri ve Kalite Güvencesi
Profesyonel bir mobil uygulama geliştirme sürecinde, kodun kararlılığını sağlamak için üç katmanlı bir test stratejisi izlenmelidir: Birim testleri, widget testleri ve entegrasyon testleri.
Birim (Unit) Testleri ile İş Mantığını Doğrulama
Uygulamanızdaki yardımcı fonksiyonların veya veri modellerinin doğru çalıştığından emin olmak için test paketini kullanın. Aşağıdaki örnek, basit bir matematiksel işlemin doğrulanmasını gösterir:
import 'package:test/test.dart';
int toplamaIslemi(int a, int b) => a + b;
void main() {
test('İki sayının toplamı doğru hesaplanmalı', () {
expect(toplamaIslemi(2, 3), 5);
});
}
Widget Testleri ile Arayüz Kontrolü
Widget testleri, kullanıcı arayüzünün beklenen şekilde render edilip edilmediğini kontrol eder. tester.pumpWidget komutu ile bir widget'ı sanal bir ortamda oluşturabilir ve kullanıcı etkileşimlerini simüle edebilirsiniz.
- Golden Tests: Arayüzün görsel olarak değişip değişmediğini kontrol etmek için "golden" dosyaları oluşturun.
- Integration Tests: Gerçek cihaz veya emülatör üzerinde uçtan uca kullanıcı senaryolarını test edin.
İpucu: Test kapsamınızı (code coverage) artırmak, gelecekte yapacağınız refactoring işlemlerinde hataları erkenden yakalamanızı sağlar. flutter test --coverage komutu ile testlerinizin hangi oranda kod kapsadığını raporlayabilirsiniz.
Sonuç
Flutter ile mobil uygulama geliştirme süreci, doğru mimariyi seçmek ve güvenlik standartlarına uymakla başlar. Bu rehberde öğrendiğiniz temel yapı taşları, profesyonel seviyeye ulaşmanız için gerekli olan temel disiplini oluşturur. Bir sonraki adım olarak, "Clean Architecture" (Temiz Mimari) prensiplerini inceleyerek projelerinizi daha sürdürülebilir hale getirebilirsiniz. Bol kodlu günler dilerim.


Yorumlar (0)
Yorum Yaz