Как присвоить возвращаемое значение функции @Composable свойству в классе?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как присвоить возвращаемое значение функции @Composable свойству в классе?

Сообщение Anonymous »

проблема
подробнее
Я хочу присвоить начальное значение свойства типа MutableStateFlow объекту в Android. p>
Но начальное значение является возвращаемым значением функции @Composable, поэтому НЕ разрешено использовать оператор присваивания для его присвоения. В противном случае компилятор выдаст ошибку.
Неправильный пример.

Код: Выделить всё

object MealsOptionRepository {
private val _selectedDataFlow: MutableStateFlow = MutableStateFlow(fetchData()[0])

...

@Composable
fun fetchData(): List {
return listOf(
MealsOptionVO(
R.drawable.breakfast_leading_icon,
stringResource(R.string.breakfast),
stringResource(R.string.breakfast_name),
),
MealsOptionVO(
R.drawable.lunch_leading_icon,
stringResource(R.string.lunch),
stringResource(R.string.lunch_name),
),
MealsOptionVO(
R.drawable.dinner_leading_icon,
stringResource(R.string.dinner),
stringResource(R.string.dinner_name),
),
MealsOptionVO(
R.drawable.supper_leading_icon,
stringResource(R.string.supper),
stringResource(R.string.supper_name),
),
)
}

// a method that set _selectedDataFlow.value to newData atomically
@Composable
fun setSelectedData(newData:MealsOptionVO){
_selectedDataFlow.update { newData }
}
}
где MealsOptionVO — класс данных, определенный следующим образом.

Код: Выделить всё

data class MealsOptionVO(
val innerIconId : Int,
val name : String, // actual name
val text : String, // alias name
)
Это выдаст ошибку компилятора

Код: Выделить всё

@Composable invocations can only happen from the context of a @Composable function
Я хочу инициализировать свойство _selectedDataFlow один раз, и поэтому я могу вызвать метод fetchData один раз (и я не могу вызвать его в методе получения свойства _selectedDataFlow.
И для удобства обслуживания я не инициализирую свойство _selectedDataFlow с помощью фиктивного MealsOptionVO (например, частный val _selectedDataFlow: MutableStateFlow = MutableStateFlow(1,"","") ), затем вызовите метод @Composable fetchData при запуске выполнения.
(например,

Код: Выделить всё

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
HealthHelperTheme {
MealsOptionRepository.setSelectedData(MealsOptionRepository.fetchData()[0])
Main()
}
}
}
}
)
Как я могу это сделать?
Признательность
Будем признательны за любой ответ или подсказку по этому вопросу.
Что я пробовал?
  • спросите учителя раньше Я опубликовал эту проблему несколько минут назад.
Чего я ожидал?
  • решить эту проблему.


Подробнее здесь: https://stackoverflow.com/questions/791 ... y-in-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»