👏

onDismissはDismissActionで呼ばれる

2024/07/27に公開

.sheet(item:onDismiss:content:) onDismiss はユーザーのインタラクションでしか呼ばれない」のような情報がネットにあったので検証してみました。

結果

@Environment(\.dismiss) var dismiss を利用した閉じるアクションだとちゃんと呼ばれるのを確認できました。

検証コード

気になる方はお手元でご検証ください。

struct ContentView: View {
    
    @State private var isModalPresented: Bool = false
    
    @State private var text: String = "Present Modal"
    
    var body: some View {
        Button(text) {
            isModalPresented = true
        }
        .sheet(isPresented: $isModalPresented, onDismiss: {
            text = "On Dismiss Called"
        }, content: {
            ModalView()
        })
    }
    
}

struct ModalView : View {
    @Environment(\.dismiss) var dismiss
    
    var body: some View {
        Button("Dismiss") {
            dismiss()
        }
    }
    
}

#Preview {
    ContentView()
}
GitHubで編集を提案

Discussion