С помощью SwiftUI вывести пользователя с экрана входа на другой экран? - PullRequest
3 голосов
/ 30 октября 2019

Я пытаюсь выяснить, как лучше всего перевести пользователя с экрана входа в систему на другой экран. Это то, что я имею до сих пор:

struct ContentView: View {
  @EnvironmentObject var userManager: UserManager

    var body: some View {
      VStack {
        if userManager.user == nil {
          SignInView()
        } else {
          MainView().transition(.slide)
        }
      }
    }
}

Идея состоит в том, что изначально userManager.user будет nil, и поэтому я покажу SignInView. Когда пользователь входит в систему, свойство user обновляется и, поскольку оно равно @Published, body из ContentView должно скользить в MainView.

Это правильный подход? Я также не вижу скольжения MainView. Вместо этого он просто появляется на экране.

Спасибо!


[Обновить]

Это MainView

struct MainView: View {
  @EnvironmentObject var userManager: UserManager

    var body: some View {
      NavigationView {
        if self.userManager.user != nil {
          List(...) { 
            ...
      }
    } else {
      Text("No User")
    }

  }
}

}

1 Ответ

2 голосов
/ 30 октября 2019

Ниже приведен пример проекта. Для перехода вам понадобится блок анимации, чтобы он работал идеально.

class UserManager: ObservableObject{
@Published var user : String?
}

struct ContentView: View {

 @EnvironmentObject var userManager: UserManager

var body: some View {
    VStack{

     if userManager.user == nil {
        SignInView(user: $userManager.user).animation(nil)
        }
     else{
        MainView().environmentObject(userManager).animation(Animation.spring().speed(1.0)).transition(.move(edge: .trailing))
        }
  }
}
}

struct SignInView: View {
@Binding var user: String?

var body: some View {
    Button("adding a user", action: {
        self.user = " test"
    }
    )
}
}

struct MainView: View {
@EnvironmentObject var userManager: UserManager

var body: some View {
  VStack {
    if self.userManager.user != nil {
        List(0..<10) {
            Text(self.userManager.user! + "\($0)")
      }
} else {
  Text("No User")
}
 }
  }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...