I have a view where realm object can be updated, and when I do that the view dismisses, and that’s unwanted behavior. What could be the problem here and possible solution?
struct CardView: View {
@ObservedRealmObject var card: Card
@State private var frontText: String = ""
@State private var backText: String = ""
@State private var isAlerPresented: Bool = false
@EnvironmentObject private var realmManager: RealmManager
@EnvironmentObject private var audioRecorder: AudioRecorder
var body: some View {
VStack {
TextField("", text: $frontText)
.padding(.bottom)
Divider()
TextField("", text: $backText)
.padding(.top)
}
.font(.system(size: 40, weight: .medium))
.minimumScaleFactor(0.5)
.multilineTextAlignment(.center)
.padding()
.onAppear {
print(card._id)
frontText = card.front
backText = card.back
}
.onDisappear {
print(card._id)
}
.toolbar {
ToolbarItem(placement: .confirmationAction) {
Button {
do {
try realmManager.realm?.write {
guard let card = card.thaw() else { return }
card.front = frontText
card.back = backText
}
} catch {
print(error.localizedDescription)
}
} label: {
Text("Update")
}
}
ToolbarItemGroup(placement: .keyboard) {
if let fileName = card.audioName {
Button {
isAlerPresented.toggle()
} label: {
Image(systemName: "trash.fill")
}
.alert("Delete audio file", isPresented: $isAlerPresented, actions: {
Button("Delete", role: .destructive) {
LocalFileManager.shared.delete(fileName)
do {
try realmManager.realm?.write {
guard let card = card.thaw() else { return }
card.audioName = nil
}
} catch {
print(error.localizedDescription)
}
}
})
.tint(.red)
Button {
SoundManager.shared.play(sound: fileName)
} label: {
Image(systemName: "play.fill")
}
}
Spacer()
Button {
} label: {
Image(systemName: "mic.fill.badge.plus")
.symbolRenderingMode(.palette)
.foregroundStyle(.green, .blue)
}
}
}
}
}