Переменная состояния SwiftUI не отображает вид, если не используется изнутри (стихи в модификаторе)

Извините за ужасную формулировку, но в onAppear я меняю переменную состояния, однако это не приводит к повторной визуализации представления, если я не использую эту переменную состояния где-то внутри представления.

Я пытаюсь открыть модальное окно, если пользователь не вошел в систему, но он не появится, если я не добавлю переменную в представление, как показано ниже.

struct SearchView: View {
// Environment Variables
@EnvironmentObject var session: SessionStore

@State var sheetIsPresented: Bool = false

var body: some View {
    NavigationView {
        // Just having a line like this will cause it to work
        if self.sheetIsPresented || !self.sheetIsPresented {}
    }
    .onAppear {
        if self.session.userSession != nil {
            self.sheetIsPresented = true
        }
    }
    .sheet(isPresented: $sheetIsPresented) {
        WelcomeSignInModal(sheetIsPresented: self.$sheetIsPresented)
    }
}
}

1 ответ

Вы можете попробовать следующую демонстрацию:

class SessionStore: ObservableObject {
    var userSession: String? = "session"
}

struct ContentView: View {
    @EnvironmentObject var session: SessionStore

    @State var sheetIsPresented: Bool = false

    var body: some View {
        NavigationView {
            Text("SearchView")
        }
        .onAppear {
            self.sheetIsPresented = self.session.userSession != nil
        }
        .sheet(isPresented: $sheetIsPresented) {
            Text("WelcomeSignInModal")
        }
    }
}

Протестировано с Xcode 11.6, iOS 13.6

Другие вопросы по тегам