attach method

  1. @override
Widget? attach(
  1. BuildContext context,
  2. RecyclerViewController<T> controller
)
override

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;
}