يعني إيه Caching widgets implicitly؟
وهل Flutter فيها أي طريقة لعمل Cache للـWidget؟
ودى معلومة ع السريع:
أيوه طبعا Flutter بتعمل كاش تلقائي (implicitly) للويدجت اللي بتكون بنفس القيم والقيم دي معروفه وقت الكومبايل.
يعني لو كتبت
const SizedBox(height: 20)
وكررتها في كذا مكان في الكود، Flutter مش هتعمل object جديد كل مرة، لأ هى بتستخدم نفس النسخة اللي اتعملت أول مرة وده بيساعد جدًا في الأداء لأنه بيقلل عدد ال Widgets اللي بتتبني كل مرة.
إزاي نستفيد من كده؟
دايما لما تقدر استخدم const قبل ال Widget خصوصا لو مش هتتغير
زي كده
const Text("Welcome")
بدل ما تكتب
Text("Welcome")
لأن الفرق بينهم إن الأول هيتحفظ في الكاش، والتاني هيتبني كل مرة.
طب ولو عندي ويدجت بيتكرر كتير بس مش ثابت بالكامل، ساعتها ممكن تستخدم حلول زي:
ValueKey أو ObjectKey علشان Flutter تقدر تميز بين النسخ.
يعني مثلاً عندك ListView فيها عناصر كتير، وكل عنصر هو عبارة عن ويدجت فيها شوية معلومات زي اسم، صورة، رقم... بس القيم دي بتتغير حسب كل عنصر.
ListView(
children: [
UserCard(name: "Mahmoud"),
UserCard(name: "Usama"),
UserCard(name: "Ahmed"),
],
)
في الحالة دي، كل عنصر شكله زي التاني لكن بياناته مختلفة، وFlutter ممكن يتلخبط لما يعيد بناء الواجهة
هنا ييجي دور الـ Key
علشان Flutter يقدر يفرق بين كل ويدجت والتانية، لازم تدي لكل واحدة Key.
وفي الحالة دي، بنستخدم أنواع من ال Keys زي
ValueKey , ObjectKey
لما تدي كل ويدجت Key
Flutter هيعرف إن أه ده نفس العنصر اللي كان هنا قبل كده، فـمش هيبنيه من أول وجديد، ومش هيحصل لخبطة في الـstate
Post #2411
4.65K
- ❤🔥 12
- 🔥 3