I am just starting to learn swift and firebase. I want to add a search bar that will allow users to search through my firebase database. This is what I want to get:
I have added the search bar, what I'm having a problem with is the display of search results. Can you please show me what code I need to get data from the database? Please Help! Thanks!
import SwiftUI
import Firebase
struct ContentView: View {
@ObservedObject var data = getData()
var body: some View {
NavigationView{
ZStack(alignment: .top){
GeometryReader{_ in
// Home View....
Text("Home")
}.background(Color("Color").edgesIgnoringSafeArea(.all))
CustomSearchBar(data: self.$data.datas).padding(.top)
}.navigationBarTitle("")
.navigationBarHidden(true)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct CustomSearchBar : View {
@State var txt = ""
@Binding var data : [dataType]
var body : some View{
VStack(spacing: 0){
HStack{
TextField("Search", text: self.$txt)
if self.txt != ""{
Button(action: {
self.txt = ""
}) {
Text("Cancel")
}
.foregroundColor(.black)
}
}.padding()
if self.txt != ""{
if self.data.filter({$0.name.lowercased().contains(self.txt.lowercased())}).count == 0{
Text("No Results Found").foregroundColor(Color.black.opacity(0.5)).padding()
}
else{
List(self.data.filter{$0.name.lowercased().contains(self.txt.lowercased())}){i in
NavigationLink(destination: Detail(data: i)) {
Text(i.name)
}
}.frame(height: UIScreen.main.bounds.height / 5)
}
}
}.background(Color.white)
.padding()
}
}
class getData : ObservableObject{
@Published var datas = [dataType]()
init() {
let db = Firestore.firestore()
db.collection("items").getDocuments { (snap, err) in
if err != nil{
print((err?.localizedDescription)!)
return
}
for i in snap!.documents{
let id = i.documentID
let name = i.get("name") as! String
let msg = i.get("msg") as! String
self.datas.append(dataType(id: id, name: name, msg: msg))
}
}
}
}
struct dataType : Identifiable {
var id : String
var name : String
var msg : String
}
struct Detail : View {
var data : dataType
var body : some View{
Text(data.msg)
}
}
