build method

  1. @override
Widget build(
  1. BuildContext context
)
override

Overrides StatelessWidget.build to handle expansion, sliver, and interactions.

Inputs: Build context. Outputs: Expander if children present, else sliver or standard tile. Logic: Asserts no children in sliver mode; builds via buildTile or buildSliver; for expansion, uses Expander with animations (fadeIn for children, divider separator); ignores pointer on header to prevent conflicts; applies blurIn for smooth entry.

Implementation

@override
Widget build(BuildContext context) {
  assert((sliver && children.isEmpty) || !sliver,
      'Sliver tiles cannot have children');

  Widget _build(BuildContext context) => onPressed != null
      ? GhostButton(
          onPressed: onPressed,
          density: ButtonDensity.compact,
          child: buildTile(context))
      : buildTile(context);

  if (children.isNotEmpty) {
    return Expander(
      initiallyExpanded: initiallyExpanded,
      controller: expansionController,
      duration: expandDuration,
      reverseDuration: expandReverseDuration,
      curve: expandCurve,
      alignment: expandAlignment,
      gapPadding: expanderGapPadding,
      crossAxisAlignment: expanderCrossAxisAlignment,
      header: Builder(
          builder: (context) => IgnorePointer(
                ignoring: true,
                child: _build(context),
              )),
      overrideSeparator: Divider().animate().fadeIn(
            duration: expandDuration * 4,
            curve: expandCurve,
          ),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          ...children.mapIndexed((i, index) => i.animate().fadeIn(
              duration: expandDuration * 4,
              curve: expandCurve,
              delay: Duration(milliseconds: 40 * index)))
        ],
      ),
    );
  }

  return sliver ? buildSliver(context) : _build(context);
}