ما هي LazyVerticalGrid؟ وكيف تعمل في Jetpack Compose؟

كود إنشاء شبكة رأسية باستخدام LazyVerticalGrid في Kotlin Compose

كود إنشاء شبكة رأسية باستخدام LazyVerticalGrid في Kotlin Compose

عندما ترغب ببناء احد تطبيقات Android باستخدام Jetpack Compose، فبشكل كبير سوف تحتاج الي وجود عنصر LazyVerticalGrid في مشروعك وهيا واحدة من الأدوات القوية التي تسمح للمطورين بإنشاء شبكات مرنة للعناصر وقابلة للتخصيص بسهولة. في هذه المقالة، سنتعرف على كيفية استخدام LazyVerticalGrid لإنشاء شبكة من العناصر في Kotlin Compose، مع شرح مفصل للكود وكيفية تحسينه لتوفير تجربة مستخدم ممتازة والحصول علي اداء اعلى في تطبيقك .


ما هي LazyVerticalGrid؟

LazyVerticalGrid هي إحدى مكونات الموجوده في Jetpack Compose والتي تسمح لك إنشاء شبكة رأسية من العناصر. حيث تتميز هذه الأداة بقدرتها على توليد العناصر بشكل "كسول" (Lazy)، أي أنها لا تقوم بتحميل جميع العناصر في الذاكرة مرة واحدة، بل تقوم بتحميلها فقط عند الحاجة وهذا يجعل تطبيقك اسرع واخف في استهلاك الذاكره. هذا يجعلها مثالية للتعامل مع قوائم كبيرة من البيانات دون التأثير على أداء التطبيق.


كود إنشاء شبكة رأسية باستخدام LazyVerticalGrid

لنقوم بكتابة كود بسيط بواسطة Jetpack Compose لإنشاء شبكة رأسية تحتوي على عنصرين في كل صف


LazyVerticalGrid(
    contentPadding = PaddingValues(10.dp),
    verticalArrangement = Arrangement.spacedBy(10.dp),
    modifier = Modifier
        .fillMaxSize()
        .padding(paddingValues),
    columns = GridCells.Fixed(2),
) {
    items(
        count = state.model.size, key = { state.model[it].text }
    ) { index ->
        val item = state.model[index]
        MyCard(item = item, onClick = { onClick(item) }, modifier = Modifier.animateItemPlacement())
    }
}

شرح الكود

LazyVerticalGrid: هذه هي الوظيفة الرئيسية التي نستخدمها لإنشاء الشبكة الرأسية. يتم تحديد عدد الأعمدة باستخدام GridCells.Fixed(2)، مما يعني أن كل صف سيحتوي على عنصرين.

contentPadding: يُستخدم لتحديد المسافات الداخلية حول المحتوى داخل الشبكة. في هذا المثال، قمنا بتعيينها إلى PaddingValues(10.dp).

verticalArrangement: يتحكم في كيفية توزيع العناصر عموديًا داخل الشبكة. هنا، قمنا باستخدام Arrangement.spacedBy(10.dp) لإضافة مسافة بين العناصر.

items: تُستخدم هذه الدالة لتكرار العناصر داخل الشبكة. يتم تحديد عدد العناصر باستخدام count، ويتم تعيين مفتاح فريد لكل عنصر باستخدام key.

MyCard: هذا هو العنصر المستخدم لعرض كل عنصر في الشبكة. يمكن استبداله بأي عنصر آخر حسب احتياجات التطبيق.


استخدام GridCells.Adaptive

بدلاً من استخدامك GridCells.Fixed(2)، تستطيع استخدام GridCells.Adaptive لجعل عدد الأعمدة تتغير بشكل ديناميكيًا وفقًا لحجم شاشه الجهاز. وهذا يضمن تجربة للمستخدم أفضل على الأجهزة المختلفة.
columns = GridCells.Adaptive(minSize = 120.dp)

في المثال السابق ، سيتم ضبط عدد الأعمدة تلقائيًا بالنسبه لحجم الشاشة، مع التأكد من أن كل عمود لا يقل عن 120.dp.

دمج الخلايا باستخدام Span

في كثير من الأحيان، قد تحتاج إلى دمج خلايا الشبكة (LazyVerticalGrid) بحيث يشغل عنصر واحد مساحة أكبر من باقي العناصر . يمكن تحقيق ذلك باستخدام خاصية span.
LazyVerticalGrid(
    contentPadding = PaddingValues(10.dp),
    verticalArrangement = Arrangement.spacedBy(10.dp),
    modifier = Modifier
        .fillMaxSize()
        .padding(paddingValues),
    columns = GridCells.Fixed(2),
) {
    item(span = { GridItemSpan(maxCurrentLineSpan) }) {
        Text("Welcome to geecoders.com")
    }
    items(
        count = state.model.size, key = { state.model[it].text }
    ) { index ->
        val item = state.model[index]
        MyCard(item = item, onClick = { onClick(item) }, modifier = Modifier.animateItemPlacement())
    }
}

شرح خاصية Span

item: يمثل عنصرًا فرديًا في الشبكة. في هذا المثال، قمنا بإضافة عنصر نصي.
span: تتحكم هذه الخاصية في عدد الأعمدة التي يشغلها العنصر. هنا، قمنا باستخدام GridItemSpan(maxCurrentLineSpan) لجعل العنصر يشغل المساحة الكاملة للشبكة.

فوائد استخدام LazyVerticalGrid

مرونة في التصميم: يمكنك من التحكم في عدد الأعمدة والخلايا وتوزيع العناصر بسهولة.
تحسين الأداء: يتم تحميل العناصر التي تظهر على الشاشه فقط، مما يحسن أداء التطبيق.
توافق مع أحجام الشاشات: يمكن استخدام GridCells.Adaptive حتى تضمن تجربة مستخدم متسقة على جميع الأجهزة.

نصائح لتحسين تجربة المستخدم

إضافة تأثيرات بصرية: يمكنك تحسين المظهر باستخدام الظلال، الخلفيات، والحركات لتوفير تجربة مستخدم أكثر جاذبية.
تحسين الأداء: تأكد من استخدام key فريدة لكل عنصر لضمان إعادة التركيب الفعالة.
التجربة على أجهزة مختلفة: اختبر التصميم على أجهزة متعددة للتأكد من توافقه مع جميع أحجام الشاشات.

LazyVerticalGrid هي واحده من الادوات القويه في Jetpack Compose والتي تتيح لك إنشاء شبكات رأسية مرنة وقابلة للتخصيص بشكل تلقائي. من خلال التحكم في عدد الأعمدة ويمكنك استخدام خاصية الامتداد (Span)، التي تمكنك من إنشاء واجهات مستخدم جميلة وفعالة. لا تتردد في تجربة الكود المقدم وتعديله وفقًا لاحتياجات تطبيقك.

تعليقات