Birden fazla tercih genel anlamda olumlu bir durum olarak değerlendirilse de bazen işlerin daha da karmaşıklaşmasına sebep olmaktadır.
Böyle durumlardan birisi de “Flutter ile hangi state management çözümünü kullanmalıyız?” gibi doğrudan tatmin edici bir cevap vermenin zor olduğu durumlardır.
Yeni başlayacağımız projemiz için hangi durum yönetim yaklaşımını kullanacağımızı kararlaştırmak veya buna karar verip ekibe bunu bildirmek ciddi bir konu, bu konuda araştırma yaparken Flutter’ın dokümantasyonundaki ilgili bilgileri özetleyerek yeni kurulmuş bir yazılım AR-GE şirketi olan Sentius Teknoloji Yazılım‘ın blog sayfasının da başlangıcını yapmak istedim.
Durum (state) mevcut ekrandaki bilginin başka ekranlarda lazım olmasıyla ihtiyaç duyduğumuz bir şey. Flutter declarative bir yapıya sahiptir. Declarative programlama mantığı fonksiyonel olarak geliştirme yapmanıza imkan sağlar. Flutter arayüzleri state değiştikçe yeniden çizilen bir yapıya sahiptir.
Arayüzün bir değişimi algılaması için setState() ile tetiklenmesi gerekmektedir. Declarative yaklaşımın en önemli artısı tek bir kod yolunu takip etmemiz ve her durumda oluşacak durumu bilmemizdir.
İki tür state vardır: Geçici (Ephemeral) ve Uygulama(app)
Bir PageView’in sayfa numarası, bir animasyonun mevcut pozisyonu, BottomNavigationBar üzerinde seçili olan aktif kısım gibi durum bilgilerini tutmak için gelişmiş durum yönetim yaklaşımlarına ihtiyaç yoktur.
Yukarıdaki kod incelendiği vakit BottomNavigationBar üzerinden yapılan seçim değiştikçe _index değerinin değiştiği görülmektedir. Bu _index değeri uygulamanın diğer kısımları tarafından ihtiyaç duyulmayan bir state bilgisidir.
Yönetilmesi gereken durumlar ise App State veya Shared State olarak da adlandırılan, uygulamanın farklı ekranlarında ihtiyaç duyduğumuz durum bilgileridir.
Kullanıcı tercihleri, giriş bilgileri, bildirimler, alışveriş sepeti, okundu-okunmadı bilgisi gibi durumlar yönetilmesi gereken durumlardır.
Durum yönetim sistemi seçilirken, uygulamanın büyüklüğü, ekibin tecrübesi gibi koşullara göre seçim yapılabilir.
State ve setState() ile uygulamalarda durum yönetimi yapılabilse de uygulama büyüdükçe bunun daha kolay yönetilebilmesi için çeşitli araçların kullanılması tavsiye edilmektedir.
Yukarıdaki kodda verdiğimiz örnekteki _index değeri sizin uygulamanız için geçici bir durum olmayabilir, o zaman ona göre bir yönetim yapıp, ilgili değişkeni sınıfın dışında tanımlamanız gerekmektedir.
İhtiyaç duyulan değişkenin hangi durum türüne ait olduğu yukarıdaki şekildeki gibi belirlenebilir. Kullanacağımız durum tek bir widget ile ilgiliyse geçici, birden çok widget ile ilgili ise App State olarak tanımlamalıyız.
Flutter’da widgetlar sabittir (immutable). Her durum değişiminde yeni bir widget oluşturulur. Yani widget güncellenmez, baştan yaratılır.
Flutter ilk olarak provider paketini önermekte ve onunla ilgili olan anlatımı yapmaktadır. ChangeNotifier sınıfından miras alan sınıflar, tetiklenmesi gerektiği anda notifyListeners() ile yenilenen ekranlar ile durumlar yönetilmektedir. ChangeNotifierProvider ise modeli ChangeNotifier’ın torunlarına aktarmak için kullanılır. Birden çok kullanılması durumunda MultiProvider ile kapsanması gerekir.
Yazıyı burada sonlandırırken asıl karar vermemiz gerekenin liste halinde sunulan ondan fazla durum yönetim sistemine karar verme işini ihmal etmeyelim, yukarıdaki bağlantıdan edindiğim ön bilgilerle GetX, BLoC veya Provider arasında bir seçim yapmaya karar verdim. Ama bu seçimin nedenini size objektif olarak şu anda açıklayamam 🙂
Araştırmalarımı sürdürürken bu ve bu adresteki bilgileri de incelediğim zaman, en uygun çözümün GetX olduğuna karar verdim.
Not: Bu yazı bu adresten başlayıp seri halinde devam eden dokümantasyon okunurken, not niteliğinde kaleme alınmıştır.
[…] “Flutter ile hangi state management çözümünü kullanmalıyız?” başlıklı yazımızın üzerinden 2 ay geçmiş. O zaman GetX övelim. […]
Paylaşım Detaylı ve Bilgilendirici Olmuş
Paylaşım İçin Teşekkürler