GitHub Copilot CLI’yi Flutter projesinde doğrudan proje klasöründe copilot komutuyla başlatarak widget, state yönetimi, test ve platform kanalı işlerini hızlandırabilirsiniz. Ajan, proje kökündeki .github/copilot-instructions.md veya AGENTS.md dosyasından talimatları okur; bu yüzden Flutter’a özel kuralları önceden yazmak kritik. Bu rehberde pratik bir çalışma düzeni ve Flutter’a özgü tuzaklar ele alınıyor.
Flutter işleri için neden GitHub Copilot CLI
Klasik sohbet araçlarının aksine GitHub Copilot CLI, proje klasöründe gerçek terminal komutlarını yürütebilir. Flutter projesinde pubspec.yaml, analysis_options.yaml, mevcut widget ağacı ve test dosyalarını okuyarak bağlam oluşturur. Riverpod, Bloc veya Provider ile yazılmış bir projede yeni bir ekran eklerken mevcut deseni takip etmesini isteyebilirsiniz; ajan dosyaları değiştirir, flutter test çalıştırır ve çıktıyı özetler. dart analyze ile tip hatalarını yakalamak da ajana devredilebilir. Flutter’ın güçlü tip sistemi ve widget test altyapısı, ajanın küçük adımlarla doğrulanabilir işler yapmasına uygundur.
Özellikle kod üretimi kullanan projelerde (freezed, json_serializable, riverpod_generator) ajan build_runner komutlarını çalıştırabilir; ama elle .g.dart düzenlememesi talimatta belirtilmelidir. Ajan, flutter test --coverage ile kapsama oranı da raporlayabilir. Statik analiz sonuçlarını özetleyip hedef dosyaları düzeltebilir. Flutter’ın büyük widget ağaçları ve çok katmanlı state mimarisi, ajanın küçük ve doğrulanabilir adımlar atmasına olanak tanır; yeter ki proje talimatları kesin olsun.
Projeyi ajana hazırlamak
GitHub Copilot CLI, repo kökünde .github/copilot-instructions.md veya AGENTS.md dosyasını arar. Bu dosyaya Flutter projesine özel komutları, klasör kurallarını ve state yönetimi tercihini yazın. Genel dosya yapısı için CLAUDE.md nasıl yazılır? AGENTS.md ve GEMINI.md rehberi iyi bir başlangıçtır; aşağıdaki örnek Flutter’a odaklı bir sürümdür.
# Flutter proje talimatları
## Komutlar
- Bağımlılıkları kur: `flutter pub get`
- Statik analiz: `flutter analyze`
- Test: `flutter test`
- Format: `dart format .`
- Debug APK: `flutter build apk --debug`
## Klasör düzeni
- `lib/features/<feature>/presentation`: widget'lar ve ekranlar
- `lib/features/<feature>/application`: state yönetimi (Riverpod/Bloc/Provider)
- `lib/features/<feature>/domain`: modeller ve saf Dart mantığı
- `lib/core`: tema, network, platform kanalları, yardımcılar
- `test/features/<feature>`: testler aynı yapıyı takip eder
## Flutter'a özel kurallar
- State yönetimi olarak yalnızca mevcut deseni kullan; yeni paket ekleme.
- `BuildContext`'i async işlemden sonra `if (!mounted) return;` ile kontrol et.
- Mümkün olan her widget'ta `const` constructor kullan; renkleri doğrudan yazma, `Theme.of(context)` kullan.
- Platform kanal kodları yalnızca `lib/core/platform/` altında olmalı; widget içinde `MethodChannel` çağırma.
- Widget testlerinde gerçek HTTP, veritabanı veya platform kanalı kullanma; mock/ fake kullan.
- Eklenen her public API için `dart doc` yorumu yaz.
Talimat dosyası kısa ve emredici olmalı; gereksiz açıklamalar ajanın dikkatini dağıtır. Flutter projelerinde özellikle state yönetimi deseni, klasör düzeni ve kod üretimi kuralları ajanın mevcut mimariye uyumunu artırır. analysis_options.yaml dosyasındaki lint kurallarına uymasını da açıkça belirtin. Ajan, repo dışındaki .github/copilot-instructions.md yerine repo kökündeki dosyayı okur; bu yüzden dosyayı sürümleme sisteminde tutun. AGENTS.md kullanıyorsanız aynı içeriği oraya koyabilirsiniz; birden fazla ajanla çalışacaksanız kod haritası yaklaşımı da faydalı olur.
Çalışma düzeni: planla, küçük adımlar, testleri çalıştır, diff’i gözden geçir
Ajanla çalışırken her göreve plan isteyerek başlayın. Örneğin GitHub Copilot CLI nasıl kullanılır? Adım adım rehber sayfasındaki temel başlatmayı yaptıktan sonra şu sırayı izleyin:
- Etkilenecek dosyaları ve test planını listelet.
- Tek bir görev verip değişikliği yaptır.
flutter analyzeveflutter testçalıştırmasını isteyin.git diffile yapılan değişiklikleri inceleyin.- Testler yeşilse ve diff temizse commit edin.
Bu döngü, Flutter’ın hızlı geri bildirimiyle birleştiğinde güvenli bir tempo oluşturur. İşte tipik Flutter görevleri için örnek promptlar:
- ‘Mevcut Riverpod yapısını bozmadan Product modeline
isFavoritealanı ekle ve ilgili testleri güncelle; önce plan çıkar.’ - ‘Login ekranındaki
TextFormFielddoğrulamalarını sadeleştir; hata mesajları tema renginden gelsin.’ - ‘
lib/core/platform/notification_channel.dartiçine Android içinMethodChannelçağrısını ekle ve platform kanalı testini yaz.’ - ‘
flutter analyzeçıktısındaki uyarıları dosya bazında listele ve düzeltmeyi öner; testleri bozma.’ - ‘Bu widget’ın
constkullanımını artır ve ilgili widget testinipumpWidgetile ekle.’
Bu döngüyü her yeni feature için tekrarlayın. Örneğin bir listeleme ekranı eklerken önce modeli ve state’i planlatın, sonra widget’ı yazdırın, testleri ekletin ve analiz sonuçlarını isteyin. Ajan büyük bir değişikliği tek seferde yapmaya kalkarsa, ‘öncelikle sadece model dosyasını değiştir’ gibi açık komutlar verin. Diff’i inceledikten sonra şüpheli kısımları ajanla tartışın; örneğin async sonrası context kullanımı varsa düzeltmesini isteyin.
Hangi Flutter işlerinde iyi, nerelerde dikkatli olmalısınız
Ajan, tekrarlayan widget düzenlemeleri, model-genişletme, state katmanı güncellemeleri ve platform kanalı ekleme işlerinde iyi sonuç verir. Aşağıdaki tablo, sık karşılaşılan işler ve dikkat edilecek noktaları özetler.
| İş | Ajandan isteyeceğiniz şey | Dikkat edilecek nokta |
|---|---|---|
| Widget refactor | Widget’ı ayrı dosyaya taşı, const ekle, tema kullan | BuildContext’i async sonrası kullanmaması |
| State yönetimi | Riverpod sağlayıcısını güncelle, yeni state alanı ekle | Mevcut deseni değiştirmemesi, pubspec’e paket eklememesi |
| Platform kanalı | MethodChannel kodunu core/platform altına ekle, mock test yaz | İzinler, yaşam döngüsü ve platforma özel dönüş tipleri |
| Test | Widget testi yaz, pumpWidget ile davranışı doğrula | Gerçek zamanlayıcı veya HTTP bağımlılığı eklememesi |
Flutter’a özgü tuzaklar şunlardır: ajan, async boşluk sonrası BuildContext kullanımı konusunda hata yapabilir; if (!mounted) return; eklemeyi unutabilir. State yönetiminde Riverpod’dan Bloc’a veya setState’e kayabilir, talimatı ihlal edebilir. Platform kanalı kodunda Android ve iOS ayrımını gözden kaçırabilir ya da gerekli manifest/plist izinlerini atlayabilir. Freezed veya json_serializable gibi kod üretimi kullanıyorsanız ajan .g.dart dosyalarını elle düzenlemeye çalışabilir; bu dosyaları dart run build_runner build ile yeniden üretmesi gerektiğini belirtin. Ajan, Theme.of(context) yerine sabit renkler yazabilir, bu da karanlık tema uyumunu bozar. Widget testlerinde pumpAndSettle yerine pump kullanmazsa animasyon veya timer asılı kalabilir; tester.pumpAndSettle ile bitmeyen animasyonları yakalamak zorlaşır. Responsive layout konusunda MediaQuery kullanmayı unutabilir, önerileri farklı ekran boyutlarında test etmek gerekir. Diff’i incelerken özellikle pubspec.yaml, analysis_options.yaml ve state katmanı dosyalarına bakın.
Test ve doğrulama
GitHub Copilot CLI’den her görev sonrası flutter test çalıştırmasını isteyin. Sadece geçti/kaldı bilgisiyle yetinmeyin; hangi testlerin eklendiğini veya değiştirildiğini sorun. flutter analyze çıktısının sıfır uyarı olmasını hedefleyin. Widget testlerinde tester.pump, tester.pumpAndSettle ve tester.enterText gibi standart araçların doğru kullanıldığını kontrol edin. Platform kanalı testlerinde TestDefaultBinaryMessengerBinding veya mock yöntem kanalı kullanılmalı. Ajan, test kapsamını genişletmek için mevcut test dosyalarını örnek alabilir; bunu talimatlara yazarsanız daha tutarlı testler üretir. Son olarak git diff --stat ile değişikliklerin beklenen dosyalarla sınırlı olduğunu doğrulayın.
Golden testler kullanıyorsanız ajanın matchesGoldenFile eklerken yeni görüntüleri flutter test --update-goldens ile üretmesini isteyebilirsiniz; ancak bu görüntüleri incelemeden commit etmemelisiniz. Entegrasyon testleri için integration_test paketini kullanıyorsanız ajanın testi cihaz/emülatör üzerinde çalıştırma adımlarını doğru yazması gerekir; flutter test integration_test komutu bazı projelerde farklılık gösterebilir. Ajanın testlerde setUp/tearDown kullanmasını ve mock’ları testWidgets içinde doğru başlatmasını kontrol edin. Son olarak CI’da çalışan flutter analyze --fatal-infos gibi ek komutları da talimat dosyasına yazarsanız ajan aynı standartta kalır.
Birden fazla agent ile Flutter projesi
Birden fazla ajanı aynı Flutter projesinde koşarken AgentVera işleri yönetilebilir kılar. Her ajan ayrı git worktree üzerinde çalıştığı için widget ve state değişiklikleri birbirini ezmez. Ajan bitince ikinci bir model kodu inceler; bulgular file:line olarak gösterilir, böylece BuildContext veya const hatalarını hızlı yakalarsınız. Checkpoint’ler sayesinde yanlış bir refactor tek tıkla geri alınır ve oturum adım adım izlenebilir. Token bütçeleri ise ajanın Flutter test döngülerinde kaynakları aşırı tüketmesini engeller.
Sonuç
GitHub Copilot CLI, doğru proje talimatları ve disiplinli bir döngüyle Flutter işlerinde ciddi zaman kazandırır. Önemli olan ajanın mevcut mimariyi bozmasını önlemek, her değişikliği analiz ve testlerle doğrulamak, diff’i dikkatle incelemektir. Flutter’a özel kuralların dosyada net olması, ajanın kendi varsayımlarını değil sizin standartlarınızı takip etmesini sağlar.