我将我的 gradle 文件从 groovy 迁移到 kotlin dsl。一切正常,但从另一个 kotlin 文件将值导入到 gradle 时出现问题。我可以导入变量并且自动完成工作正常,但是当我构建项目时,它给了我未解决的参考错误。感谢任何帮助。
摇篮版本:7.1.1
Android 工作室:北极狐
我在 buildSrc 下创建的 build.gradle.kts :
plugins {
`java-gradle-plugin`
`kotlin-dsl`
`kotlin-dsl-precompiled-script-plugins`
}
repositories {
mavenCentral()
}
Run Code Online (Sandbox Code Playgroud)
我从 buildSrc/src/main/java/Dependency 导入的文件:
object Versions {
const val compose_version = "1.0.0"
}
object Dependencies {
const val compose_ui = "androidx.compose.ui:ui:${Versions.compose_version}"
const val compose_material = "androidx.compose.material:material:${Versions.compose_version}"
const val compose_ui_tooling_preview = "androidx.compose.ui:ui-tooling-preview:${Versions.compose_version}"
const val compose_ui_tooling = "androidx.compose.ui:ui-tooling:${Versions.compose_version}"
const val compose_ui_test = "androidx.compose.ui:ui-test-junit4:${Versions.compose_version}"
}
Run Code Online (Sandbox Code Playgroud)
应用程序 build.gradle.kts 文件:
plugins {
id("com.android.application")
kotlin("android")
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 jetpack compose 开发示例聊天应用程序并与状态作斗争。我有包含消息的lazyColumn。我的问题是,当用户单击按钮时,即使我的列表得到更新,我的“ChatList”功能也不会重新组合。仅当“消息”状态发生变化时才重新组合。因此,在我向文本字段输入内容后,我可以在列表中看到之前添加的消息。
这是我的可组合项和视图模型:
@Composablefun ChatList() {
ConstraintLayout {
val (list, send) = createRefs()
val viewModel = viewModel<MainViewModel>()
val chatList by viewModel.messages.observeAsState(viewModel.messageList)
var message by rememberSaveable { mutableStateOf("") }
val state = rememberLazyListState()
LazyColumn(state = state, modifier = Modifier.constrainAs(list) {
top.linkTo(parent.top)
bottom.linkTo(send.top)
height = Dimension.fillToConstraints
}) {
items(chatList) { item ->
when (item.isMe) {
true -> ChatLayoutMe(item.message)
false -> ChatLayout(item.message)
}
}
}
SendMessage(message = message, modifier = Modifier.constrainAs(send) {
bottom.linkTo(parent.bottom)
}) {
message = it
}
}}
@Composablefun …Run Code Online (Sandbox Code Playgroud) 我正在从事撰写项目。我有简单的登录页面。单击登录按钮后,登录状态在视图模型中设置。问题是当我在服务调用后设置 loginState 时,我的可组合项会多次重新组合。因此,navcontroller 会进行多次导航。我不明白这个问题。谢谢你的帮助。
我的可组合项:
@Composable
fun LoginScreen(
navController: NavController,
viewModel: LoginViewModel = hiltViewModel()
) {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.SpaceEvenly
) {
val email by viewModel.email
val password by viewModel.password
val enabled by viewModel.enabled
if (viewModel.loginState.value) {
navController.navigate(Screen.HomeScreen.route) {
popUpTo(Screen.LoginScreen.route) {
inclusive = true
}
}
}
LoginHeader()
LoginForm(
email = email,
password = password,
onEmailChange = { viewModel.onEmailChange(it) },
onPasswordChange = { viewModel.onPasswordChange(it) }
)
LoginFooter(
enabled,
onLoginClick = {
viewModel.login()
},
onRegisterClick = {
navController.navigate(Screen.RegisterScreen.route) …Run Code Online (Sandbox Code Playgroud)