Gemini CLI, Flutter projenizin kök dizininde gemini komutuyla başlar; proje dosyalarını okuyup Dart, widget ağacı, state yönetimi ve testler üzerinde değişiklik yapar. Ajanın Flutter işlerinde tutarlı kalması için proje köküne iyi bir GEMINI.md koymak ve her adımdan sonra flutter analyze ile flutter test çalıştırmak gerekir; temel kullanım için Gemini CLI sayfasına da göz atabilirsiniz. Daha geniş bir adım adım rehber için Gemini CLI nasıl kullanılır? Adım adım rehber yazısını inceleyebilirsiniz. Bu rehber, Flutter bilen bir geliştiricinin terminal ajanını güvenle kullanması için pratik akışı anlatır.
Neden Gemini CLI Flutter işine uygun
Flutter projeleri genellikle lib/ altında hem UI hem iş mantığını aynı dilde (Dart) barındırır. Gemini CLI bu bütünlüğü kullanarak bir widget değişikliğini Provider/Riverpod/Bloc katmanına kadar tek seferde yayabilir; örneğin bir model alanı eklediğinde hem model dosyasını hem UI’daki kullanımını hem de ilgili testi birlikte günceller. Dart’ın statik tipleri sayesinde flutter analyze hataları hızlıca yüzeye çıkar ve ajan hata mesajına göre kendini düzeltebilir; bu, dinamik dillerdeki ajan belirsizliğinden daha kontrollü bir döngü sunar.
Flutter’ın hot reload ve test altyapısı küçük adımlarla ilerleyen ajan modeline çok uygundur. Ajan bir widget’ta değişiklik yaptığında, flutter test tüm testleri saniyeler içinde koşar; böylece kod üretim kalitesi geri bildirim döngüsü kısalır. Ayrıca Flutter projelerinde widget, business logic ve platform kanalı kodları aynı repository’de olduğu için ajan tüm katmanları birlikte görebilir; bu, bağlam kaybını azaltır. Terminal ajanı, platform kanalları gibi dağınık dosyaları da proje bağlamında okuyabildiği için Android/iOS tarafındaki karşılıkları bulmada iyi bir başlangıçtır.
Flutter projesini ajan için hazırlama
Ajanın projeyi doğru anlaması için kök dizine GEMINI.md ekleyin. Dosya; commit’lenebilir, projeye özel komutları ve kuralları içermeli. Flutter projesinde mutlaka build, test ve lint komutlarını açıkça yazın; klasör yapısını ve state yönetimi tercihini de belirtin. Ajan bu dosyayı her görevin başında okur; talimatlar netleştikçe gereksiz sorular azalır ve ajan doğrudan işe odaklanır.
Aşağıdaki örnek, orta ölçekli bir Flutter uygulaması için işe yarar:
# GEMINI.md
## Komutlar
- Bağımlılıklar: `flutter pub get`
- Test: `flutter test`
- Lint: `flutter analyze`
- Debug build: `flutter build apk --debug`
- Format: `dart format lib test`
## Klasör düzeni
- `lib/features/<feature>/models`: veri sınıfları
- `lib/features/<feature>/providers`: Riverpod sağlayıcıları
- `lib/features/<feature>/screens`: ekran widget'ları
- `lib/shared/widgets`: ortak widget'lar
- `test/features/<feature>/`: test dosyaları
## Flutter kuralları
- State yönetimi için Riverpod kullan; `FutureProvider` async işlerde tercih edilir
- Widget'lar tek amaçlı olsun; bir build metodu 200 satırı geçmesin
- Renk, boyut ve padding gibi değerleri `ThemeData` içinde tanımla, magic number kullanma
- Platform kanallarında hata ve null yönetimi şart; `MethodChannel` adlarını sabit olarak yaz
- Widget testlerinde animasyon veya timer varsa `pumpAndSettle` yerine `tester.pump(Duration)` kullan
Bu dosyayı güncelledikçe ajanın davranışı da değişir; kurallar kısa ve ölçülebilir olmalı, genel cümlelerden kaçının. Örneğin “testleri yaz” yerine “her provider için birim testi, her ekran için bir widget testi ekle” demek daha işe yarar. Ayrıca analysis_options.yaml içindeki mevcut lint kurallarını da GEMINI.md’de özetlemek, ajanın flutter analyze çıktısındaki uyarıları önceden hesaba katmasını sağlar.
Çalışma döngüsü: planla, küçük adımlar, testleri koş, diff’i incele
Tek büyük istek yerine görevi üç-beş dosyayla sınırlı parçalara bölün. Önce plan isteyin, sonra planı adım adım uygulamasını isteyin; her adımdan sonra kendiniz flutter analyze ve flutter test çalıştırın. Ajan bittiğinde git diff ile değişiklikleri okuyun; Flutter’a özel build hatalarını, async context kullanımını ve platform dosyalarını ayrıca gözden geçirin.
Örnek Flutter görev promptları:
- ‘Riverpod ile
CartProvidersınıfını oluştur;CartItemmodeliniequatablekullanarak yaz, birim testinitest/features/cart/cart_provider_test.dartaltına ekle.’ - ‘
ProductListScreenwidget’ınıConsumerWidgetolarak güncelle; yükleme durumundaCircularProgressIndicator, hata durumundaSnackBargöster.’ - ‘Mevcut
loginbutonuna debounce ekle;TextFormFieldvalidasyonlarını Türkçe hata mesajlarıyla güncelle, test dosyasını da yaz.’ - ‘Bir platform kanal servisi yaz:
MethodChannel('com.example.app/battery')ile pil seviyesini Android/iOS’tan al, Dart tarafındaBatteryServicesınıfı ile soyutla.’ - ‘
flutter testçalıştır ve kırık testleri sırayla düzelt; her düzeltmeden sonra sadece ilgili testi koş.’
Prompta net dosya yolu ve beklenen testi vermek, ajanın Flutter projesinde dağılmasını önler. Eğer ajan kararsız kalırsa, “önce dosyanın mevcut halini göster, ardından değişiklik planını listele” diyerek süreci şeffaflaştırın. Daha etkili prompt kalıpları için Kodlama ajanları için prompt nasıl yazılır? rehberine göz atın.
İyi çalıştığı ve dikkat edilmesi gereken yerler
Ajan; widget refactor, model/provider ekleme, test yazma ve basit platform kanalı kodları gibi görevlerde hızlıdır. Buna karşın Flutter’a özgü bazı tuzaklarda dikkatli inceleme gerekir.
| Görev | Ajanın güçlü yönü | Yakın takip noktası |
|---|---|---|
| Widget refactor ve küçük UI değişiklikleri | Mevcut widget ağacını okur, temiz şekilde günceller | BuildContext async gap sonrası kullanımı; use_build_context_synchronously lint |
| Provider/Riverpod/Bloc sınıfları ve testleri | State geçişlerini tutarlı modeller | freezed, json_serializable gibi üretilen kodlar için build_runner çalıştırmayı atlayabilir |
| Platform kanalları (MethodChannel) | Dart, Kotlin ve Swift tarafındaki basit eşleşmeleri yazar | Channel adı tutarsızlığı, Android/iOS yapılandırma dosyalarına gereksiz dokunma |
| Widget testleri | Test iskeletini hızlı kurar | Animasyon/timer’larda pumpAndSettle kilitlenebilir; tester.pump(Duration) tercih edin |
Flutter’da en sık hata; ajanın platform kanallarında Android/iOS tarafını yazarken Gradle, Info.plist veya minimum SDK değerlerini değiştirmesidir. Bu dosyaları mutlaka diff’te okuyun; yalnızca Dart tarafından emin olun. Ayrıca ajan bazen BuildContext’i async bir fonksiyonun await’inden sonra kullanmaya çalışır; bu, lint uyarısıyla yakalanır ama runtime’da ciddi sorunlara yol açabilir. State yönetimi kütüphanelerinde dispose çağrılarını atlamak veya ref.watch ile ref.read karıştırmak da yaygındır. Bu yüzden her ajan çıktısında flutter analyze çalıştırmadan commit yapmayın.
Flutter’da test ve doğrulama
Ajanın yazdığı kodu kabul etmeden önce sıralı doğrulama yapın. Önce flutter analyze ile statik analiz hatalarına bakın; Dart’ın tip sistemi, ajanın gözden kaçırdığı null veya async context hatalarını yakalar. Ardından flutter test çalıştırın; hata varsa yalnızca ilgili testi çalıştırıp ajanın hata mesajını okumasını sağlayın. flutter test test/features/cart/cart_provider_test.dart gibi tek dosya testi, döngüyü hızlandırır. Widget testlerinde pump kullanımı ve animasyon süreleri konusunda net kural vermek ajanı yanlış pumpAndSettle varsayımlarından korur.
Platform kanallarını test ederken sahte MethodChannel handler’ı yazmak zordur; bu bölümde flutter test yerine ayrı bir entegrasyon testi dosyası isteyin ve TestWidgetsFlutterBinding kullanmasını belirtin. Altın (golden) testleri eklemek, ajanın UI değişikliklerini beklenmedik şekilde bozmasını engeller; bu tür testleri GEMINI.md’de zorunlu kılabilirsiniz. Ajanın ürettiği testleri asla körlemesine kabul etmeyin; testin gerçekten davranışı doğruladığını ve boş geçmediğini kontrol edin. Gerekirse ajanın yazdığı testi kendiniz çalıştırıp başarısız olacağı bir durumu simüle edin; bu, test kalitesini ölçmenin en hızlı yoludur.
Tek Flutter projesinde birden çok ajanı AgentVera ile çalıştırma
AgentVera; Gemini CLI dahil birçok terminal ajanını tek pencerede, her birini kendi gerçek terminal panelinde yan yana çalıştırır. Flutter projesinde biri UI refactor, diğeri Riverpod testleri, üçüncüsü platform kanalı üzerinde çalışırken her ajanı ayrı git worktree içinde çalıştırmak dosya çakışmalarını önler. Ajanın turu bittiğinde otomatik kod incelemesi yapan ikinci model, bulguları dosya:satır olarak verir; bu özellikle platform kanallarında Android/iOS tarafındaki hataları Flutter geliştiricisi için hızlıca yakalar. Ajan başına token bütçeleri de proje boyunca kullanımı kontrol altında tutar; böylece büyük Flutter görevleri gözlemlenebilir kalır.
Özet
Gemini CLI’yı Flutter projesinde etkin kullanmak için net bir GEMINI.md, küçük adımlı görevler ve her değişiklikten sonra flutter analyze ile flutter test doğrulaması yeterlidir. Platform dosyalarını diff’te okuyun, testleri kendiniz de koşun ve ajanın önerdiği değişiklikleri bağlam içinde değerlendirin. Bu disiplinle ajan, Flutter geliştirme hızını artırır; karmaşık platform entegrasyonlarında bile gözden geçirme alışkanlığıyla güvenli kalırsınız.