Skip to content

Commit e429868

Browse files
committed
msglist [nfc]: Pull out a _buildItem method
This will help keep down complexity (and depth of indentation) as we make the list view more complex. In particular it will avoid duplication when we start having two back-to-back slivers that both contain message-list items.
1 parent adb3f12 commit e429868

File tree

1 file changed

+32
-28
lines changed

1 file changed

+32
-28
lines changed

lib/widgets/message_list.dart

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -329,36 +329,40 @@ class _MessageListState extends State<MessageList> with PerAccountStoreAwareStat
329329
if (i == 1) return MarkAsReadWidget(narrow: widget.narrow);
330330

331331
final data = model!.items[length - 1 - (i - 2)];
332-
switch (data) {
333-
case MessageListHistoryStartItem():
334-
return const Center(
335-
child: Padding(
336-
padding: EdgeInsets.symmetric(vertical: 16.0),
337-
child: Text("No earlier messages."))); // TODO use an icon
338-
case MessageListLoadingItem():
339-
return const Center(
340-
child: Padding(
341-
padding: EdgeInsets.symmetric(vertical: 16.0),
342-
child: CircularProgressIndicator())); // TODO perhaps a different indicator
343-
case MessageListRecipientHeaderItem():
344-
final header = RecipientHeader(message: data.message, narrow: widget.narrow);
345-
return StickyHeaderItem(allowOverflow: true,
346-
header: header, child: header);
347-
case MessageListDateSeparatorItem():
348-
final header = RecipientHeader(message: data.message, narrow: widget.narrow);
349-
return StickyHeaderItem(allowOverflow: true,
350-
header: header,
351-
child: DateSeparator(message: data.message));
352-
case MessageListMessageItem():
353-
final header = RecipientHeader(message: data.message, narrow: widget.narrow);
354-
return MessageItem(
355-
key: ValueKey(data.message.id),
356-
header: header,
357-
trailingWhitespace: i == 1 ? 8 : 11,
358-
item: data);
359-
}
332+
return _buildItem(data, i);
360333
});
361334
}
335+
336+
Widget _buildItem(MessageListItem data, int i) {
337+
switch (data) {
338+
case MessageListHistoryStartItem():
339+
return const Center(
340+
child: Padding(
341+
padding: EdgeInsets.symmetric(vertical: 16.0),
342+
child: Text("No earlier messages."))); // TODO use an icon
343+
case MessageListLoadingItem():
344+
return const Center(
345+
child: Padding(
346+
padding: EdgeInsets.symmetric(vertical: 16.0),
347+
child: CircularProgressIndicator())); // TODO perhaps a different indicator
348+
case MessageListRecipientHeaderItem():
349+
final header = RecipientHeader(message: data.message, narrow: widget.narrow);
350+
return StickyHeaderItem(allowOverflow: true,
351+
header: header, child: header);
352+
case MessageListDateSeparatorItem():
353+
final header = RecipientHeader(message: data.message, narrow: widget.narrow);
354+
return StickyHeaderItem(allowOverflow: true,
355+
header: header,
356+
child: DateSeparator(message: data.message));
357+
case MessageListMessageItem():
358+
final header = RecipientHeader(message: data.message, narrow: widget.narrow);
359+
return MessageItem(
360+
key: ValueKey(data.message.id),
361+
header: header,
362+
trailingWhitespace: i == 1 ? 8 : 11,
363+
item: data);
364+
}
365+
}
362366
}
363367

364368
class ScrollToBottomButton extends StatelessWidget {

0 commit comments

Comments
 (0)