范围条形图多区域颜色 Flutter
Range bar chart multiple zone colors Flutter
我想在 flutter 上找到一个库来进行这种类型的渲染,在单击所选区域时带有 return 回调。有什么想法吗?
最后我用了charts_flutter
使用的图表类型是:Stacked Fill Color Bar Chart
在我的示例中:我只需要一个栏,你会在changedListener
中找到回调,strokeWidthPxFn
用于制作白色边框的选定区域
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
class StackedHorizontalBarChart extends StatefulWidget {
@override
State<StatefulWidget> createState() => StackedHorizontalBarChartState();
}
class StackedHorizontalBarChartState extends State<StackedHorizontalBarChart>{
List<charts.Series> seriesList;
int count = 0;
int selected = 0;
@override
Widget build(BuildContext context) {
// For horizontal bar charts, set the [vertical] flag to false.
seriesList = _createSampleData(5 + count);
return new charts.BarChart(
seriesList,
animate: false,
//barGroupingType: charts.BarGroupingType.stacked,
vertical: false,
selectionModels: [
charts.SelectionModelConfig (
changedListener: (charts.SelectionModel model) {
//final selectedDatum = model.selectedDatum;
//SeriesDatum s = selectedDatum[model.selectedSeries[0].seriesIndex];
print (model.selectedSeries[0].id);
selected = model.selectedSeries[0].seriesIndex;
print (selected);
//count += 10;
setState(() {
});
},
),
],
// Configure a stroke width to enable borders on the bars.
defaultRenderer: new charts.BarRendererConfig(
groupingType: charts.BarGroupingType.stacked
),
);
}
/// Create series list with multiple series
List<charts.Series<OrdinalSales, String>> _createSampleData(i1) {
final desktopSalesData = [
new OrdinalSales('2014', i1),
];
final tableSalesData = [
new OrdinalSales('2014', 25),
];
final mobileSalesData = [
new OrdinalSales('2014', 10),
];
return [
new charts.Series<OrdinalSales, String>(
id: 'Desktop',
domainFn: (OrdinalSales sales, _) => sales.year, // X
measureFn: (OrdinalSales sales, _) => sales.sales, // Y
data: desktopSalesData,
colorFn: (_, __) => charts.MaterialPalette.white,
fillColorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault.lighter,
strokeWidthPxFn: (OrdinalSales sales, _) => selected == 0 ? 5 : 0,
),
new charts.Series<OrdinalSales, String>(
id: 'Tablet',
measureFn: (OrdinalSales sales, _) => sales.sales,
data: tableSalesData,
fillColorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
colorFn: (_, __) => charts.MaterialPalette.white,
domainFn: (OrdinalSales sales, _) => sales.year,
strokeWidthPxFn: (OrdinalSales sales, _) => selected == 1 ? 5 : 0,
),
new charts.Series<OrdinalSales, String>(
id: 'Mobile',
domainFn: (OrdinalSales sales, _) => sales.year,
measureFn: (OrdinalSales sales, _) => sales.sales,
data: mobileSalesData,
colorFn: (_, __) => charts.MaterialPalette.white,
fillColorFn: (_, __) => charts.MaterialPalette.black,
strokeWidthPxFn: (OrdinalSales sales, _) => selected == 2 ? 5 : 0,
),
];
}
}
/// Sample ordinal data type.
class OrdinalSales {
final String year;
final int sales;
OrdinalSales(this.year, this.sales);
}
我想在 flutter 上找到一个库来进行这种类型的渲染,在单击所选区域时带有 return 回调。有什么想法吗?
最后我用了charts_flutter
使用的图表类型是:Stacked Fill Color Bar Chart
在我的示例中:我只需要一个栏,你会在changedListener
中找到回调,strokeWidthPxFn
用于制作白色边框的选定区域
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
class StackedHorizontalBarChart extends StatefulWidget {
@override
State<StatefulWidget> createState() => StackedHorizontalBarChartState();
}
class StackedHorizontalBarChartState extends State<StackedHorizontalBarChart>{
List<charts.Series> seriesList;
int count = 0;
int selected = 0;
@override
Widget build(BuildContext context) {
// For horizontal bar charts, set the [vertical] flag to false.
seriesList = _createSampleData(5 + count);
return new charts.BarChart(
seriesList,
animate: false,
//barGroupingType: charts.BarGroupingType.stacked,
vertical: false,
selectionModels: [
charts.SelectionModelConfig (
changedListener: (charts.SelectionModel model) {
//final selectedDatum = model.selectedDatum;
//SeriesDatum s = selectedDatum[model.selectedSeries[0].seriesIndex];
print (model.selectedSeries[0].id);
selected = model.selectedSeries[0].seriesIndex;
print (selected);
//count += 10;
setState(() {
});
},
),
],
// Configure a stroke width to enable borders on the bars.
defaultRenderer: new charts.BarRendererConfig(
groupingType: charts.BarGroupingType.stacked
),
);
}
/// Create series list with multiple series
List<charts.Series<OrdinalSales, String>> _createSampleData(i1) {
final desktopSalesData = [
new OrdinalSales('2014', i1),
];
final tableSalesData = [
new OrdinalSales('2014', 25),
];
final mobileSalesData = [
new OrdinalSales('2014', 10),
];
return [
new charts.Series<OrdinalSales, String>(
id: 'Desktop',
domainFn: (OrdinalSales sales, _) => sales.year, // X
measureFn: (OrdinalSales sales, _) => sales.sales, // Y
data: desktopSalesData,
colorFn: (_, __) => charts.MaterialPalette.white,
fillColorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault.lighter,
strokeWidthPxFn: (OrdinalSales sales, _) => selected == 0 ? 5 : 0,
),
new charts.Series<OrdinalSales, String>(
id: 'Tablet',
measureFn: (OrdinalSales sales, _) => sales.sales,
data: tableSalesData,
fillColorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
colorFn: (_, __) => charts.MaterialPalette.white,
domainFn: (OrdinalSales sales, _) => sales.year,
strokeWidthPxFn: (OrdinalSales sales, _) => selected == 1 ? 5 : 0,
),
new charts.Series<OrdinalSales, String>(
id: 'Mobile',
domainFn: (OrdinalSales sales, _) => sales.year,
measureFn: (OrdinalSales sales, _) => sales.sales,
data: mobileSalesData,
colorFn: (_, __) => charts.MaterialPalette.white,
fillColorFn: (_, __) => charts.MaterialPalette.black,
strokeWidthPxFn: (OrdinalSales sales, _) => selected == 2 ? 5 : 0,
),
];
}
}
/// Sample ordinal data type.
class OrdinalSales {
final String year;
final int sales;
OrdinalSales(this.year, this.sales);
}