Registro de peso
#سجل الوزن
شاشة التسجيل
فهو يسمح للمستخدم بتسجيل وزن الجسم اليومي وتصور التطور مع مرور الوقت باستخدام رسم بياني خطي مرسوم باستخدام واجهة برمجة التطبيقات Canvas الخاصة بـ Compose.
تحميل البيانات
عند تهيئة الشاشة، تتم استشارة جدول Supabase peso_usuario، والتصفية حسب id_usuario وترتيب النتائج بترتيب تصاعدي حسب التاريخ. يتم تخزين السجلات في الحالة registros: List<PesoUsuario>.
تقييد تسجيل واحد في اليوم
تتحقق الشاشة مما إذا كان هناك سجل موجود بالفعل للتاريخ الحالي (fechaHoy) قبل عرض حقل الإدخال. يتم حساب المتغير yaExisteHoy بمقارنة تاريخ كل سجل بتاريخ النظام:
val fechaHoy = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date())
val yaExisteHoy = registros.any { it.fecha == fechaHoy }
إذا كان السجل موجودًا بالفعل لهذا اليوم، فسيتم إخفاء حقل الإدخال ويتم عرض رسالة إعلامية. هذا التقييد موجود حصريًا على مستوى واجهة المستخدم، ولا يوجد أي قيود UNIQUE في قاعدة البيانات لهذه المجموعة من الأعمدة.
إدراج سجل جديد
يقوم المستخدم بإدخال الوزن في حقل النص (يقبل القيم العشرية) ويضغط على زر التأكيد. يتم تنفيذ insert في Supabase باستخدام id_usuario وقيمة الوزن والتاريخ الحالي.
تحرير سجل موجود
يتضمن كل صف في القائمة زر تحرير يقوم بتنشيط وضع التحرير عبر الإنترنت (editandoId). عند الالتزام، يتم تشغيل update في Supabase على السجل المحدد بواسطة id.
حذف السجل
يقوم زر الحذف لكل صف بتشغيل delete في تصفية Supabase بواسطة id للسجل.
الرسم البياني للتطور
تم رسم الرسم البياني باستخدام Canvas الخاص بـ Jetpack Compose. يقوم التنفيذ بتطبيع قيم الوزن إلى النطاق [0, 1] بالنسبة إلى الحد الأدنى والحد الأقصى للسجل، وتعيينها إلى إحداثيات البكسل على اللوحة القماشية، وربطها بخطوط باستخدام drawPath. يتم تمثيل كل نقطة بدائرة مملوءة.
يمثل المحور الأفقي الوقت (يتم ترتيب الإدخالات ترتيبًا زمنيًا) ويمثل المحور الرأسي الوزن بالكيلوجرام. يتم عرض القيم الدنيا والقصوى كتسميات نصية في نهايات المحور.
إذا كان السجل يحتوي على أقل من نقطتين، فلن يتم عرض الرسم البياني (يلزم وجود نقطتين على الأقل لرسم خط).