该库的主要目标是在您的通用代码中具有类定义,该定义指定了如何构建调试面板。使用此定义,库生成:
用例创建的视图数据列表可以传递给处理用户交互的内置视图模型。您可以选择使用库随附的默认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是一支充满激情的人的团队,他们认为工作是您可以创新并获得乐趣的地方。我们是一支由才华横溢的人组成的团队,他们想象并建立了美丽的网络和移动应用程序。我们聚集在一起分享想法并改变世界。
我们也喜欢开源软件,我们尽力回馈社区。