Not sure if this would work.
But you could try something like this:
struct LoadingPreferenceKey: PreferenceKey {
var defaultValue: Bool = false
static func reduce(value: inout Self.Value, nextValue: () -> Self.Value) {
value = nextValue()
}
}
struct RootView: View {
@State var loading: Bool = false
var body: some View {
ContentView()
.fullScreenCover(isPresented: $loading) {
MyLoadingView()
}
.onPreferenceChange(LoadingPreferenceKey.self) { isLoading in
loading = true
}
}
}
struct ContentView: View {
@State private var showingSheet = false
var body: some View {
Button("Sheet Open") { self.showingSheet.toggle() }
.sheet(isPresented: $showingSheet) {
SheetView()
}
}
}
struct SheetView: View {
@State var isLoading = false
var body: some View {
ZStack{
VStack{
Text("SheetView")
Button("Submit Data"){
isLoading = true
// Submitting now......
isLoading = false
}
}
if isLoading {
ZStack{
Color.white.opacity(0.5)
.ignoresSafeArea()
.frame(width: geometry.size.width, height: geometry.size.height)
ProgressView()
}
}
}
.preference(LoadingPreferenceKey.self, isLoading)
}
}