Claude Code, Flutter projenizin kök dizininde terminalde claude komutuyla başlar; projedeki CLAUDE.md dosyasını okur ve flutter pub get, flutter analyze, flutter test gibi komutları sizinle birlikte çalıştırır. Flutter’ın widget ağacı, state management katmanları ve platform kanalları hakkında bağlam verdiğinizde, ajan yalnızca kod yazmaz; bozulan testleri, lint hatalarını ve native taraf eksiklerini de düzeltmeye çalışır. Başlangıç için Claude Code rehberine bakabilirsiniz.
Neden Claude Code Flutter işine uygun?
Flutter projeleri hem Dart hem de native katmanlardan oluşur; Claude Code, terminale erişimi sayesinde iki tarafı aynı oturumda denetleyebilir. Dart’ın statik tipleri ve widget ağacının okunabilir yapısı, ajana dosyalar arasındaki ilişkiyi izleme imkânı verir. Örneğin bir ConsumerWidget içinde ref.watch ile okunan provider’ın nerede tanımlandığını bulup değişikliği tek seferde uygulayabilir. Ayrıca flutter test ve flutter analyze çıktılarını kendi kendine yorumlayıp düzeltebilir; bu, uzun derleme ve test döngülerinde size zaman kazandırır. Platform kanallarında ise Dart tarafındaki MethodChannel ile Kotlin veya Swift tarafındaki karşılığını ilişkilendirebilir, ancak native kod incelemesini son adımda siz yapmalısınız.
Ajan, Flutter’ın widget hiyerarşisini anlamakta başarılıdır; örneğin bir ChangeNotifierProvider üzerinden güncellenen ürün kartı widget’ında context.watch çağrısının doğru yerde olup olmadığını kontrol edip eksik dispose çağrılarını tespit edebilir. json_serializable veya freezed ile üretilen modellerde, generated dosyaları analiz edip yeni alanlar için güncelleme planı çıkarabilir. Ayrıca test dosyalarındaki Finder eşleşmelerini ve pump sürelerini düzelterek widget testlerinin kararlılığını artırabilir.
Projeyi ajan için hazırlama ve CLAUDE.md
Claude Code, proje kökünde CLAUDE.md varsa onu talimat olarak okur. Flutter projenizde komutlar, klasör kuralları, state management tercihi ve platform kanalı kalıpları net olmalı. Aşağıdaki örnek, küçük bir Flutter uygulaması için yeterli bir başlangıçtır:
# CLAUDE.md
## Komutlar
- Bağımlılıkları yükle: flutter pub get
- Lint ve analiz: flutter analyze
- Testleri çalıştır: flutter test
- Format kontrolü: dart format --set-exit-if-changed lib test
- Debug APK: flutter build apk --debug
## Klasör kuralları
- lib/features/<feature>/presentation, domain, data ayrımını koru.
- lib/core içinde yalnızca paylaşılan widget, tema ve yardımcılar bulunur.
- test/ altında her dosya için karşılık gelen widget veya unit testi olmalı.
## Flutter'a özel kurallar
- State management için Riverpod kullan; servisleri Provider ile enjekte et.
- build metodu içinde yan etki oluşturma; ref.read yerine widget dışında ref.listen tercih et.
- Platform kanallarında MethodChannel adlarını sabitlerde tut; hata mesajlarını Dart tarafında sarmala.
- Kod üretimi gereken paketler için build_runner çalıştır; generated dosyaları elle düzenleme.
Bu dosyayı her komut değişikliğinde güncelleyin; örneğin build_runner kullanıyorsanız ilgili komutu ekleyin. Ajan, analysis_options.yaml içindeki linter kurallarını da okur; yine de kritik bağımlılık değişikliklerini diff’te inceleyin. CLAUDE.md’yi ayrıca platform bazlı klasör notlarıyla genişletebilirsiniz: android/ ve ios/ altında yalnızca platforma özel kod bulunur, Dart tarafında her zaman null-safe kontroller ve hata sarmalama yapılır. Eğer fvm veya asdf ile Flutter sürümü yönetiyorsanız komutları ona göre yazın; ajan varsayılan flutter komutunu kullanırsa yanlış SDK ile çalışabilir. Ayrıca CI’da kullanılan betikleri de buraya ekleyin; ajan böylece yerel ve CI arasındaki farkı bilir ve aynı komutları çalıştırabilir.
Çalışma döngüsü: plan, küçük adımlar, testler ve diff
Flutter’da büyük bir widget refactor’ünü tek seferde istemek yerine ajanı küçük adımlara yönlendirin. Önce mevcut kodu okutup plan çıkarmasını isteyin; plan modu rehberinden detaylara ulaşabilirsiniz. Ardından her değişiklikten sonra flutter analyze ve flutter test çalıştırmasını, son olarak da git diff özeti vermesini isteyin. Bu döngü, Flutter’ın hızlı geri bildirim döngüsünü ajana devrederken kontrolü sizde tutar.
- Mevcut giriş akışını incele;
TextFormFielddoğrulamalarınıflutter analyzebozmayacak şekilde düzelt, eksikdisposeçağrılarını kapat ve ilgili widget testini güncelle. - Riverpod ile
AsyncNotifiertabanlı bir ürün listesi state’i yaz; loading, error ve data durumlarını ayrı widget’larla göster; mevcutProductRepository’yiProviderüzerinden enjekte et. - Batarya seviyesini okuyan bir platform kanalı oluştur; Android ve iOS native kodunu ekle, Dart tarafında
MethodChannelve birim testi yaz. - Başarısız golden testin nedenini
flutter testçıktısından incele; padding veya renk değişikliği kaynaklıysa widget değişikliğini onaylatmadan golden’ı güncelleme. pubspec.yamliçindeki bağımlılıkların hangi sürümlerinde breaking değişiklik olduğunu özetle;flutter analyzegeçecek şekilde geçiş planı çıkar.- Mockito ile bir Repository mock’u oluştur ve mevcut widget testinin bağımlılıklarını bu mock ile izole et; testin kararlılığını artırmak için async boşluklarını
pumpAndSettleile yönet.
Plan modunu aktif kullanın; ajan önce değişiklik yapılacak dosyaları ve beklenen sonuçları listelesin. Örneğin bir form validasyonu işinde TextFormField widget’larını değiştirmeden önce input formatter’ları listelemesini isteyin. Ajan her adımda flutter analyze çıktısını özetleyip gerekli düzeltmeleri yapsın; siz de git diff --stat ile genel değişiklik boyutunu kontrol edin. Her istemin sonunda ajanın çalıştırdığı komutları ve değişen dosyaları gözden geçirin; özellikle pubspec.yaml, AndroidManifest.xml, Info.plist ve generated dosyaları onaylamadan geçmeyin. Ajan flutter test çıktısındaki stack trace’i yorumlayabilir; başarısız widget testinde hangi Finder’ın eşleşmediğini söyleyebilir. Yine de testin neden kırıldığını anlamak için diff’i okumanız gerekir; bazen testi gereksiz yere değiştirerek sorunu maskeleyebilir.
İyi gittiği işler ve dikkat edilmesi gerekenler
Claude Code Flutter’da özellikle şu işlerde iyi çalışır: tekrar eden widget’ları çıkarma, StatefulWidget’tan Riverpod veya Bloc yapısına taşıma, json_serializable veya freezed modellerini güncelleme, mockito ile test yazma, flutter analyze hatalarını temizleme. Ayrıca TextEditingController gibi controller’ların yaşam döngüsünü düzenlemek, ThemeData güncellemelerini toplu uygulamak ve platform kanalı şablonları oluşturmak gibi görevlerde de hız kazandırır.
Buna karşılık Flutter’a özgü bazı tuzaklara dikkat edin: ajan bazen güncel olmayan bir widget API’si hayal edebilir; örneğin RaisedButton yerine ElevatedButton önerebilir. build metodu içinde ref.read gibi yan etkiler önerebilir veya async metotlarda context kullanımını mounted kontrolü olmadan yazabilir. Generated dosyaları elle düzenleyebilir; pubspec.yaml’a gereksiz paket ekleyebilir veya mevcut bir paketin sürümünü yanlış yükseltebilir. Platform kanalı işlerinde Android tarafını ekleyip iOS tarafını atlayabilir veya gerekli izinleri AndroidManifest.xml ile Info.plist’e yazmayı unutabilir. Ayrıca widget testlerini yalnızca mutlu yola göre yazıp async gap veya BuildContext kullanımını gözden kaçırabilir. Fvm veya Melos gibi araçlar kullanıyorsanız ilgili komutları CLAUDE.md’ye yazmalısınız; aksi halde ajan global Flutter SDK ile çalışıp projenin pinlenmiş sürümünü atlayabilir. State management konusunda Riverpod veya Bloc arasında karışıklık yaşayabilir; CLAUDE.md’de net bir yönerge yoksa her iki kütüphaneden parçalar önerebilir.
Test ve doğrulama
Claude Code’a testleri çalıştırmayı alışkanlık haline getirin; ancak hangi komutun neyi doğruladığını bilin. Aşağıdaki tablo Flutter projesindeki temel kontrolleri özetler:
| Kontrol | Komut | Neye bakar |
|---|---|---|
| Statik analiz | flutter analyze | Bozuk importlar, yanlış API kullanımı, null-safety |
| Birim ve widget testleri | flutter test | Provider/Riverpod state geçişleri, widget davranışı |
| Format | dart format --set-exit-if-changed lib test | Diff gürültüsü ve stil tutarlılığı |
| Native derleme | flutter build apk --debug | Android manifest, Gradle ve platform kanalı hataları |
Testleri çalıştırırken yalnızca başarılı olmasına değil, hangi dosyaların değiştiğine de bakın. Özellikle golden testlerde ajanın küçük bir padding değişikliğiyle onlarca golden’ı güncellemesi istenmeyen bir diff üretebilir. flutter test --update-goldens çalıştırmadan önce ajanın değişiklik özetini isteyin. Unit testlerde ajan bazen ProviderScope sarmalayıcısını unutabilir veya TestWidgetsFlutterBinding’i yanlış başlatabilir; bu hataları test çıktısından yakalamak mümkündür. flutter test --coverage ile kapsama raporu alıp düşük örtülen dosyaları ajanla birlikte inceleyin. Platform kanal testleri Dart tarafında TestDefaultBinaryMessenger ile mock’lanabilir; native taraf implementasyonunu ajanın yazıp yazmadığını kontrol edin.
Native tarafa dokunan platform kanalı işlerinde flutter build apk --debug veya iOS simülatör derlemesi ile doğrulama yapın; yalnızca Dart testleri native hataları yakalamaz. Ayrıca entegrasyon testleri veya flutter drive çalıştırıyorsanız, CLAUDE.md’de bu komutları belirtin; ajan aksi halde yalnızca birim ve widget testlerine odaklanır. Daha kapsamlı kontrol listesi için pratikler rehberine başvurabilirsiniz.
Birden fazla ajanı tek Flutter projesinde çalıştırma
Tek Flutter projesinde birden fazla Claude Code örneğini paralel çalıştırmak için AgentVera kullanışlıdır; her ajan kendi git worktree’sinde çalıştığı için aynı anda pubspec.yaml veya widget dosyalarını ezmez. Ajan turu bitince ikinci bir model otomatik kod incelemesi yapar; bulgular file:line bağlantılarıyla platform kanalı ve state yönetimi hatalarını hızlı gösterir. Checkpoint’ler yanlış bir widget refactor’ünü tek tıkla geri almayı sağlar; token bütçeleri de uzun test ve analiz döngülerinin kontrolden çıkmasını engeller. Bu yaklaşımın detaylarına çoklu ajan rehberinden ulaşabilirsiniz.
Özet
Claude Code’u Flutter projesinde etkili kullanmanın yolu net bir CLAUDE.md, küçük adımlı plan döngüsü ve her değişiklikten sonra test/analiz doğrulamasıdır. Ajanın güçlü olduğu widget refactor’leri ve test yazımı gibi alanlarda hız kazanır; platform kanalları ve generated dosyalar gibi konularda incelemeyi siz yapın. Birden fazla işi paralelleştirirken ajanları ayrı worktree’lerde koşturmak çakışmaları önler ve Flutter projesinin kararlılığını korur.