DEV Community

Cover image for Flutter Element ve Widgetlar 💫 🌌 ✨
Gülsen Keskin
Gülsen Keskin

Posted on

Flutter Element ve Widgetlar 💫 🌌 ✨

Elementler, widget'lar tarafından oluşturulur. Yeni bir widget öğesi oluşturulduğunda, framework Widget.createElement(this) öğesini çağırır. Bu widget öğesi, öğenin ilk yapılandırmasıdır ve öğenin, onu oluşturan widget öğesine bir referansı vardır. Oluşturulan elementler de kendi ağaçlarıdır. Element tree, en basit anlatımla, uygulamanızın iskeleti gibidir. Uygulamanın yapısını tutar, ancak widget'ların sağladığı ayrıntıların hiçbiri yoktur. İlgili widget'a yapılan bu referanslar aracılığıyla yapılandırma ayrıntılarını arayabilir.

Elementler, yeniden oluşturulmadıkları için widget'lardan farklıdır. Bir widget öğesi yeniden oluşturulduğunda veya bir ata tarafından ağacın herhangi bir yerine farklı bir widget öğesi eklendiğinde, bir öğe yeniden oluşturulmak yerine widget bileşenine referansını değiştirebilir. Elementler elbette oluşturulabilir ve yok edilebilir. Ama bir animasyon düşünün. Animasyon, her kare değişikliğinden sonra build methodunu çağırır ki bu çok fazladır! (Aslında saniyede 60 defaya kadar.) Bir animasyon sırasında, her karedeki widget öğesi aynı türdedir ancak yapılandırmada biraz farklılık gösterir. (Yani, bazı görüntüleme özellikleri değişmiştir. Örneğin, bir widget'ın rengi, animasyonun her karesinde biraz farklı bir gölge olabilir.) Bu durumda, ağaç yapısal olarak hala aynı olduğu için elementin yeniden oluşturulması gerekmez. Widget her karede yeniden oluşturulur, ancak element yalnızca bu widget'a referansını günceller.

Flutter bu şekilde widget'ları sürekli olarak yeniden oluşturmaktan kurtulur, ancak performansını korur. Widget'lar yalnızca planlardır ve elementler tarafından işlendiğinden, gerçekte ekranda görüntülenen ağacı bozmadan ağaçtaki widget'ları değiştirmek ucuzdur.

Burada değinmek istediğim son bir önemli ayrıntı var: durum nesneleri aslında widget'lar tarafından değil, elementler tarafından yönetilir.

Tüm bunlar gereklidir (ve optimaldir), çünkü widget'lar değişmezdir(immutable). Değişmez oldukları için diğer widget'larla ilişkilerini değiştiremezler. Yeni bir ebeveyn bulamıyorlar. Yıkılıp rebuilt(yeniden inşa) edilmeleri gerekiyor. Ancak elementler değişebilir, ve onları kendimiz güncellemek zorunda değiliz.

Değişken elementlerin hızını, ancak immutable kod yazmanın güvenliğini (widget'lar aracılığıyla) elde ederiz.

Resource: Flutter in Action chapter-3

Latest comments (0)