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

Top comments (0)