I have this code which allows the users to make upvote or downvote like stack overflow. My problem is that the Text("\(likes) UpVote").padding(.top, 8)
does not refresh immediately, instead the user should change the perspective to get the refreshed upvote/downvote.
How to improve that, so that the user can only click one time on one of them and it Changes them immediately?
This is how my code looks like:
import SwiftUI
import SDWebImageSwiftUI
import Firebase
struct PostCellCard : View {
var user = ""
var image = ""
var id = ""
var likes = ""
var comments = ""
var msg = ""
var body : some View{
VStack(alignment: .leading, content: {
HStack{
Image("person-icon-1675").resizable().frame(width: 35, height: 35).clipShape(Circle()).onTapGesture {
print("slide out menu ....")
}
HStack(alignment: .top){
VStack(alignment: .leading){
Text(user).fontWeight(.heavy)
Text(msg).padding(.top, 8)
}}
Spacer()
Button(action: {
}) {
Image("menu").resizable().frame(width: 15, height: 15)
}.foregroundColor(Color("darkAndWhite"))
}
if self.image != ""{
AnimatedImage(url: URL(string: image)).resizable().frame(height: 250)
}
HStack{
Button(action: {
let db = Firestore.firestore()
let like = Int.init(self.likes)!
db.collection("posts").document(self.id).updateData(["likes": "\(like - 1)"]) { (err) in
if err != nil{
print((err)!)
return
}
print("down updated....")
}
}) {
Image(systemName: "arrow.down.to.line.alt").resizable().frame(width: 26, height: 26)
}.foregroundColor(Color("darkAndWhite"))
Button(action: {
let db = Firestore.firestore()
let like = Int.init(self.likes)!
db.collection("posts").document(self.id).updateData(["likes": "\(like + 1)"]) { (err) in
if err != nil{
print((err)!)
return
}
print("up updated....")
}
}) {
Image(systemName: "arrow.up.to.line.alt").resizable().frame(width: 26, height: 26)
}.foregroundColor(Color("darkAndWhite"))
Spacer()
}.padding(.top, 8)
Text("\(likes) UpVote").padding(.top, 8)
Text("\(likes) DownVote").padding(.top, 8)
Text("View all \(comments) Comments")
}).padding(8)
}
}