TimelineTileBuilder constructor
TimelineTileBuilder({
- required int itemCount,
- ContentsAlign contentsAlign = ContentsAlign.basic,
- NullableIndexedWidgetBuilder? contentsBuilder,
- NullableIndexedWidgetBuilder? oppositeContentsBuilder,
- NullableIndexedWidgetBuilder? indicatorBuilder,
- NullableIndexedWidgetBuilder? startConnectorBuilder,
- NullableIndexedWidgetBuilder? endConnectorBuilder,
- double? itemExtent,
- IndexedValueBuilder<
double> ? itemExtentBuilder, - IndexedValueBuilder<
double> ? nodePositionBuilder, - IndexedValueBuilder<
bool?> ? nodeItemOverlapBuilder, - IndexedValueBuilder<
double> ? indicatorPositionBuilder, - IndexedValueBuilder<
TimelineThemeData> ? themeBuilder,
Create a tile builder, which builds tiles using each component builder.
If each item has a fixed extent, use itemExtent
, and if each item has a
different extent, use itemExtentBuilder
.
TODO: need refactoring, is it has many builders...?
Implementation
factory TimelineTileBuilder({
required int itemCount,
ContentsAlign contentsAlign = ContentsAlign.basic,
NullableIndexedWidgetBuilder? contentsBuilder,
NullableIndexedWidgetBuilder? oppositeContentsBuilder,
NullableIndexedWidgetBuilder? indicatorBuilder,
NullableIndexedWidgetBuilder? startConnectorBuilder,
NullableIndexedWidgetBuilder? endConnectorBuilder,
double? itemExtent,
IndexedValueBuilder<double>? itemExtentBuilder,
IndexedValueBuilder<double>? nodePositionBuilder,
IndexedValueBuilder<bool?>? nodeItemOverlapBuilder,
IndexedValueBuilder<double>? indicatorPositionBuilder,
IndexedValueBuilder<TimelineThemeData>? themeBuilder,
}) {
assert(
itemExtent == null || itemExtentBuilder == null,
'Cannot provide both a itemExtent and a itemExtentBuilder.',
);
final effectiveContentsBuilder = _createAlignedContentsBuilder(
align: contentsAlign,
contentsBuilder: contentsBuilder,
oppositeContentsBuilder: oppositeContentsBuilder,
);
final effectiveOppositeContentsBuilder = _createAlignedContentsBuilder(
align: contentsAlign,
contentsBuilder: oppositeContentsBuilder,
oppositeContentsBuilder: contentsBuilder,
);
return TimelineTileBuilder._(
(context, index) {
final tile = TimelineTile(
mainAxisExtent: itemExtent ?? itemExtentBuilder?.call(context, index),
node: TimelineNode(
indicator: indicatorBuilder?.call(context, index) ??
Indicator.transparent(),
startConnector: startConnectorBuilder?.call(context, index),
endConnector: endConnectorBuilder?.call(context, index),
overlap: nodeItemOverlapBuilder?.call(context, index),
position: nodePositionBuilder?.call(context, index),
indicatorPosition: indicatorPositionBuilder?.call(context, index),
),
contents: effectiveContentsBuilder(context, index),
oppositeContents: effectiveOppositeContentsBuilder(context, index),
);
final theme = themeBuilder?.call(context, index);
if (theme != null) {
return TimelineTheme(
data: theme,
child: tile,
);
} else {
return tile;
}
},
itemCount: itemCount,
);
}