我希望有一个最初包裹内容高度的 LazyColumn,但如果它达到一定高度(232dp),那么它会修复它的高度。在 XML 中,我会结合使用 maxHeight 和wrappContent,但我在 Compose 中找不到类似的东西?
通过 Viewmodel 中的 LiveData,我们可以像这样使用 switchMap 或 Transformations.map
val recipesList = cuisineType.switchMap { repository.getDisplayRecipes(it.cuisineType).asLiveData() }
Run Code Online (Sandbox Code Playgroud)
使用 StateFlow 实现此目的的最佳方法是什么?我知道我们可以像下面一样使用地图,但是这会返回 Flow<Flow<List<Recipe>>> ,这似乎不正确
val recipeListFlow = cuisineTypeStateFlow.map {
repository.getDisplayRecipes(it.cuisineType)
}
Run Code Online (Sandbox Code Playgroud) 我正在使用下面的代码尝试将焦点请求到文本字段并显示键盘。目前,文本字段确实请求焦点,但键盘无法显示。相同的代码在我正在处理的另一个项目中工作,但这里的区别是此代码位于可组合对话框内,而其他代码不是,所以我不确定是否是对话框导致键盘无法显示?
val textField = remember { FocusRequester() }
Dialog(onDismissRequest = {
openDialog.value = false
dialogInput.value = ""
}) {
Column(
modifier = Modifier
.height(274.dp)
.background(Color.Transparent)
.clickable {
openDialog.value = false
dialogInput.value = ""
}
) {
OutlinedTextField(
modifier = Modifier
.height(64.dp)
.background(Color.White)
.focusRequester(textField),
label = {
Text(
text = label,
style = MaterialTheme.typography.body2.copy(color = Color.Black)
)
},
value = dialogInput.value,
onValueChange = {
dialogInput.value = it
events.filterPlayers(it)
},
textStyle = MaterialTheme.typography.body2.copy(color = Color.Black),
colors = TextFieldDefaults.textFieldColors(
backgroundColor = Color.White,
unfocusedIndicatorColor …Run Code Online (Sandbox Code Playgroud) 使用 Jetpack Compose 和可组合项的布局预览需要一分钟多的时间才能加载,这听起来像是我的 Android Studio 的问题还是 compose 的问题?
我正在尝试加载向量,但不断收到此错误堆栈跟踪
java.lang.IllegalArgumentException: Unknown command for: R
at androidx.compose.ui.graphics.vector.PathNodeKt.toPathNodes(PathNode.kt:275)
at androidx.compose.ui.graphics.vector.PathParser.addNode(PathParser.kt:525)
at androidx.compose.ui.graphics.vector.PathParser.parsePathString(PathParser.kt:84)
at androidx.compose.ui.graphics.vector.VectorKt.addPathNodes(Vector.kt:72)
at androidx.compose.ui.graphics.vector.compat.XmlVectorParser_androidKt.parsePath(XmlVectorParser.android.kt:279)
at androidx.compose.ui.graphics.vector.compat.XmlVectorParser_androidKt.parseCurrentVectorNode(XmlVectorParser.android.kt:101)
at androidx.compose.ui.res.VectorResources_androidKt.loadVectorResourceInner(VectorResources.android.kt:81)
at androidx.compose.ui.res.VectorResources_androidKt.vectorResource(VectorResources.android.kt:62)
at androidx.compose.ui.res.VectorResources_androidKt.vectorResource(VectorResources.android.kt:52)
at com.tapmax.football.ui.screens.design.DesignScreenKt$KitPager$1.invoke(DesignScreen.kt:440)
at com.tapmax.football.ui.screens.design.DesignScreenKt$KitPager$1.invoke(DesignScreen.kt:439)
Run Code Online (Sandbox Code Playgroud)
我无法复制矢量的完整代码,因此我附加了一个图像,它只是一个法线矢量
还有其他人遇到过这个吗?正如这里的照片所示,我的表面背景是白色的,但在预览和应用程序中显示的是紫色。同样适用于文本视图,它们应该是黑色和灰色,但显示为紫色。
我的代码如下
@Composable
fun EditableSettingItem(setting: EditableSetting) {
Surface(color = Color(R.color.background),
modifier = Modifier.fillMaxWidth().height(86.dp)) {
Column (modifier = Modifier.fillMaxHeight()) {
Text(text = setting.settingName,
modifier = Modifier
.padding(start = 19.dp, top = 14.dp)
.wrapContentSize(),
style = TextStyle(fontFamily = FontFamily(Font(R.font.quicksand_regular)),
fontSize = 13.sp,
color = Color(R.color.sub_text)))
Row(modifier = Modifier
.padding(start = 16.dp, end = 16.dp, top = 16.dp)
.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween) {
Text(text = setting.action,
modifier = Modifier.wrapContentSize(),
style = TextStyle(fontFamily = FontFamily(Font(R.font.quicksand_regular)),
fontSize = 15.sp,
color = Color(R.color.main_text)))
Image(painter …Run Code Online (Sandbox Code Playgroud) 现在尝试使用 Flutter 构建 APK/App 捆绑包时多次遇到此问题,有人能告诉我问题是什么吗?它说我的 key.properties 文件缺少存储文件,但它肯定存在并且 100% 正确的路径
我的构建等级:
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
Run Code Online (Sandbox Code Playgroud)
我的 key.properties 文件(位于 flutter 项目的 android 文件夹中):
storePassword=******
keyPassword=******
keyAlias=*****
storeFile=/Users/user/keystore/my_app/*****.jks
Run Code Online (Sandbox Code Playgroud) 我需要将图像和文本视图定位到卡片的开头,并将子列水平居中对齐,但是正如您从照片中看到的那样,该列以某种方式拉伸了放置图像的屏幕的宽度,文本视图位于中心。任何人都可以看到我的代码有任何问题吗?
@Composable
fun TrainerCard(profile: TrainerProfile) {
Card(modifier = Modifier
.height(180.dp)
.fillMaxWidth()
.padding(4.dp)) {
Column(modifier = Modifier
.fillMaxHeight()
.width(120.dp)
.border(1.dp, color = Color.Red),
horizontalAlignment = Alignment.CenterHorizontally) {
Image(
modifier = Modifier
.size(120.dp)
.padding(top = 4.dp, start = 4.dp),
painter = painterResource(R.drawable.pokepals_logo),
contentDescription = null
)
Text(
text = profile.trainerName,
style = MaterialTheme.typography.subtitle1)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在将 constrainAs 与 Jetpack Compose 结合使用,以将 wifi 选项列表约束到父视图的顶部,然后约束到文本视图的底部。从照片中可以看出,我的列表没有被限制在父级的顶部或它下面的 textview,它甚至被向上推离屏幕?
作为参考,'list' 是 wifi 选项列表,'text1' 是以“Select your wifi”开头的文本视图
@Composable
fun ScanWifiScreen(wifiList: List<WifiOption>, onClick: (WifiOption) -> Unit) {
ConstraintLayout(
modifier = Modifier
.fillMaxSize()
.background(colorResource(id = R.color.background))
) {
val (list, text1, text2, progressIndicator) = createRefs()
WifiList(
wifiOptions = wifiList,
onClick = onClick,
modifier = Modifier
.constrainAs(list) {
top.linkTo(parent.top, margin = 8.dp)
bottom.linkTo(text1.top)
start.linkTo(parent.start)
end.linkTo(parent.end)
}
.background(colorResource(id = R.color.background))
.fillMaxHeight())
Text(
text = stringResource(id = R.string.select_wifi),
modifier = Modifier
.wrapContentSize()
.padding(bottom = 16.dp)
.constrainAs(text1) …Run Code Online (Sandbox Code Playgroud) 我正在使用 Compose CollectAsState() 函数从此 StateFlow 收集
val _authToken = MutableStateFlow(AuthToken("", 0))
val authToken: StateFlow<AuthToken> = _authToken
val authToken by loginViewModel.authToken.collectAsState() // this returns AuthToken which is fine.
Run Code Online (Sandbox Code Playgroud)
但是,当使用 stateIn 运算符将冷流转换为状态流然后使用collectAsState() 时,它会返回对象的状态版本,这很奇怪,然后我需要在collectAsState() 上调用.value 来检索它。
有谁知道为什么会发生这种情况?
val user = repository.getUser(viewModelScope).stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), null)
val user = profileViewModel.user.collectAsState() // returns State<User>
Run Code Online (Sandbox Code Playgroud) 我希望结合 4 个 StateFlow 值并从中生成 1 个 StateFlow。我已经知道像这样的组合函数:
val buttonEnabled = cameraPermission.combine(micPermission) {
//some logic
}
Run Code Online (Sandbox Code Playgroud)
这怎么能用 4 个流来完成?当我尝试下面的操作时,我收到错误,参数太多,但是组合函数文档确实说您最多可以添加 5 个流?
val buttonEnabled = cameraPermission.combine(micPermission, locationPermission, contactsPermission) {
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 firebase 控制台上查看当前实时数据库的数据,但它显示为空。我肯定会正确写入数据库,因为当我使用 setValue 函数时,下面的侦听器会返回正确的信息。有谁知道在 firebase 控制台上反映是否只需要几个小时,或者我在这里缺少什么?
firebaseAuth.currentUser?.uid?.let {
db.getReference("users").child(it).addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
val user = snapshot.getValue(User::class.java)
Log.d("username", user?.username.toString())
Log.d("favSport", user?.favouriteSport.toString())
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
}
Run Code Online (Sandbox Code Playgroud)