问题描述
我有一个带有列表的 MasterView
。
通过单击项目,会显示 DetailView
。
我正在通过 NavigationLink
以标准 SwiftUI 方式实现这一点。
我将 detailState
作为参数传递给 DetailView。
我期待在显示 DetailView
屏幕时,
对 detailState
的任何更改仍会触发对 DetailView 的更新。
(首先显示“正在加载...”屏幕,然后在完全加载时显示数据)
但这似乎没有发生。
如果 detailState
值发生变化,则不会触发视图更新。
(数据完全加载后仍显示“loading...”信息)
struct MasterView: View {
var state : AppState
let model : Model
var body: some View {
NavigationView {
List {
Section(header: MasterListHeader(masterState: state.masterState)) {
ForEach (state.masterState.itemsList,id: \.nome) { row in
NavigationLink(destination: DetailView(detailState: state.detailState)) {
MasterRow(row: row,model: model)
}
}
}
}
}
}
}
struct DetailView: View {
var detailState: DetailState
let model : Model
var body: some View {
vstack {
if (detailState.itemDetails.isEmpty) {
LoadingScreen()
} else {
DataScreen()
}
}.onAppear {
model.loadDetailItem(nome: detailState.itemName)
}
}
}
这里是定义源对象的地方:
class Appviewmodel: ObservableObject {
let coreModel : Model = Model()
@Published var appState : AppState = AppState()
init() {
coreModel.onChange { newState in
self.appState = newState
}
}
}
@main
struct iosApp: App {
@StateObject var vm = Appviewmodel()
var body: some Scene {
WindowGroup {
ContentView(state: vm.appState,model: vm.coreModel)
}
}
}
struct ContentView: View {
var state : AppState
let model : Model
var body: some View {
MasterView(state: state,model: model)
}
}
确保 DetailView
对 detailState
的变化做出反应的最佳设计是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)