該庫的主要目標是在您的通用代碼中具有類定義,該定義指定瞭如何構建調試面板。使用此定義,庫生成:
用例創建的視圖數據列表可以傳遞給處理用戶交互的內置視圖模型。您可以選擇使用庫隨附的默認UI或構建自己的默認UI。
該庫已發布給Mirego的公共Maven存儲庫,因此請確保您將其包含在您的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和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()函數包括在內,因此從公共模塊自動解析了示例UI。
如果您在編譯過程中使用重複的META-INF/versions/9/previous-compilation-data.bin文件,則可以將其添加到Android App的build.gradle.gradle.kts文件中的排除資源中:
android {
packaging {
resources {
excludes + = listOf (
" META-INF/versions/9/previous-compilation-data.bin "
)
}
}
}如果要在iOS上使用示例UI,請在應用程序的Podfile中包含POD:
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
在您的公共模塊中,使用@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
)配置完成後,您可以運行kspCommonMainMetadata Gradle任務以生成項目的特定文件。
現在,您應該有MyProjectDebugPanelUseCase.kt , MyProjectDebugPanelUseCaseImpl.kt , MyProjectDebugPanelRepository.kt和MyProjectDebugPanelRepositoryImpl.kt and your class path中可用。
您現在需要做的就是實例化實現:
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 */ )
)
}您可以在createViewData()函數的componentsVisibility參數中控制每個組件的可見性。
例子:
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)註釋來覆蓋此行為。
對於典範而言,這在您需要用該舊調試面板並保留原始密鑰的情況下很有用。
例子:
@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是一支充滿激情的人的團隊,他們認為工作是您可以創新並獲得樂趣的地方。我們是一支由才華橫溢的人組成的團隊,他們想像並建立了美麗的網絡和移動應用程序。我們聚集在一起分享想法並改變世界。
我們也喜歡開源軟件,我們盡力回饋社區。