页面模板
为方便快速创建标准化的 Feature 页面,可使用以下模板(适配当前项目包名 com.joker.kit)。将代码复制到 Android Studio 的 File and Code Templates 中,或直接在文档中粘贴后按需修改变量。
使用方式:
File > Settings > Editor > File and Code Templates > Files,点击+新增模板,粘贴对应代码,并在Edit Variables中配置占位符(如PAGE_NAME、CN_NAME等)。
Screen 模板
kotlin
package com.joker.kit.feature.${FEATURE_NAME}.view
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import com.joker.kit.core.base.state.BaseNetWorkUiState
import com.joker.kit.core.designsystem.theme.AppTheme
import com.joker.kit.core.navigation.navigateBack
import com.joker.kit.core.ui.component.network.BaseNetWorkView
import com.joker.kit.core.ui.component.scaffold.AppScaffold
import com.joker.kit.core.ui.component.text.AppText
import com.joker.kit.feature.${FEATURE_NAME}.viewmodel.${PAGE_NAME}ViewModel
/**
* ${CN_NAME}路由
*
* @param viewModel ${CN_NAME} ViewModel
*/
@Composable
internal fun ${PAGE_NAME}Route(
viewModel: ${PAGE_NAME}ViewModel = hiltViewModel()
) {
val uiState by viewModel.uiState.collectAsState()
${PAGE_NAME}Screen(
uiState = uiState,
onRetry = viewModel::retryRequest,
)
}
/**
* ${CN_NAME}界面
*
* @param uiState UI 状态
* @param onRetry 重试回调
*/
@OptIn(ExperimentalMaterial3Api::class)
@Composable
internal fun ${PAGE_NAME}Screen(
uiState: BaseNetWorkUiState<Any> = BaseNetWorkUiState.Loading,
onRetry: () -> Unit = {},
) {
AppScaffold(
titleText = "${CN_NAME}",
onBackClick = { navigateBack() },
) {
BaseNetWorkView(
uiState = uiState,
onRetry = onRetry,
) { data ->
${PAGE_NAME}Content(data = data)
}
}
}
/**
* ${CN_NAME}内容视图
*/
@Composable
private fun ${PAGE_NAME}Content(data: Any) {
AppText(text = "${CN_NAME}")
}
/**
* ${CN_NAME}界面浅色主题预览
*/
@Preview(showBackground = true)
@Composable
internal fun ${PAGE_NAME}Preview() {
AppTheme {
${PAGE_NAME}Screen(uiState = BaseNetWorkUiState.Success(Any()))
}
}
/**
* ${CN_NAME}界面深色主题预览
*/
@Preview(showBackground = true)
@Composable
internal fun ${PAGE_NAME}PreviewDark() {
AppTheme(darkTheme = true) {
${PAGE_NAME}Screen(uiState = BaseNetWorkUiState.Success(Any()))
}
}说明:
- 页面内部直接使用
onBackClick = { navigateBack() },不再透传onBackClick参数。 - Route 只负责收集状态和分发业务回调,减少样板代码。
建议变量:
PAGE_NAME(如About)FEATURE_NAME(如user)CN_NAME(中文名称)
ViewModel 模板
kotlin
package com.joker.kit.feature.${FEATURE_NAME}.viewmodel
import com.joker.kit.core.base.viewmodel.BaseNetWorkViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
/**
* ${CN_NAME} ViewModel
*/
@HiltViewModel
class ${PAGE_NAME}ViewModel @Inject constructor(
) : BaseNetWorkViewModel<Any>() {
// TODO: 注入仓库并实现 requestApiFlow()
}根据实际场景可替换为 BaseViewModel、BaseNetWorkListViewModel 等。
模块级 Graph 模板
kotlin
package com.joker.kit.feature.${FEATURE_NAME}.navigation
import androidx.navigation3.runtime.EntryProviderScope
import androidx.navigation3.runtime.NavKey
import com.joker.kit.core.navigation.${FEATURE_NAME}.${ROUTE_GROUP}
import com.joker.kit.feature.${FEATURE_NAME}.view.${PAGE_NAME}Route
/**
* ${CN_NAME}模块导航图
*/
fun EntryProviderScope<NavKey>.${FEATURE_NAME}Graph() {
entry<${ROUTE_GROUP}.${ROUTE_NAME}> {
${PAGE_NAME}Route()
}
// 其他页面...
}说明:
- 导航按模块聚合在
*Graph.kt,不再为每个页面单独创建xxxNavigation.kt。 - 新页面只需在对应模块 Graph 增加一个
entry。
模块级 Navigator 模板
kotlin
package com.joker.kit.core.navigation.${FEATURE_NAME}
import com.joker.kit.core.navigation.navigate
/**
* ${CN_NAME}模块导航封装
*/
object ${FEATURE_NAME_CAPITAL}Navigator {
/**
* 跳转到${CN_NAME}
*/
fun to${PAGE_NAME}() {
navigate(${ROUTE_GROUP}.${ROUTE_NAME})
}
}说明:
- 页面跳转入口收敛到模块
Navigator。 - 业务层优先调用模块导航方法,避免散落硬编码路由。
Android Studio 配置步骤(简述)
- 打开
File > Settings > Editor > File and Code Templates > Files。 - 点击
+,分别创建Compose Screen、Compose ViewModel、Module Graph、Module Navigator模板。 - 粘贴上述代码,并在
Edit Variables中配置默认值(如FEATURE_NAME、PAGE_NAME)。 - 保存后即可通过
New快速生成文件。
使用建议
- 模板生成后务必补全实际数据类型(例如
Any改为GoodsDetail)。 - 新增页面时优先修改模块
*Graph.kt和模块*Navigator.kt,保持职责清晰。 - 结合“创建页面流程”文档使用,可快速完成页面、状态与导航接入。