Skip to content

Commit 8702ad3

Browse files
committed
msglist [nfc]: Introduce MessageListScrollView, not yet doing anything different
1 parent fea0c4e commit 8702ad3

File tree

2 files changed

+93
-1
lines changed

2 files changed

+93
-1
lines changed

lib/widgets/message_list.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ class _MessageListState extends State<MessageList> with PerAccountStoreAwareStat
631631
sliver = SliverSafeArea(sliver: sliver);
632632
}
633633

634-
return CustomPaintOrderScrollView(
634+
return MessageListScrollView(
635635
// TODO: Offer `ScrollViewKeyboardDismissBehavior.interactive` (or
636636
// similar) if that is ever offered:
637637
// https://github.com/flutter/flutter/issues/57609#issuecomment-1355340849

lib/widgets/scrolling.dart

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,3 +244,95 @@ class RenderCustomPaintOrderViewport extends RenderViewport {
244244
};
245245
}
246246
}
247+
248+
/// A version of [CustomScrollView] adapted for the Zulip message list.
249+
///
250+
/// This lets us customize behavior in ways that aren't currently supported
251+
/// by the fields of [CustomScrollView] itself.
252+
class MessageListScrollView extends CustomPaintOrderScrollView {
253+
const MessageListScrollView({
254+
super.key,
255+
super.scrollDirection,
256+
super.reverse,
257+
super.controller,
258+
super.primary,
259+
super.physics,
260+
super.scrollBehavior,
261+
// super.shrinkWrap, // omitted, always false
262+
super.center,
263+
super.anchor,
264+
super.cacheExtent,
265+
super.slivers,
266+
super.semanticChildCount,
267+
super.dragStartBehavior,
268+
super.keyboardDismissBehavior,
269+
super.restorationId,
270+
super.clipBehavior,
271+
super.hitTestBehavior,
272+
super.paintOrder,
273+
});
274+
275+
@override
276+
Widget buildViewport(BuildContext context, ViewportOffset offset,
277+
AxisDirection axisDirection, List<Widget> slivers) {
278+
return MessageListViewport(
279+
axisDirection: axisDirection,
280+
offset: offset,
281+
slivers: slivers,
282+
cacheExtent: cacheExtent,
283+
center: center,
284+
anchor: anchor,
285+
clipBehavior: clipBehavior,
286+
paintOrder_: paintOrder_,
287+
);
288+
}
289+
}
290+
291+
/// The version of [Viewport] that underlies [MessageListScrollView].
292+
class MessageListViewport extends CustomPaintOrderViewport {
293+
MessageListViewport({
294+
super.key,
295+
super.axisDirection,
296+
super.crossAxisDirection,
297+
super.anchor,
298+
required super.offset,
299+
super.center,
300+
super.cacheExtent,
301+
super.cacheExtentStyle,
302+
super.slivers,
303+
super.clipBehavior,
304+
required super.paintOrder_,
305+
});
306+
307+
@override
308+
RenderViewport createRenderObject(BuildContext context) {
309+
return RenderMessageListViewport(
310+
axisDirection: axisDirection,
311+
crossAxisDirection: crossAxisDirection
312+
?? Viewport.getDefaultCrossAxisDirection(context, axisDirection),
313+
anchor: anchor,
314+
offset: offset,
315+
cacheExtent: cacheExtent,
316+
cacheExtentStyle: cacheExtentStyle,
317+
clipBehavior: clipBehavior,
318+
paintOrder_: paintOrder_,
319+
);
320+
}
321+
}
322+
323+
/// The version of [RenderViewport] that underlies [MessageListViewport]
324+
/// and [MessageListScrollView].
325+
class RenderMessageListViewport extends RenderCustomPaintOrderViewport {
326+
RenderMessageListViewport({
327+
super.axisDirection,
328+
required super.crossAxisDirection,
329+
required super.offset,
330+
super.anchor,
331+
super.children,
332+
super.center,
333+
super.cacheExtent,
334+
super.cacheExtentStyle,
335+
super.clipBehavior,
336+
required super.paintOrder_,
337+
});
338+
}

0 commit comments

Comments
 (0)