繁体   English   中英

为什么我不能以模态方式将结构发送到下一个视图,但可以通过 Navigationlink (SwiftUI) 正常工作

[英]Why can't I send a struct to the next view modally but works well through Navigationlink (SwiftUI)

所以我正在创建一个基本的 Firebase 注册并使用 SwiftUI 登录应用程序。在注册页面中,我创建了一个用户并通过 Firebase 对其进行了身份验证,我得到的响应是 email 地址、用户 UID、全名。

然后我从中创建一个 User 结构,然后将该结构发送到HomeView 这是我的做法:

首先我声明这个用户结构:

@State var user = User()

然后当你点击注册按钮时:

    func handleRegisterTapped() {
    if self.password != confirmPassword {
        print("Error - Passwords don't match")
        self.showAlert = true
        return
    }
    
    print(self.email, self.password)
    
    Auth.auth().createUser(withEmail: self.email, password: self.password) { result, error in
        let id = result?.user.uid
        self.user = User(id: id, fullName: self.fullName, email: self.email)
        do {
            let _ = try db.collection("Users").addDocument(from: user)
            self.showHomeScreen = true
        }catch {
            print(error)
        }
        
    }
}

因此,此代码使用 email 地址和密码创建一个新用户,并创建一个User object 并将其也保存在 Firestore 用户集合中。

然后它触发showHomeScreen boolean 触发fullScreenCover模态:

.fullScreenCover(isPresented: $showHomeScreen, content: {
        HomeView(user: self.user)
  })

这是主HomeView

struct HomeView: View {

    @State var user: User
    var body: some View {
        Text("Welcome, \(user.fullName ?? "")")
    }
}

然而,新视图不显示全名,仅显示“欢迎”,仅此而已。 如果我对 NavigationLink 执行相同的方法,它会一直有效。 但不是模态视图。 我该如何处理。 任何帮助将不胜感激。 谢谢

您可以尝试将绑定传递给 HomeView,如下所示:

struct HomeView: View {
    @Binding var user: User  // <--- here
    var body: some View {
        Text("Welcome, \(user.fullName ?? "")")
    }
}

并打电话

.fullScreenCover(isPresented: $showHomeScreen, content: {
        HomeView(user: self.$user)   // <--- here
  })  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM