我正在尝试调整可组合项中标签的开始填充TextSearchBar。
我知道一种选择是使用BasicTextField可组合项,但我想避免这种情况并通过添加来使用contentPadding参数(jeran 在下面的帖子中提到)。decorationBoxandroidx.compose.material:material:1.2.0-alpha04
我在添加decorationBox 时遇到困难(不太熟悉lambda 参数函数的工作原理)。请帮助我如何实现decorationBox来调整标签文本的开始填充?
删除 jetpack compose textfield 上的默认填充。
@Composable
fun TextSearchBar(
modifier: Modifier = Modifier,
value: String,
label: String,
onDoneActionClick: () -> Unit = {},
onClearClick: () -> Unit = {},
onFocusChanged: (FocusState) -> Unit = {},
onValueChanged: (String) -> Unit,
) {
TextField(
value = value,
onValueChange = { query ->
onValueChanged(query)
},
modifier = modifier
.padding(horizontal = 4.dp, vertical = 0.dp)
.fillMaxWidth()
.onFocusChanged { onFocusChanged(it) }, …Run Code Online (Sandbox Code Playgroud) EventHandler.sharedFlow单击按钮时会发出热流。
Repository该流由在 中执行某些操作接收OnEach{}。
EventCollectorA然后,两个事件收集器和接收存储库流EventCollectorB。
然后,事件收集器流被组合并收集在 中MyViewModel。
这两个事件收集器会导致onEach{...}每次单击时运行两次。但是我只想运行onEach{...}一次并在两个事件收集器中接收它。我怎样才能实现这个目标?
注意:我使用 Hilt 只拥有一个Repository,EventCollectorA实例EventCollectorB
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
binding.buttonB.setOnClickListener {
viewModel.userClickEvent("Click Event")
}
}
}
Run Code Online (Sandbox Code Playgroud)
@HiltViewModel
class MyViewModel @Inject constructor(
private val eventHandler: EventHandler,
private val eventCollectorA: EventCollectorA,
private val eventCollectorB: EventCollectorB,
) : ViewModel() { …Run Code Online (Sandbox Code Playgroud) 我在一些下载文件中看到它,例如OpenJDK21U-jdk_x64_linux_hotspot_2023-08-09-06-56.tar.gz?
一些 github 分支也带有“U”后缀。
如何让下面的流量收集器收到“hello”?收集器正在调用,myFunction1()而收集器又调用myFunction2(). 两者都是挂起函数。
目前,当我点击运行并且没有收到流量时,什么也没有发生。我在这里错过了什么吗?
CoroutineScope(IO).launch {
val flowCollector = repo.myFunction1()
.onEach { string ->
Log.d("flow received: ", string)
}
.launchIn(GlobalScope)
}
Run Code Online (Sandbox Code Playgroud)
class Repo {
suspend fun myFunction1(): Flow<String> = flow {
/*some code*/
myFunction2()
}
suspend fun myFunction2(): Flow<String> = flow {
/*some code*/
emit("hello")
}
}
Run Code Online (Sandbox Code Playgroud)