fix: tab bar avatar button not update issue. resolve #383

This commit is contained in:
CMK 2022-04-29 15:45:32 +08:00
parent b2b81e27e8
commit d90b61e732
1 changed files with 27 additions and 6 deletions

View File

@ -106,6 +106,10 @@ class MainTabBarController: UITabBarController {
var _viewControllers: [UIViewController] = [] var _viewControllers: [UIViewController] = []
private(set) var isReadyForWizardAvatarButton = false private(set) var isReadyForWizardAvatarButton = false
// output
var avatarURLObserver: AnyCancellable?
@Published var avatarURL: URL?
init(context: AppContext, coordinator: SceneCoordinator) { init(context: AppContext, coordinator: SceneCoordinator) {
self.context = context self.context = context
@ -226,17 +230,34 @@ extension MainTabBarController {
.store(in: &disposeBag) .store(in: &disposeBag)
layoutAvatarButton() layoutAvatarButton()
$avatarURL
.receive(on: DispatchQueue.main)
.sink { [weak self] avatarURL in
guard let self = self else { return }
self.avatarButton.avatarImageView.setImage(
url: avatarURL,
placeholder: .placeholder(color: .systemFill),
scaleToSize: MainTabBarController.avatarButtonSize
)
}
.store(in: &disposeBag)
context.authenticationService.activeMastodonAuthentication context.authenticationService.activeMastodonAuthentication
.receive(on: DispatchQueue.main) .receive(on: DispatchQueue.main)
.sink { [weak self] activeMastodonAuthentication in .sink { [weak self] activeMastodonAuthentication in
guard let self = self else { return } guard let self = self else { return }
let avatarImageURL = activeMastodonAuthentication?.user.avatarImageURL() if let user = activeMastodonAuthentication?.user {
self.avatarButton.avatarImageView.setImage( self.avatarURLObserver = user.publisher(for: \.avatar)
url: avatarImageURL, .sink { [weak self, weak user] _ in
placeholder: .placeholder(color: .systemFill), guard let self = self else { return }
scaleToSize: MainTabBarController.avatarButtonSize guard let user = user else { return }
) guard user.managedObjectContext != nil else { return }
self.avatarURL = user.avatarImageURL()
}
} else {
self.avatarURLObserver = nil
}
// a11y // a11y
let _profileTabItem = self.tabBar.items?.first { item in item.tag == Tab.me.tag } let _profileTabItem = self.tabBar.items?.first { item in item.tag == Tab.me.tag }