Implementation: fix checking the username so it won't generate undefined behavior during ui rendering

This commit is contained in:
2026-05-06 20:00:37 +02:00
parent ec66ac93c0
commit 23fd16f88e
+21 -8
View File
@@ -17,17 +17,19 @@ struct ContentView: View {
@State private var notesClient: NoteEditingSessionClient?
@State private var ownPeer: OwnPeer?
var isUsernameValid: Bool {
username != "fallback_user" && !username.isEmpty
}
var body: some View {
NavigationStack {
List {
Section("Your notes") {
ForEach(notes) { note in
NavigationLink(note.name) {
let peer = ownPeer ?? .init(peer: .init(displayName: username))
if ownPeer == nil {
ownPeer = peer
if let ownPeer {
NoteEditorScreen(note: note, peer: ownPeer)
}
return NoteEditorScreen(note: note, peer: peer)
}
}
}
@@ -53,15 +55,26 @@ struct ContentView: View {
}
.onAppear {
notes = NotesStorage().loadNotes()
if notesClient == nil {
notesClient = .init(peer: .init(displayName: username))
if isUsernameValid {
setupSession()
}
notesClient?.startBrowsingForNotes()
}
.sheet(isPresented: .constant(username == "fallback_user" || username.isEmpty)) {
.onChange(of: username) { _, newUsername in
guard isUsernameValid else { return }
setupSession()
}
.sheet(isPresented: .constant(!isUsernameValid)) {
SetUserNameBottomSheetView(username: $username)
}
}
private func setupSession() {
notesClient?.stopBrowsingForNotes()
let peer = OwnPeer(peer: .init(displayName: username))
ownPeer = peer
notesClient = .init(peer: peer.peer)
notesClient?.startBrowsingForNotes()
}
}
#Preview {