Я создал базовое c приложение для входа в firebase, используя swiftui (используя это руководство: https://www.youtube.com/watch?v=FhLEwqyVSjE). Все работает как надо.
В моем ContentView.swift я добавил TextField для изменения отображаемого имени пользователя. Чтобы сделать это, я добавил веселье changeDisplayName c в SessionStore.swift с такими логами c:
let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
changeRequest?.displayName = displayName
changeRequest?.commitChanges { (error) in
// ...
}
Веселье c вызывается кнопкой в моем ContentView. Изменение displayName работает также, но мой ContentView по-прежнему сохраняет старое displayName, пока я не перезапущу приложение, потому что только тогда ContentView снова вызывает session.listen()
и получает новое displayName из SessionStore.
Чтобы это исправить, я Вызывайте session.unbind()
, а затем session.listen()
в моем ContentView каждый раз, когда changeDisplayName fun c в моем SessionStore вызывается моим ContentView и не возвращает ошибку. Это работает, и мой ContentView перезагружается с новым displayName при каждом его изменении.
Это хорошая практика, или я упускаю более чистое решение этой проблемы?