@@ -244,3 +244,95 @@ class RenderCustomPaintOrderViewport extends RenderViewport {
244
244
};
245
245
}
246
246
}
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