подробнее
Я хочу присвоить начальное значение свойства типа 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 }
}
}
Код: Выделить всё
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 с помощью фиктивного 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