Flutter Provider Mimarisi

Güncelleme tarihi: 17 Haz 2021


Bu yazıda Flutter ekibinin tavsiye ettiği ve flutter geliştirici topluluğu tarafından sıkça kullanılan Provider mimarisinden bahsedeceğim. Yazı boyunca bu mimari altında bulunan yapılar nelerdir sorusunun cevabını ve bunlara ait örnekleri bulacaksınız.



Provider Nedir?


Provider, basitçe kendi state'i olan ve bu state'i BuildContext (BuildContext az ve öz bir şekilde bir widget'in Widget Tree'de nerede olduğunu anlamasını sağlayan ve parent-child arası data geçişine yarayan yapımızdır kendisi.) ile kendi çocuklarına aktarabilen bir widget. Uygulamanın çeşitli yerlerinde kullanılan ayarlar olsun, kullanıcının bilgisi olsun birden fazla widget için gereken tüm bilgiler için Provider kullanabilirsiniz.


Provider aslında resmi olarak bir state management yöntemi olarak geçmese de içerisindeki bir çok yapı sayesinde basitliği ve kullanışlılığı sayesinde state yönetiminde çok sık tercih edilen bir pakettir. Bloc, MobX gibi mimarilerle birlikte kullanıldığı gibi tek başına da kullanılabilir. Bu yazı da ise tek tek hangi yapı nedir değinip örneklerle nasıl kullanıldıklarını göstermeye çalışacağım.


Yukarıda flutter.dev sitesinden aldığım basit bir uygulama için tasarlanmış şemayı görebilirsiniz. Yukarıda bir widget tree görüyorsunuz. Uygulama MyApp ile başlıyor ve aşağıya doğru çocuklarına ayrılıyor. Yukarıdaki örnek uygulamada MyListItem widget'i sepete ürün ekleyecek bir fonksiyon çağırmak istiyor, MyCart sayfası ise sepeti görüntülemek istiyor. Sorunumuz şurada başlıyor:

1. Sepetin datasını MyListItem içerisinde tutarsak MyListItem kolayca datayı manipüle edebilir fakat bu sefer MyCart bu bilgiye ulaşamaz çünkü MyListItem MyCart'ın parent'i değildir.


2. Sepetin datasını MyCart'ta tutarsak MyCart datayı görüntüler fakat bu sefer MyListItem bu datayı manipüle edemez.


3. Datayı MyApp'de tutabilir ve datayı parametre olarak child'lara geçirebiliriz. Fakat karmaşık uygulamalarda bu ciddi bir kalabalık yaratır. Yukarıdaki örnekte MyCatalog'un sepet datasıyla bir ilgisi olmamasına rağmen sırf kendi child'ına taşımak için sepet datasını parametre olarak alması gerekir. Böyle 5-6 tane parent-child ilişkisi düşündüğünüzde bu oldukça kafa karıştırıcı olacaktır.


Provider ise datayı (veya state'i) çocuklara, torunlara, torunların torunlarına aktarırken bize çok yardımcı olan bir yapı. Provider aradaki alakasız widget'ler ile uğraşmadan doğrudan ilgili widget'a datayı iletebilmenizi sağlıyor.

 


Provider ve Diğer Yapılar


O kadar çok Provider çeşidi var ki insanın kafası gerçekten karışıyor. Aslında sadece provider bile öğrenmek yetmiyor. Notifier ve Con