بناء تطبيق عداد في أقل من 10 دقائق باستخدام Jetpack Compose

دليل شامل لفهم وتنفيذ كود تطبيق العداد البسيط في Android باستخدام Jetpack Compose

دليل شامل لفهم وتنفيذ كود تطبيق العداد البسيط في Android باستخدام Jetpack Compose

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


ما هو Jetpack Compose؟

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


كيف تطبق هذا الكود في مشروعك؟

أنشئ مشروعًا جديدًا في Android Studio.
أضف الكود أعلاه إلى ملف MainActivity.kt.
تشغيل التطبيقات على الأجهزة الافتراضية أو الحقيقية.

شرح الكود البرمجي لتطبيق العداد

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


class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            var count by remember { mutableStateOf(0) }
            Column (
                modifier = Modifier
                    .fillMaxSize(),
                verticalArrangement = Arrangement.Center,
                horizontalAlignment = Alignment.CenterHorizontally,
            ){
                Text(
                    text = "$count",
                    fontSize = 24.sp,
                    modifier = Modifier.padding(bottom = 16.dp)
                )
                Row {
                    plusData(modifier = Modifier.padding(start = 10.dp), count = count, onCountChange = { newCount ->
                        count = newCount
                    })
                    minusData(modifier = Modifier.padding(start = 10.dp), count = count, onCountChange = { newCount ->
                        count = newCount
                    })
                }
            }
        }
    }
}

@Composable
fun RowScope.plusData(modifier: Modifier = Modifier,count: Int,onCountChange: (Int) -> Unit) {
    OutlinedButton(
        modifier = modifier,
        colors = ButtonDefaults.outlinedButtonColors(
            containerColor = Color.Blue.copy(alpha = 0.8f)
        ),
        border = null,
        shape = RoundedCornerShape(15.dp),
        onClick = {
        onCountChange(count + 1)
    }) {
        Text(
            "+",
            textAlign = TextAlign.Left,
            color = Color.White

        )
    }
}

@Composable
fun RowScope.minusData(modifier: Modifier = Modifier,count: Int,onCountChange: (Int) -> Unit) {
    OutlinedButton(
        modifier = modifier,
        colors = ButtonDefaults.outlinedButtonColors(
            containerColor = Color.Blue.copy(alpha = 0.8f)
        ),
        border = null,
        shape = RoundedCornerShape(15.dp),
        onClick = {
            if (count == 0) {
                null
            } else {
                onCountChange(count-1);
            }
        }) {
        Text(
            "-",
            textAlign = TextAlign.Left,
            color = Color.White

        )
    }
}


شرح كود Counter المكتوبه عن طريق Jetpack Compose

ComponentActivity: هي النشاط الرئيسي الذي يستضيف واجهة المستخدم.

enableEdgeToEdge(): تُستخدم لجعل الواجهة تمتد إلى حواف الشاشة.

setContent { ... }: هنا نقوم ببناء واجهة المستخدم باستخدام Jetpack Compose.

mutableStateOf(0): يُستخدم لتخزين حالة العداد. عندما تتغير هذه القيمة، تقوم Compose تلقائيًا بإعادة رسم الواجهة.

Column و Row: تُستخدم لترتيب العناصر بشكل عمودي وأفقي على التوالي.

Text: يعرض قيمة العداد الحالية.

plusData و minusData: هما دوال قابلة للتركيب (Composable Functions) مسؤولة عن زيادة ونقصان قيمة العداد.


دالة plusData لزيادة العداد

OutlinedButton: زر ذو مظهر حديث مع خلفية زرقاء.

onClick: عند النقر على الزر، يتم زيادة قيمة العداد بواحد.

onCountChange: دالة تُستخدم لتحديث حالة العداد في النشاط الرئيسي.


دالة minusData لنقصان العداد

if (count == 0): يمنع النقصان عندما تكون قيمة العداد صفرًا.
onCountChange: تُستخدم لتحديث حالة العداد في النشاط الرئيسي.

شرح كود العداد باستخدام Compose بشكل مفصل

في MainActivity، نبدأ بتعريف واجهة المستخدم في onCreate. يستخدم Jetpack Compose مفهوم Composable لإنشاء واجهات مستخدم ديناميكية. الفكرة الرئيسية هنا هي استخدام الدالة setContent لتحديد مكونات واجهة المستخدم الخاصة بنا.

يعلن هذا السطر عن متغير عدد يحمل القيمة الحالية للعداد. يتم استخدام الاستدعاء مع mutableStateOf لاستدعاء حالة المتغير من خلال إعادة التركيب. يعد هذا ضروريًا للحفاظ على حالة الواجهة أثناء تغييرات واجهة المستخدم.

نستخدم هنا العمود لتنظيم عناصر واجهة المستخدم عموديًا. نحن نستخدم المعدل. fillMaxSize() لملء الشاشة بأكملها، وقمنا بتعيين Vertical Arrangement على Arrangement. توسيط لتوسيط المحتوى عموديًا وأفقيًا، قم بتمديده للمحاذاة. CenterHorizontally لتوسيط المحتوى أفقيًا.

نعرض في هذا القسم قيمة عدد المتغيرات التي تستخدم عنصر النص. تم ضبط حجم الخط على 24 sp وإضافة حشوة لترك بعض المساحة بين النص والأزرار التي سنقوم بإنشائها لاحقًا.

تصميم زر لزيادة وتقليل العدد
تم تصميم هذا الزر لزيادة قيمة الحساب عند النقر عليه. يتم استخدام OutlinedButton كعنصر زر بمعلمات مخصصة:

الألوان: تم تحديد لون الزر باللون الأزرق مع شفافية بنسبة 80% باستخدام اللون. أزرق. نسخ (ألفا = 0). 8و).
الشكل: يتم تعريف الشكل ليكون له زوايا مستديرة باستخدام RoundedCornerShape (15.dp).
التحقق من الحالة: عند النقر فوق الزر، يتم تنفيذ الدالة onCountChange، مما يؤدي إلى زيادة قيمة العداد.

زر التناقص يشبه زر الزيادة، لكنه يقلل من قيمة العد. ونضيف هنا شرطا للتأكد من أن الرقم لا يقل عن الصفر. إذا كانت القيمة صفر، فلن تنخفض أكثر.

نقوم هنا بتجميع الأزرار باستخدام الصف لوضعها بجانب بعضها البعض أفقيًا. تتم إضافة الحشو إلى كل زر لضبط المسافة بينهما.

بمجرد اكتمال الرمز، يضغط المستخدم على الأزرار لزيادة أو تقليل قيمة العد. يتم عرض القيمة الجديدة في الوقت الحقيقي فوق الأزرار.

كيف يمكنني تحسين الكود الخاص بي ليكون أكثر كفاءة؟

إعادة استخدام المكونات: يمكن تحويل الأزرار إلى مكونات فردية قابلة لإعادة الاستخدام.
إضافة اختبارات الوحدة: اكتب اختبارات لوظائف زيادة وتناقص العداد.
تحسين الأداء: الاستخدام السليم للتذكر وmutableStateOf لضمان إعادة الرسم فقط عند الحاجة.


في هذه المقالة قمنا بشرح كود بسيط لتنفيذ عداد باستخدام Jetpack Compose. لقد تعلمنا كيفية إنشاء واجهات مستخدم تفاعلية وإدارة الحالة في Compose. يعد هذا الكود البسيط نقطة انطلاق رائعة لفهم أساسيات Jetpack Compose وكيفية تنفيذه في تطبيق Android.

تعليقات