EXPLICAÇÃO:
Eu tenho uma tela de orçamento
os princípios básicos da classe Home.kt estão aqui:
@Composable
fun Home(navController: NavController) {
var currentBalance = Budget.currentBalance
Column(
/* ... */
) {
/* ... */
}
}
o texto é determinado aqui (no fundo da coluna mostrada acima):
Text(
text = if (currentBalance>= 0) // this ternary operator adds the "$" and/or "-" cleanly
"\$${"%.${2}f".format(currentBalance)}" // eg. 2.56 -> $2.56
else "-\$${"%.${2}f".format(-currentBalance)}", // eg. -7.94 -> -$7.94
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.onPrimary,
style = MaterialTheme.typography.displayLarge
)
meus princípios básicos da classe Budget.kt estão aqui:
class Budget {
companion object {
var currentBalance: Double = 0.0
get() = field
private set(value) {
field = value
}
/* ... */
private fun AddBalance(funds: Double) {
Companion.currentBalance += funds
Save()
} // Adds money to Balance
private fun RemoveBalance(funds: Double) {
Companion.currentBalance -= funds
Save()
} // Removes money from Balance
/* ... */
}
}
AddBalance() e RemoveBalance() são chamados de outro método que lida com todas as transações com base em um tipo, confirmei por meio de logs que Budget.currentBalance está sendo alterado corretamente e se você reabrir o aplicativo (o saldo é salvo em um arquivo de texto ) ou recomponha-o por meio de atualizações ao vivo, o Texto é atualizado conforme o esperado;
o texto simplesmente não será recomposto instantaneamente.
SOLUÇÕES TENTATIVAS:
em primeiro lugar, tentei mudar Home().currentBalance para mutableDoubleState, pois é assim que outros valores fazem
@Composable
fun Home(navController: NavController) {
var currentBalance: MutableDoubleState = remember {
mutableDoubleStateOf(Budget.currentBalance)
}
Column(
/* ... */
)
}
mas isso não funcionou e concluí neste tópico que preciso alterar Home().currentBalance.value de alguma forma de Budget.Companion, mas não tenho certeza de como fazer isso, o exemplo de implementação foi confuso. nenhuma exceção ocorreu, meu aplicativo não trava; simplesmente não se recompõe quando eu quero.
por favor ajude :]
~kee
Componha as mudanças de controle do estado. Você não definiu nenhum estado dentro do seu objeto complementar. Altere seu campo de saldo atual para um objeto de estado mutável.
e também você precisa alterar seu método de adição e remoção.
então você pode usar o objeto currentBalance no elemento que pode ser composto assim
se você tiver preguiça de usar .value sempre para currentBalance, então
então seu método add seria
e você pode usar seu saldo atual no elemento que pode ser composto