mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
ChannelMessageList and UserMessageList: switch to stable messageId for ForEach SwiftUI row identity
This commit is contained in:
parent
9982f24a51
commit
bce26c46de
2 changed files with 24 additions and 7 deletions
|
|
@ -60,12 +60,22 @@ struct ChannelMessageList: View {
|
|||
}
|
||||
|
||||
var body: some View {
|
||||
// Cast allPrivateMessages to an array for easier indexing and ForEach.
|
||||
let messages: [MessageEntity] = Array(allPrivateMessages)
|
||||
|
||||
// Precompute previous message
|
||||
let previousByID: [Int64: MessageEntity?] = {
|
||||
var dict = [Int64: MessageEntity?]()
|
||||
var prev: MessageEntity?
|
||||
for m in messages { dict[m.messageId] = prev; prev = m }
|
||||
return dict
|
||||
}()
|
||||
|
||||
ScrollViewReader { scrollView in
|
||||
ScrollView {
|
||||
LazyVStack {
|
||||
ForEach(allPrivateMessages.indices, id: \.self) { index in
|
||||
let message = allPrivateMessages[index]
|
||||
let previousMessage = index > 0 ? allPrivateMessages[index - 1] : nil
|
||||
ForEach(messages, id: \.messageId) { message in
|
||||
let previousMessage: MessageEntity? = previousByID[message.messageId] ?? nil
|
||||
|
||||
ChannelMessageRow(
|
||||
message: message,
|
||||
|
|
|
|||
|
|
@ -58,15 +58,22 @@ struct UserMessageList: View {
|
|||
|
||||
var body: some View {
|
||||
// Cast user.messageList to an array for easier indexing and ForEach.
|
||||
let messages = allPrivateMessages.compactMap { $0 as MessageEntity }
|
||||
let messages: [MessageEntity] = Array(allPrivateMessages)
|
||||
|
||||
// Precompute previous message
|
||||
let previousByID: [Int64: MessageEntity?] = {
|
||||
var dict = [Int64: MessageEntity?]()
|
||||
var prev: MessageEntity?
|
||||
for m in messages { dict[m.messageId] = prev; prev = m }
|
||||
return dict
|
||||
}()
|
||||
|
||||
VStack {
|
||||
ScrollViewReader { scrollView in
|
||||
ScrollView {
|
||||
LazyVStack {
|
||||
ForEach(messages.indices, id: \.self) { index in
|
||||
let message = messages[index]
|
||||
let previousMessage = index > 0 ? messages[index - 1] : nil
|
||||
ForEach(messages, id: \.messageId) { message in
|
||||
let previousMessage: MessageEntity? = previousByID[message.messageId] ?? nil
|
||||
|
||||
UserMessageRow(
|
||||
message: message,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue