Flutter 💙 Büyümeye Açık Proje Yapısı

Furkan KURT
3 min readOct 5, 2020

Bu yazımda sizlere projelerinizin geliştirmeye ve büyümeye açık olması için uygulanması gereken kurallardan bahsedeceğim. Öncelikle nasıl bir klasör yapısı kullanırsak daha başarılı bir proje geliştirmesi yapabileceğimiz konusunda başlayacağım anlatıma. Sonuna kadar sıkılmadan okumanız size çok şey katacaktır :)

Birçok projede farklı yapılar kullandım ve en memnun kaldığım klasör yapısını sizlere anlatacağım. Öncelikle MVC üzerinde konuşmak istiyorum. MVC dediğimiz ve sıklıkla duyduğumuz bu mimari desen projelerimizde kullandığımız Model, View ve Controller yapılarımızı birbirinden ayırmaktır kısaca.

Modellerimizi, servislerimizi ve arayüz kodlarımızı ayrı bir dart dosyasında ve ayrı klasörlerde tutarsak hata ayıklama ve geliştirme işlerimizi vakit kaybetmeden ve profesyonelce yapabiliriz. Bu doğrultuda fonksiyon ve widget isimlerinin tümünün ‘camelCase’ (ilk kelimenin küçük harfle başlayıp diğerlerinin büyük harfle devam etmesi örn. functionName ya da homeScreen) olarak kullanılması, klasör ve dosya isimlerinin ise underscore ( örn. home_page.dart ) ile ayırarak küçük harfle kullanılması makbuldür :)

Örnek “camelCase” Fonksiyon

GitHub üzerinde örnek bir Flutter projesi oluşturup kullandığım dosya ve klasör yapısını yorumlarla pekiştirerek anlattım.

Dosya Yapısı

Yanda gördüğünüz üzere main.dart dosyasının yanına src klasörü oluşturdum. Projenin tüm dosyaları bunun içinde. Bunun altına da config, model, provider, service, ui ve utils adlarında klasörler oluşturdum.

Gözünüz korkmasın istediğiniz kadar dosya oluşturun, uygulamanızda bir performans düşüşü ya da boyut sorunu yaratmaz :)

Şimdi burada iç içe oluşturduğumuz bir sürü dosya var. Burada oluşturduğum dosyalardaki fonksiyon ve widgetları tek bir dosyada da birleştirebilirdik ancak o durumda projemiz tamamen bir spagetti koddan ibaret olurdu , büyüyemez ve geliştirilemezdi.

Öncelikle projede state management olarak Provider kullandım ve dosyalamayı ona göre yaptım. Provider kullandığımızda önceki yazımda da belirttiğim gibi en başta çalışan fonksiyonu MultiProvider ile sarmalayıp oluşturduğumuz provider’ları bunun içine ekliyorduk. Bunun dışında MaterialApp() widget’ımızda birçok parametre mevcut. Tüm parametreler dolduğunda özellikle büyük bir projede main.dart dosyası gerçekten çok karışıyor. Bunun önüne geçmek için config klasörünün altına Navigation, Color ve Theme gibi sabit yapıları oluşturdum. Ayrıca yine uygulama içinde birden çok defa kullanacağımız ve sabit olan verileri de Constants adında bir klasörde tutuyorum. Bu sabit veriler örneğin uygulama içindeki renk nesneleri, bazı stringler ve asset isimleri olabilir.

Constantlar değişmeyecek değerlerdir. Dart bize constant kullanımında bir güzellik yapmış. Değer ismini küçük ‘k’ harfi ile başlayarak yazarsak projenin tüm dosyalarında ‘k’ya basarak kolayca erişebiliyoruz.

Bir diğer özellik de isimli rota kullanmak. Rotalara isim verip bu sayfalara gitmek büyük kolaylık evet. Peki ya bir servis dosyasında context olmadan bir sayfa açabilir miyiz? Normalde açmak imkansız ancak bir NavigationService yazarak bunu mümkün hale getirebiliriz! Yine MaterialApp parametrelerinde bulunan onGenerateRoute fonksiyonuna biraz müdahale ediyoruz. GitHub üzerinde paylaştığım projede config/navigation/navigation_service.dart ve config/navigation/navigator_route_service.dart dosyalarını inceleyebilirsiniz. Aşağıdaki kod örneğinde MaterialApp’e NavigationService’imizi ekliyoruz.

Herhangi bir sayfayı açmak için de bu servisi aşağıdaki gibi context olmadan kullanabiliriz.

Sözün özü karmakarışık yazılmış bir projeyi geliştirmek çivi dolu bir kaptaki karışık çivileri tek tek ayırmaya benzer. Projede geliştirmek istediğiniz yeri ararken birden bir sıkıntı gelir ve tüm projeyi size bıktırarak yaptırır. Lütfen yazdığım şeyleri projenizde uygulayarak geliştirme yapmaya çalışın. Temiz kod görmek gerçekten motivasyon ve şevk vererek çalışma isteğinizi arttırır.

Yazılarıma zaman buldukça devam ediyorum. Umarım yazdıklarım işinize yaramıştır. Konu hakkındaki herhangi bir sorunuz olursa hiç çekinmeden bana ulaşabilirsiniz. Elimden geldiği kadarıyla yardımcı olmaktan mutluluk duyarım. Flutter’ı öğrendiğim ve çok sevdiğim Emre ALTUNBİLEK ve Veli BACIK hocalarıma saygılarımla..

Bilgi paylaştıkça çoğalır. Sağlıklı günleriniz olsun…

--

--