为什么两个结果打印出来是一样的?
final list1 = [ "a", "b", "c" ];
final result1 = true ? list1 : list1..removeWhere((e) => e == "a");
print(result1); // prints ["b", "c"]
final list2 = [ "a", "b", "c" ];
final result2 = false ? list2 : list2..removeWhere((e) => e == "a");
print(result2); // prints ["b", "c"]
Run Code Online (Sandbox Code Playgroud)
这种情况仅发生在三元条件下。当在正常的 if-else 中时,这工作得很好。
我正在尝试创建一个自定义搜索栏;其中我使用Row()可组合项作为所有其他元素的容器。这里最后一个FloatingActionButton被挤压,但我希望它TextField是灵活的,以便它被缩短以容纳剩余的元素。
我已经知道一些解决方法,但我想要一个更好的解决方案。请参阅下文了解已知的解决方法及其缺点。
@Preview(showBackground = true, widthDp = 410)
@Composable
fun MyComposable() {
Row(Modifier.fillMaxWidth()) {
TextField(value = "Search", onValueChange = {})
FloatingActionButton(onClick = {}) {Icon(Icons.Filled.SkipNext, contentDescription = null)}
FloatingActionButton(onClick = {}) {Icon(Icons.Filled.Close, contentDescription = null)}
FloatingActionButton(onClick = {}) {Icon(Icons.Filled.Home, contentDescription = null)}
}
}
Run Code Online (Sandbox Code Playgroud)
ConstraintLayout(缺点:复杂。在很多情况下似乎有点矫枉过正。)CompositionLocalProvider提供 RTL LocalLayoutDirection。(缺点:看起来很老套。子组件的所有布局都变成了 RTL。例如文本字段图标和文本放置。)Button它的宽度是由其中的本地化文本确定的。)我正在创建一个下拉菜单,其中的项目包含一个文本元素和一个图标(中间有一个分隔符);但只有第一个文本完整显示。仅当有其他项目占用更多空间时,该图标才可见。

@Preview(showSystemUi = true)
@Composable
fun MyScreen() {
Box(Modifier.fillMaxSize(), Alignment.Center) {
Box() {
var expanded by remember { mutableStateOf(false) }
IconButton(onClick = { expanded = !expanded }) {
Icon(imageVector = Icons.Default.MoreVert, contentDescription = null)
}
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
MyMenuItem("item 1") // Icon visible
MyMenuItem("item 2") // Icon visible
MyMenuItem("item 3 long text") // Icon width shrunk to 0
MyMenuItem("item 4 long te") // Icon visible but shrunk
}
}
}
}
@Composable …Run Code Online (Sandbox Code Playgroud) 自版本 v0.19.0 起;offscreenLimit参数已被删除。如何使用其他技术禁用预加载?
@Composable
fun MyComposable(){
val pagerState = rememberPagerState()
HorizontalPager(
state = pagerState,
modifier = Modifier.fillMaxSize(),
count = itemList.size,
) { i ->
MyPage(i)
}
}
Run Code Online (Sandbox Code Playgroud)