Harden iOS app with audit fixes, UI consistency, and sheet race condition fixes
Applies verified fixes from deep audit (concurrency, performance, security, accessibility), standardizes CRUD form buttons to Add/Save pattern, removes .drawingGroup() that broke search bar TextFields, and converts vulnerable .sheet(isPresented:) + if-let patterns to safe presentation to prevent blank white modals. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,11 @@ import SwiftUI
|
||||
import PhotosUI
|
||||
import ComposeApp
|
||||
|
||||
/// Wrapper to retain the Kotlin ViewModel via @StateObject
|
||||
private class CompletionViewModelHolder: ObservableObject {
|
||||
let vm = ComposeApp.TaskCompletionViewModel()
|
||||
}
|
||||
|
||||
struct CompleteTaskView: View {
|
||||
let task: TaskResponse
|
||||
let onComplete: (TaskResponse?) -> Void // Pass back updated task
|
||||
@@ -9,7 +14,8 @@ struct CompleteTaskView: View {
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
@StateObject private var taskViewModel = TaskViewModel()
|
||||
@StateObject private var contractorViewModel = ContractorViewModel()
|
||||
private let completionViewModel = ComposeApp.TaskCompletionViewModel()
|
||||
@StateObject private var completionHolder = CompletionViewModelHolder()
|
||||
private var completionViewModel: ComposeApp.TaskCompletionViewModel { completionHolder.vm }
|
||||
@State private var completedByName: String = ""
|
||||
@State private var actualCost: String = ""
|
||||
@State private var notes: String = ""
|
||||
@@ -200,7 +206,7 @@ struct CompleteTaskView: View {
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
}
|
||||
.onChange(of: selectedItems) { newItems in
|
||||
.onChange(of: selectedItems) { _, newItems in
|
||||
Task {
|
||||
selectedImages = []
|
||||
for item in newItems {
|
||||
|
||||
Reference in New Issue
Block a user