我正在学习Kotlin ,这是我的第一个Kotlin .所以请耐心听我说.
所以,我有这个数据类:
data class Order(
var title: String,
var qty: Int,
var price: Int
) {
val total: Int
get() {
return qty * price
}
}
我创建了这项服务来处理订单:
class OrderService {
val orders: MutableList<Order> = mutableListOf()
fun addOrder(order: Order) {
orders.add(order)
println(order);
println(orders.count())
}
}
然后我将该示例修改为如下所示:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Learn1Theme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
val orderService = OrderService()
var counters = remember {
MutableStateFlow(orderService)
}
OrderCards(itemList = orderService.orders)
AddButton {
counters.apply {
orderService.addOrder(Order("newItem", 100, 20))
}
}
}
}
}
}
}
@Composable
fun OrderCards(itemList: List<Order>) {
LazyColumn {
items(items = itemList) {
ItemCard(item = it)
}
}
}
@Composable
fun ItemCard(item: Order) {
Card(
modifier = Modifier
.padding(8.dp)
.fillMaxWidth(),
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
Column {
Text(text = "Date: ${item.title}")
}
}
}
@Composable
fun AddButton(action: () -> Unit) {
Box {
FloatingActionButton(
onClick = action,
modifier = Modifier
.padding(16.dp)
.align(alignment = Alignment.BottomEnd)
) {
Icon(imageVector = Icons.Default.Add, contentDescription = "Add")
}
}
}
我看到了一些如何使用Flow的示例,但我不确定如何实现它,我确信我在那里做错了什么,因为我按下按钮后屏幕显然没有更新.
addButton工作,因为我可以看到,订单列表添加.它只是没有更新屏幕
有谁能帮我更新一下屏幕吗?
谢谢