问题描述
import SwiftUI
import iPhoneNumberField
import Firebase
//import FirebaseFirestoreSwift
import FirebaseDatabase
import FirebaseStorage
在这里,我按照教程制作了这样的状态变量。但是每次我在文本框中输入内容时,它们都会消失。而且我还尝试将信息推送到 firebase 实时数据库中。这是我无法做到的,因为文本不断消失。我的应用程序发生了什么?
class Formviewmodel: ObservableObject {
@State var firstName = ""
@State var lastName = ""
@State var userName = ""
@State var address = ""
@State var city = ""
@State var zipCode = ""
@State var phone = ""
@State var country = ""
}
var ref: DatabaseReference!
struct CreateProfile: View {
@StateObject var viewmodel = Formviewmodel()
@State private var isEditing = false
let ref = Database.database().reference()
var dateFormatter: DateFormatter {
let formatter = DateFormatter()
formatter.dateStyle = .long
return formatter
}
@State private var birthDate = Date()
@State private var date = Date()
var body: some View {
NavigationView {
vstack {
Form {
//Separates the text into Boxes
Section {
TextField("Username",text: $viewmodel.userName){ isEditing in
self.isEditing = isEditing
}
//TextField("Username",text: $userName)
}
Section {
TextField("First Name",text: $viewmodel.firstName)
TextField("Last Name",text: $viewmodel.lastName)
}
Section(header: Text("Enter Birthday")) {
vstack {
Text("Enter your birthday")
.font(.largeTitle)
DatePicker("Enter your birthday",selection: $date)
.datePickerStyle(GraphicalDatePickerStyle())
.frame(maxHeight: 400)
}
}
Section(header: Text("Enter your Mailing Address")) {
TextField("Street Address",text: $viewmodel.address)
TextField("City",text: $viewmodel.city)
TextField("Postal Code",text: $viewmodel.zipCode)
TextField("Country",text: $viewmodel.country)
}
Section(header: Text("Phone Number")) {
iPhoneNumberField(text: $viewmodel.phone)
.flagHidden(false)
.flagSelectable(true)
}
}.navigationTitle("Create Account")
Divider()
Button(action: {
//Push Data to firebase database here
ref.childByAutoId().setValue(["User": $viewmodel.userName,"First Name": $viewmodel.firstName,"Last Name": $viewmodel.lastName,"Address": $viewmodel.address,"City": $viewmodel.city,"Zipcode": $viewmodel.zipCode,"Country":
$viewmodel.country,"Phone":$viewmodel.phone
])
},label: {
Text("Save Profile")
.frame(width: 250,height: 50,alignment: .center)
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
})
.padding()
}
}
//This is the create account title
//.textColor(.black)
}
}
struct CreateProfile_Previews: PreviewProvider {
static var previews: some View {
CreateProfile()
.preferredColorScheme(.light)
}
}
解决方法
对我来说,Firestore 的导入似乎不正确。我看过很多教程,但没有一个以这种方式导入 Firestore,即使您取消注释也是如此。
我会在 Youtube 上观看 Waga Odongo 的 Instagram 克隆视频。他们涵盖了此类内容,并帮助我制作了可工作的 TextField。