selectDataPoints method
Selects or deselects the specified data point in the series.
The following are the arguments to be passed.
pointIndex
- index of the data point that needs to be selected.seriesIndex
- index of the series in which the data point is selected.
Where the pointIndex
is a required argument and seriesIndex
is an
optional argument. By default, 0 will be considered as the series index.
Thus it will take effect on the first series if no value is specified.
For circular, pyramid and funnel charts, series index should always be 0, as it has only one series.
If the specified data point is already selected, it will be deselected,
else it will be selected. Selection type and multi-selection functionality
is also applicable for this, but it is based on
the API values specified in ChartSelectionBehavior
.
Note: Even though, the enable property in ChartSelectionBehavior
is
set to false, this method will work.
late SelectionBehavior selectionBehavior;
void initState() {
selectionBehavior = SelectionBehavior(
enable: true
);
super.initState();
}
Widget build(BuildContext context) {
return Column(
children: [
TextButton(
onPressed: () {
setState(() {
select();
});
},
child: Text('Select data points')
),
SfCartesianChart(
series: <BarSeries<SalesData, num>>[
BarSeries<SalesData, num>(
selectionBehavior: selectionBehavior
)
]
)
]
);
}
void select() {
selectionBehavior.selectDataPoints(3);
}
Implementation
void selectDataPoints(int pointIndex, [int seriesIndex = 0]) {
RenderChartPlotArea? plotArea;
if (parentBox is RenderChartPlotArea) {
plotArea = parentBox as RenderChartPlotArea;
} else if (parentBox is RenderBehaviorArea) {
final RenderBehaviorArea behaviorArea = parentBox as RenderBehaviorArea;
plotArea = behaviorArea.plotArea;
}
if (plotArea == null) {
return;
}
ChartSeriesRenderer? seriesRenderer;
RenderBox? child = plotArea.firstChild;
while (child != null) {
final ContainerParentDataMixin<RenderBox> childParentData =
child.parentData! as ContainerParentDataMixin<RenderBox>;
if (child is ChartSeriesRenderer && child.index == seriesIndex) {
seriesRenderer = child;
break;
}
child = childParentData.nextSibling;
}
if (seriesRenderer != null &&
seriesRenderer.selectionBehavior != null &&
seriesRenderer.selectionBehavior!.enable) {
plotArea.selectionController.updateSelection(
seriesRenderer,
seriesIndex,
pointIndex,
seriesRenderer.selectionBehavior!.toggleSelection,
selectionType: plotArea.selectionMode,
);
}
}