Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 27 additions & 9 deletions lib/widget.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';

import './render.dart';
import 'models/alignments.dart';
import 'models/sticky_state.dart';
import 'models/types.dart';
import 'models/alignments.dart';

typedef InfiniteListItem<I> ItemBuilder<I>(BuildContext context, I index);

Expand Down Expand Up @@ -228,6 +229,15 @@ class InfiniteList extends StatefulWidget {
/// Proxy property for [ScrollView.physics]
final ScrollPhysics physics;

/// Additional slivers to be placed before the list.
final List<Widget> sliversBefore;

/// Additional slivers to be placed after the list.
final List<Widget> sliversAfter;

/// Divider.
final Widget divider;

final Key _centerKey;

InfiniteList({
Expand All @@ -242,6 +252,9 @@ class InfiniteList extends StatefulWidget {
this.cacheExtent,
this.scrollDirection = Axis.vertical,
this.physics,
this.sliversBefore = const [],
this.sliversAfter = const [],
this.divider,
}) : _centerKey =
(direction == InfiniteListDirection.multi) ? UniqueKey() : null,
super(key: key);
Expand All @@ -265,30 +278,35 @@ class _InfiniteListState extends State<InfiniteList> {
SliverList get _forwardList => SliverList(
delegate: SliverChildBuilderDelegate(
_buildListItem,
childCount: widget.posChildCount,
childCount: widget.posChildCount * 2 - 1,
),
key: widget._centerKey,
);

Widget _buildListItem(BuildContext context, int index) =>
_StickySliverListItem<int>(
streamController: _streamController,
index: index,
listItem: widget.builder(context, index),
);
Widget _buildListItem(BuildContext context, int index) => index.isEven
? _StickySliverListItem<int>(
streamController: _streamController,
index: index,
listItem: widget.builder(context, index ~/ 2),
)
: widget.divider;

List<SliverList> get _slivers {
List<Widget> get _slivers {
switch (widget.direction) {
case InfiniteListDirection.multi:
return [
...widget.sliversBefore,
_reverseList,
_forwardList,
...widget.sliversAfter,
];

case InfiniteListDirection.single:
default:
return [
...widget.sliversBefore,
_forwardList,
...widget.sliversAfter,
];
}
}
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ repository: https://github.com/TatsuUkraine/flutter_sticky_infinite_list
issue_tracker: https://github.com/TatsuUkraine/flutter_sticky_infinite_list/issues

environment:
sdk: ">=2.1.0 <3.0.0"
sdk: ">=2.2.2 <3.0.0"
flutter: ">=1.20.0-2.0.pre"

dependencies:
Expand Down