Readd-widget key cache
continuous-integration/drone/pr Build is passing Details

This commit is contained in:
Sarah Jamie Lewis 2022-03-04 12:14:26 -08:00
parent 1fea540f9d
commit 6cc5146744
7 changed files with 16 additions and 11 deletions

View File

@ -32,7 +32,7 @@ const GroupConversationHandleLength = 32;
abstract class Message {
MessageMetadata getMetadata();
Widget getWidget(BuildContext context);
Widget getWidget(BuildContext context, Key key);
Widget getPreviewWidget(BuildContext context);
}

View File

@ -18,7 +18,7 @@ class FileMessage extends Message {
FileMessage(this.metadata, this.content);
@override
Widget getWidget(BuildContext context) {
Widget getWidget(BuildContext context, Key key) {
return ChangeNotifierProvider.value(
value: this.metadata,
builder: (bcontext, child) {
@ -42,7 +42,7 @@ class FileMessage extends Message {
return MessageRow(MalformedBubble());
}
return MessageRow(FileBubble(nameSuggestion, rootHash, nonce, fileSize, isAuto: metadata.isAuto));
return MessageRow(FileBubble(nameSuggestion, rootHash, nonce, fileSize, isAuto: metadata.isAuto), key: key);
});
}

View File

@ -17,7 +17,7 @@ class InviteMessage extends Message {
InviteMessage(this.overlay, this.metadata, this.content);
@override
Widget getWidget(BuildContext context) {
Widget getWidget(BuildContext context, Key key) {
return ChangeNotifierProvider.value(
value: this.metadata,
builder: (bcontext, child) {
@ -39,7 +39,7 @@ class InviteMessage extends Message {
return MessageRow(MalformedBubble());
}
}
return MessageRow(InvitationBubble(overlay, inviteTarget, inviteNick, invite));
return MessageRow(InvitationBubble(overlay, inviteTarget, inviteNick, invite), key: key);
});
}

View File

@ -9,11 +9,11 @@ class MalformedMessage extends Message {
MalformedMessage(this.metadata);
@override
Widget getWidget(BuildContext context) {
Widget getWidget(BuildContext context, Key key) {
return ChangeNotifierProvider.value(
value: this.metadata,
builder: (context, child) {
return MessageRow(MalformedBubble());
return MessageRow(MalformedBubble(), key: key);
});
}

View File

@ -48,7 +48,7 @@ class QuotedMessage extends Message {
}
@override
Widget getWidget(BuildContext context) {
Widget getWidget(BuildContext context, Key key) {
try {
dynamic message = jsonDecode(this.content);
@ -59,7 +59,7 @@ class QuotedMessage extends Message {
return ChangeNotifierProvider.value(
value: this.metadata,
builder: (bcontext, child) {
return MessageRow(QuotedMessageBubble(message["body"], messageHandler(bcontext, metadata.profileOnion, metadata.conversationIdentifier, ByContentHash(message["quotedHash"]))));
return MessageRow(QuotedMessageBubble(message["body"], messageHandler(bcontext, metadata.profileOnion, metadata.conversationIdentifier, ByContentHash(message["quotedHash"]))), key: key);
});
} catch (e) {
return MalformedBubble();

View File

@ -29,12 +29,13 @@ class TextMessage extends Message {
}
@override
Widget getWidget(BuildContext context) {
Widget getWidget(BuildContext context, Key key) {
return ChangeNotifierProvider.value(
value: this.metadata,
builder: (bcontext, child) {
return MessageRow(
MessageBubble(this.content),
key: key,
);
});
}

View File

@ -87,7 +87,11 @@ class _MessageListState extends State<MessageList> {
builder: (context, snapshot) {
if (snapshot.hasData) {
var message = snapshot.data as Message;
return message.getWidget(context);
// here we create an index key for the contact and assign it to the row. Indexes are unique so we can
// reliably use this without running into duplicate keys...it isn't ideal as it means keys need to be re-built
// when new messages are added...however it is better than the alternative of not having widget keys at all.
var key = Provider.of<ContactInfoState>(outerContext, listen: false).getMessageKey(contactHandle, messageIndex);
return message.getWidget(context, key);
} else {
return MessageLoadingBubble();
}