SDWebImage / SDWebImageSwiftUI

SwiftUI Image loading and Animation framework powered by SDWebImage
https://sdwebimage.github.io/SDWebImageSwiftUI
MIT License
2.14k stars 219 forks source link

AnimatedImage from data issue on 2.1.0 #228

Closed sjidkov closed 1 year ago

sjidkov commented 1 year ago

Hello,

First I want to say thank you for SDWebImageSwiftUI.

I recently upgraded to 2.1.0 and found an issue. When AnimatedImage is initiated from Data it no longer updates on data changes.

I have a view set up like the example below. On 2.0.2 it works as expected. On 2.1.0 the view shows an empty image even though avatarImageData loads correctly.

struct ExampleAnimatedView: View {
        @State var avatarImageData: Data? = nil

        var body: some View {
            AnimatedImage(data: self.avatarImageData ?? Data())
                .onAppear(perform: {
                    self.loadAvatarData()
                })
        }

          func loadAvatarData() {
                    ...
                   self.avatarImageData = data
              }
    }

Furthermore in other parts of the app I have AnimatedImage views that are display user selected data. So let's say user has image A loaded in an AnimatedImage. They use an image picker to select image b. AnimatedImage now shows image B. On 2.0.2 this works as expected. On 2.1.0 the AnimatedImage aways displays image A.

The issue seems to be caused by AnimatedImage imageModel_SwiftUI being a @StateObject. Changing imageModel_SwiftUI to @ObservedObject (AnimatedImage.swift l:104) fixed this issue. Other fixes introduced by 2.1.0 seem to remain with this change (tested on iOS 16).

Thank you,

Stanislav Jidkov

dreampiggy commented 1 year ago

Good catch. Will have a fix in v2.1.1

And, is there some detail explaination about differences between @StateObject vs @ObservedObject ? I previouslly assume that anything ObservableObject that created inside the View init method, should use @StateObject (else use @ObservedObject)

dreampiggy commented 1 year ago

@sjidkov See video in : https://github.com/SDWebImage/SDWebImageSwiftUI/issues/232#issuecomment-1253801702

dreampiggy commented 1 year ago

v2.2.0 released