attach method
Implementation
@override
Widget? attach(BuildContext context, RecyclerViewController<T> controller) {
return controller.isValidItemCountingOrSnapping
? Flex(
direction: controller.orientation,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: controller.isGridMode
? List.generate(controller.rowCount, (rowIndex) {
final startIndex = controller.startIndex(rowIndex);
final endIndex = controller.endIndex(startIndex);
final isFlex = controller.isFlexibleMode;
Widget row = Flex(
direction: controller._orientationAsInverse,
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: controller.wrapper
? CrossAxisAlignment.stretch
: CrossAxisAlignment.start,
children: List.generate(controller.snapCount, (column) {
final itemIndex = startIndex + column;
final item = controller.getItem(itemIndex);
final isBuildMode = itemIndex < endIndex;
Widget child;
if (isBuildMode && item != null) {
child = builder(itemIndex, item);
} else {
child = const SizedBox();
}
if (controller.isFlexibleMode) {
child = Expanded(child: child);
}
if (isFlex && column != controller.snapCount - 1) {
child = Flex(
direction: controller._orientationAsInverse,
children: [
child,
SizedBox(
width: controller.isVerticalMode
? controller.spaceBetween
: null,
height: controller.isVerticalMode
? null
: controller.spaceBetween,
),
],
);
if (controller.isFlexibleMode) {
child = Expanded(child: child);
}
}
return child;
}),
);
if (isFlex && rowIndex != controller.rowCount - 1) {
row = Flex(
direction: controller.orientation,
children: [
row,
SizedBox(
width: controller.isVerticalMode
? null
: controller.spaceBetween,
height: controller.isVerticalMode
? controller.spaceBetween
: null,
),
],
);
}
return row;
})
: List.generate(controller.itemCount, (index) {
var item = controller.items[index];
var child = builder(index, item);
if (controller.isSpacer &&
controller.itemCount - 1 != index) {
return Flex(
direction: controller.orientation,
mainAxisSize: MainAxisSize.min,
children: [
child,
SizedBox(
width: controller.isVerticalMode
? null
: controller.spaceBetween,
height: controller.isVerticalMode
? controller.spaceBetween
: null,
),
],
);
} else {
return child;
}
}),
)
: null;
}