Tujuan utama perpustakaan ini adalah memiliki definisi kelas dalam kode umum Anda yang menentukan bagaimana panel debug harus dibangun. Menggunakan definisi ini, perpustakaan menghasilkan:
Daftar data tampilan yang dibuat oleh kasus penggunaan dapat diteruskan ke model tampilan builtin yang menangani interaksi pengguna. Anda memiliki pilihan untuk menggunakan UI default yang dilengkapi dengan perpustakaan atau untuk membangun sendiri.
Perpustakaan ini diterbitkan ke repositori Maven Public Mirego, jadi pastikan Anda memasukkannya ke dalam dependencyResolutionManagement Anda.
dependencyResolutionManagement {
repositories {
// ...
maven( " https://s3.amazonaws.com/mirego-maven/public " )
}
}Di file teratas Anda build.gradle.kts Tambahkan referensi ke plugin KSP:
plugins {
// ...
id( " com.google.devtools.ksp " ) version " 1.9.21-1.0.15 " apply false
}Di file build.gradle.kts modul umum Anda, tambahkan referensi ke plugin KSP:
plugins {
// ...
id( " com.google.devtools.ksp " )
} Tambahkan juga dependensi core dan annotations bersama dengan direktori sumber yang dihasilkan 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 " )
}Jangan lupa untuk mengekspor ketergantungan inti ke kerangka kerja iOS:
kotlin {
cocoapods {
framework {
// ...
export( " com.mirego.trikot:viewmodels-declarative-flow:x.y.z " )
export( " com.mirego.debugpanel:core:x.y.z " )
}
}
}Anda juga perlu menambahkan referensi kompiler ke blok dependensi:
dependencies {
add( " kspCommonMainMetadata " , " com.mirego.debugpanel:compiler:x.y.z " )
} Sampel UI diselesaikan secara otomatis dari modul umum karena kami menyertakan pustaka dengan fungsi api() .
Jika Anda memiliki beberapa masalah dengan file META-INF/versions/9/previous-compilation-data.bin selama kompilasi, Anda dapat menambahkannya ke sumber daya yang dikecualikan di dalam file build.gradle.kts aplikasi Android:
android {
packaging {
resources {
excludes + = listOf (
" META-INF/versions/9/previous-compilation-data.bin "
)
}
}
}Jika Anda ingin menggunakan sampel UI di iOS, sertakan pod di podfile aplikasi:
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
Dalam modul umum Anda, buat kelas dengan anotasi @Debugpanel. Anda dapat menemukan berbagai komponen yang tersedia dalam tabel di bawah ini.
@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
) Setelah konfigurasi selesai, Anda dapat menjalankan tugas Gradle kspCommonMainMetadata untuk menghasilkan file spesifik untuk proyek Anda.
Anda sekarang harus memiliki MyProjectDebugPanelUseCase.kt , MyProjectDebugPanelUseCaseImpl.kt , MyProjectDebugPanelRepository.kt dan MyProjectDebugPanelRepositoryImpl.kt tersedia di kelas Anda.
Yang perlu Anda lakukan sekarang adalah instantiate implementasi:
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 */ )
)
} Anda dapat mengontrol visibilitas masing -masing komponen dalam parameter componentsVisibility dari fungsi createViewData() .
Contoh:
useCase.createViewData(
/* ... */
componentsVisibility = flowOf(
MyProjectDebugPanelComponentsVisibility (
button1 = false ,
button2 = true ,
)
)
) Dalam hal ini button1 akan disembunyikan dan button2 akan terlihat.
| Nama | Tipe data yang bertahan | Konfigurasi |
|---|---|---|
| Debugpaneltoggle | Boolean | Nilai Boolean Awal |
| Debugpanellabel | - | Flow<String> |
| Debugpaneltextfield | String | Nilai String awal |
| Debugpanelbutton | - | Inisial () -> Unit |
| Debugpanelpicker | String | Nilai String awal yang mewakili pengidentifikasi item yang dipilih |
| DebugpaneldatePicker | Long | Nilai Long awal yang mewakili zaman dalam milidetik |
| Enum | String | Nilai enum awal |
Panel debug dikonfigurasi menggunakan @DebugPanel(val prefix: String, val packageName: String) Anotasi.
prefix termasuk dalam kelas penggunaan dan kelas repositori yang dihasilkan.packageName adalah tempat file akan output di dalam folder generated . Secara default nilai -nilai disimpan dalam pengaturan menggunakan nama bidangnya sebagai pengidentifikasi. Namun perilaku ini dapat ditimpa menggunakan anotasi @Identifier(val value: String) .
Sebagai contoh, ini berguna dalam kasus di mana Anda ingin mengganti panel debug lama dengan yang ini dan menyimpan kunci aslinya.
Contoh:
@Identifier( " PREVIEW_MODE " )
val preview : DebugPanelToggle Secara default komponen ditampilkan di samping label dengan nama bidang sebagai nilai. Anda dapat menggunakan anotasi @DisplayName(val value: String) untuk memberikan komponen label yang lebih bermakna.
Contoh:
@DisplayName( " Preview Mode " )
val preview : DebugPanelToggle Anda dapat menggunakan anotasi @DebugProperty(val name: String) untuk menghasilkan komponen yang terikat ke properti kelas.
Misalnya, Anda dapat memiliki repositori dengan properti String atau Flow<String> , dan dengan meletakkan anotasi di bidang, perpustakaan akan menghasilkan properti delegasi.
Anda kemudian dapat mengekspos bidang delegasi ini di antarmuka dan penelepon akan menerima nilai internal Anda atau yang dari panel debug (dalam kasus di mana ia diganti).
Harap dicatat bahwa anotasi ini hanya dapat digunakan dengan tipe: String , Boolean , Enum , Flow<String> , Flow<Boolean> dan Flow<Enum> .
Contoh:
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
}Penelepon:
val repository : Repository = RepositoryImpl ()
repository.value.map {
println ( " Repository value: $it " )
} Ini akan mencetak
Repository value: String value atau Repository value: Overridden value tergantung jika Overridden value telah dimasukkan di dalam bidang teks yang dihasilkan.
Repositori yang dihasilkan dilengkapi dengan metode resetSettings() yang dapat Anda hubungi untuk menghapus nilai komponen yang ada. Perlu diketahui bahwa model tampilan panel debug tidak terikat pada nilai -nilai ini, jadi Anda harus keluar dari layar panel debug atau membunuh aplikasi untuk memastikan nilai diatur ulang dengan benar (lihat RootViewModelImpl.kt di folder aplikasi sampel).
Kasing penggunaan yang dihasilkan dan implementasi repositori memiliki pengubah open , yang berarti Anda dapat memperpanjangnya untuk menambahkan lebih banyak fungsi jika Anda membutuhkannya.
Jika proyek Anda memiliki perpustakaan injeksi ketergantungan seperti Koin dan Anda memiliki kelas yang diperluas sendiri, Anda dapat membuat anotasi dengan @Factory atau @Single .
Jika Anda tidak perlu mengesampingkan kelas -kelas ini, Anda bisa menempatkannya secara manual dalam modul injeksi dependensi.
Panel debug adalah © 2013-2023 Mirego dan dapat didistribusikan secara bebas di bawah lisensi BSD yang baru. Lihat file LICENSE.md .
Mirego adalah tim orang -orang yang bersemangat yang percaya bahwa pekerjaan adalah tempat di mana Anda dapat berinovasi dan bersenang -senang. Kami adalah tim orang -orang berbakat yang membayangkan dan membangun aplikasi web dan seluler yang indah. Kami berkumpul untuk berbagi ide dan mengubah dunia.
Kami juga menyukai perangkat lunak open-source dan kami mencoba memberikan kembali kepada masyarakat sebanyak yang kami bisa.