@@ -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