الهدف الرئيسي من هذه المكتبة هو الحصول على تعريف فئة في الكود المشترك الذي يحدد كيفية بناء لوحة التصحيح. باستخدام هذا التعريف ، تولد المكتبة:
يمكن تمرير قائمة بيانات العرض التي تم إنشاؤها بواسطة حالة الاستخدام إلى نموذج عرض مدمج يتولى تفاعلات المستخدم. لديك خيار إما استخدام واجهة المستخدم الافتراضية التي تأتي مع المكتبة أو لبناء خاص بك.
يتم نشر المكتبة إلى مستودع Mirego's Public Maven ، لذا تأكد من تضمينها في إعدادات Settings.Gradle.KTS dependencyResolutionManagement .
dependencyResolutionManagement {
repositories {
// ...
maven( " https://s3.amazonaws.com/mirego-maven/public " )
}
}في ملف Build.gradle.kts من المستوى الأعلى ، أضف المرجع إلى مكون الإضافي KSP:
plugins {
// ...
id( " com.google.devtools.ksp " ) version " 1.9.21-1.0.15 " apply false
}في ملف Build.gradle.kts الخاص بالوحدة النمطية المشتركة ، أضف المرجع إلى المكون الإضافي KSP:
plugins {
// ...
id( " com.google.devtools.ksp " )
} أضف أيضًا تبعيات core and annotations جنبًا إلى جنب مع دليل مصدر KSP الذي تم إنشاؤه:
val commonMain by getting {
dependencies {
// ...
api( " com.mirego.trikot:viewmodels-declarative-flow:x.y.z " )
api( " com.mirego.debugpanel:core:x.y.z " )
implementation( " com.mirego.debugpanel:annotations:x.y.z " )
}
kotlin.srcDir( " build/generated/ksp/metadata/commonMain/kotlin " )
}لا تنس تصدير التبعية الأساسية إلى إطار iOS:
kotlin {
cocoapods {
framework {
// ...
export( " com.mirego.trikot:viewmodels-declarative-flow:x.y.z " )
export( " com.mirego.debugpanel:core:x.y.z " )
}
}
}تحتاج أيضًا إلى إضافة مرجع المترجم إلى كتلة التبعيات:
dependencies {
add( " kspCommonMainMetadata " , " com.mirego.debugpanel:compiler:x.y.z " )
} يتم حل عينة واجهة المستخدم تلقائيًا من الوحدة النمطية المشتركة نظرًا لأننا ندرج المكتبة مع وظيفة api() .
إذا كان لديك بعض المشكلات مع ملف META-INF/versions/9/previous-compilation-data.bin أثناء التجميع ، يمكنك إضافته إلى الموارد المستبعدة داخل ملف Build.gradle.kts Android:
android {
packaging {
resources {
excludes + = listOf (
" META-INF/versions/9/previous-compilation-data.bin "
)
}
}
}إذا كنت ترغب في استخدام عينة واجهة المستخدم على iOS ، فقم بتضمين POD في Podfile التطبيق:
pod 'Trikot/viewmodels.declarative.SwiftUI.flow', :git => '[email protected]:mirego/trikot.git', :tag => 'x.y.z', :inhibit_warnings => true
pod 'DebugPanel', :git => '[email protected]:mirego/debug-panel.git', :tag => 'x.y.z', :inhibit_warnings => true
في وحدة Common الخاصة بك ، قم بإنشاء فصل مع @Debugpanel. يمكنك العثور على المكونات المختلفة المتوفرة في الجدول أدناه.
@DebugPanel(prefix = " MyProject " , packageName = " com.myproject.app.generated " )
data class DebugPanelConfig (
val toggle : DebugPanelToggle ,
val label : DebugPanelLabel ,
val textField : DebugPanelTextField ,
val button : DebugPanelButton ,
val picker : DebugPanelPicker ,
val datePicker : DebugPanelDatePicker ,
val enumPicker : SomeEnum
) بمجرد الانتهاء من التكوين ، يمكنك تشغيل مهمة Gradle kspCommonMainMetadata لإنشاء الملفات المحددة لمشروعك.
يجب أن يكون لديك الآن MyProjectDebugPanelUseCase.kt ، MyProjectDebugPanelUseCaseImpl.kt ، MyProjectDebugPanelRepository.kt و MyProjectDebugPanelRepositoryImpl.kt متوفر في الفصل الدراسي.
كل ما عليك فعله الآن هو إنشاء إنشاء تطبيقات:
private val repository : MyProjectDebugPanelRepository = MyProjectDebugPanelRepositoryImpl ()
private val useCase : MyProjectDebugPanelUseCase = MyProjectDebugPanelUseCaseImpl (repository)
/* ... */
class ParentViewModelImpl (
coroutineScope : CoroutineScope ,
useCase : MyProjectDebugPanelUseCase
) : ParentViewModel, VMDViewModelImpl(coroutineScope) {
override val debugPanel = DebugPanelViewModelImpl (
coroutineScope,
useCase,
useCase.createViewData( /* Configure the components here */ )
)
} يمكنك التحكم في رؤية كل مكونات في معلمة componentsVisibility لوظيفة createViewData() .
مثال:
useCase.createViewData(
/* ... */
componentsVisibility = flowOf(
MyProjectDebugPanelComponentsVisibility (
button1 = false ,
button2 = true ,
)
)
) في هذه الحالة ، سيتم إخفاء button1 وسيكون button2 مرئيًا.
| اسم | مستمر نوع البيانات | إعدادات |
|---|---|---|
| Debugpaneltoggle | Boolean | القيمة Boolean الأولية |
| Debugpanellabel | - | Flow<String> |
| Debugpaneltextfield | String | قيمة String الأولية |
| Debugpanelbutton | - | الأولي () -> Unit |
| Debugpanelpicker | String | قيمة String الأولية التي تمثل معرف العنصر المحدد |
| Debugpaneldatepicker | Long | القيمة Long الأولية التي تمثل الحقبة بالميلي ثانية |
| التعداد | String | قيمة التعداد الأولية |
تم تكوين لوحة التصحيح باستخدام @DebugPanel(val prefix: String, val packageName: String) .
prefix في حالة الاستخدام التي تم إنشاؤها وفئات المستودع.packageName هو المكان الذي سيتم فيه إخراج الملفات داخل المجلد generated . بشكل افتراضي ، يتم حفظ القيم في الإعدادات باستخدام اسم الحقل كمعرف. ومع ذلك ، يمكن تجاوز هذا السلوك باستخدام @Identifier(val value: String) التعليق التوضيحي.
بالنسبة لـ exemple ، يعد هذا مفيدًا في الحالة التي ترغب في استبدالها لوحة تصحيح قديمة بهذه اللوحة والحفاظ على المفاتيح الأصلية.
مثال:
@Identifier( " PREVIEW_MODE " )
val preview : DebugPanelToggle بشكل افتراضي ، يتم عرض المكونات بجانب تسمية تحمل اسم الحقل كقيمة. يمكنك استخدام التعليق @DisplayName(val value: String) لإعطاء المكونات تسمية أكثر جدوى.
مثال:
@DisplayName( " Preview Mode " )
val preview : DebugPanelToggle يمكنك استخدام التعليق التوضيحي @DebugProperty(val name: String) لإنشاء مكون مرتبط بخاصية فئة.
على سبيل المثال ، يمكنك الحصول على مستودع مع String أو Flow<String> ، ومن خلال وضع التعليق التوضيحي في الحقل ، ستنشئ المكتبة خاصية مندوب.
يمكنك بعد ذلك فضح حقل المندوب هذا في الواجهة وسيتلقى المتصل قيمتك الداخلية أو الحقل من لوحة التصحيح (في الحالة التي يتم فيها تجاوزها).
يرجى ملاحظة أن هذا التعليق التوضيحي لا يمكن استخدامه إلا مع الأنواع: String ، Boolean ، Enum ، Flow<String> ، Flow<Boolean> Flow<Enum> .
مثال:
Repository.kt
interface Repository {
val value : Flow < String >
} RepositoryImpl.kt
class RepositoryImpl : Repository {
@Identifier( " custom_value_identifier " )
@DebugProperty( " value " )
val internalValue = flowOf( " String value " )
override val value by RepositoryImplValueDelegate
}المتصل:
val repository : Repository = RepositoryImpl ()
repository.value.map {
println ( " Repository value: $it " )
} سوف يطبع هذا إما
Repository value: String value أو Repository value: Overridden value بناءً على ما إذا كانت Overridden value قد تم إدخالها داخل حقل النص الذي تم إنشاؤه.
يأتي المستودع الذي تم إنشاؤه باستخدام طريقة resetSettings() يمكنك الاتصال بها من أجل مسح قيم المكون المستمرة. يرجى العلم أن نماذج عرض لوحة التصحيح ليست مرتبطة بهذه القيم ، لذلك ستحتاج إما إلى الخروج من شاشة لوحة التصحيح أو قتل التطبيق للتأكد من إعادة تعيين القيم بشكل صحيح (انظر RootViewModelImpl.kt في مجلد تطبيق العينة).
تحتوي حالة الاستخدام التي تم إنشاؤها وتطبيقات المستودع على المعدل open ، مما يعني أنه يمكنك تمديدها لإضافة المزيد من الوظائف إذا كنت بحاجة.
إذا كان مشروعك يحتوي على مكتبة حقن التبعية مثل Koin وكان لديك فصول ممتدة خاصة بك ، فيمكنك التعليق عليها باستخدام @Factory أو @Single .
إذا لم تكن بحاجة إلى تجاوز هذه الفئات ، فيمكنك وضعها يدويًا في وحدات حقن التبعيات.
لوحة التصحيح © 2013-2023 Mirego وقد يتم توزيعها بحرية بموجب ترخيص BSD الجديد. انظر ملف LICENSE.md .
Mirego هو فريق من الأشخاص المتحمسين الذين يعتقدون أن هذا العمل هو مكان يمكنك الابتكار فيه والاستمتاع. نحن فريق من الأشخاص الموهوبين الذين يتخيلون ويبنيون تطبيقات الويب والجوال الجميلة. نلتقي معًا لتبادل الأفكار وتغيير العالم.
نحن نحب أيضًا برامج مفتوحة المصدر ونحاول رد الجميل للمجتمع قدر الإمكان.