Возникали вопросы как работать со строками в Compose на UI и на data слое чтоб это выглядело удобно? А еще чтобы строки с разных источников были закрыты общей абстракцией и не нужно было разделять строки от пользователя,
string.xml и пришедшие с бекендаАвтор предлагает воспользоваться
sealed interface такого вида:sealed interface StringHolder {
// These are the 2 essential Holders
data class Value(val value: String) : StringHolder
data class Resource(@StringRes val resId: Int) : StringHolder
// These are additional and will come in handy!
class ParametrizedResource(@StringRes val resId: Int, vararg val formatArgs: Any) : StringHolder
class Plural(@PluralsRes val resId: Int, val count: Int, vararg val formatArgs: Any) : StringHolder
}Пример использования:
@Composable
fun ExampleText(stringHolder: StringHolder) {
Text(text = stringHolder.value)
}
class MessageDataSource(private val context: Context, private val api: Api) {
suspend fun sendMessage(message: StringHolder) {
api.sendMessage(message.fromContext(context))
}
}
Из минусов - конечно сложновато это адаптировать к CMP, да и протекание логики в UI может не соответствовать вашей архитектуре.
