当 url 更改 SwiftUI 时强制重新加载图像

问题描述 投票:0回答:1

新功能(对于 swiftui),我想在 url 准备好后立即显示图像(刷新视图)。显然 State var 还不够。看起来 .onReceive 和发布者可能会有所帮助,但我很无助。 注意:我使用 KingFisher,但对于任何加载程序来说似乎都是相同的情况。情况似乎很特殊(创建视图时 url 未准备好),但这是一个更一般的主题:例如,当请求同步并且个人资料照片需要更新时当其他用户更改它时。

编辑:经过更多测试后,如果例如我们使用dispachQueue推迟一秒钟然后尝试更新,则视图似乎已更新。直接使用 firebase onAppear

检索值时不会更新
import SwiftUI
import Firebase
import Kingfisher


struct Test4: View {

    @State private var mProfilePhotoUrl: URL = URL(string:"0")!
 
 var body: some View {
    
 VStack(alignment: .center,spacing : 0){
           
           KFImage(mProfilePhotoUrl)
      
  }.onAppear(){
        setUpProfileElements()
       }
     
    }
    
    private func setUpProfileElements(){

    //    FirebaseRequest -> mProfilePhotoUrl = URL(string: User.profilePhoto)
     
    }
    
}
image swiftui loader event-receiver
1个回答
1
投票

这是jnpdx的答案。

我不知道原因 - 也许距离显示太近了,但视图不会随着 Firebase 请求 onAppear 更新,使用 id 强制刷新。

struct Test4: View {

    @State private var mProfilePhotoUrl: URL = URL(string:"0")!
    @State private var ID = 0 // *

 var body: some View {
    
 VStack(alignment: .center,spacing : 0){
           
           KFImage(mProfilePhotoUrl).id(ID) // * add id(ID) here
      
  }.onAppear(){
        setUpProfileElements()
       }
     
    }
    
    private func setUpProfileElements(){

    //    FirebaseRequest -> mProfilePhotoUrl = URL(string: User.profilePhoto)
     //                    *-> self.ID += 1*
    }
    
}
© www.soinside.com 2019 - 2024. All rights reserved.