Jetpack Composable/Kotlin: Как сортировать коллекцию, созданную DataSource на основе ресурса

Я работаю над приложением с Jetpack Composable и Kotlin.

У меня есть класс модели, содержащий строковый resourceId, и источник данных, который создает коллекцию объектов модели. Я хотел бы, чтобы эта коллекция была отсортирована на основе строкового ресурса, на который ссылается resourceId.

Но, по-видимому, stringResource() считается компонуемым (почему?), поэтому я не могу вызвать его в лямбда-функции List.sortedBy() ни в моем источнике данных, ни в моем пользовательском интерфейсе.

Какой хороший способ обойти это, чтобы я мог сортировать свою коллекцию в алфавитном порядке?

Моя модель:

Источник данных:

data class Topic(
    @StringRes val stringResourceId: Int,
    val attendees: Int = 0,
    @DrawableRes val imageResourceId: Int
)
class Datasource() {
    fun loadTopics(): List<Topic> {
        return listOf<Topic>(
            Topic(R.string.automotive, 0, R.drawable.automotive),
            Topic(R.string.biology, 0, R.drawable.biology),
        )
        // can't add .sortedBy({ stringResource(it.stringResourceId) })
        // because stringResource is composable (!?!) but lambdas are not
    }
}
Владилен
Вопрос задан29 мая 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.