1
0
mirror of https://github.com/flutter/samples.git synced 2025-11-09 22:38:42 +00:00

web/chart: fix sample (#909)

This commit is contained in:
Brett Morgan
2021-10-07 08:10:34 +11:00
committed by GitHub
parent 0fe216a1cf
commit 2d9ba2f9eb
118 changed files with 3655 additions and 3511 deletions

View File

@@ -27,11 +27,12 @@ class TimeSeriesConfidenceInterval extends StatelessWidget {
final List<charts.Series> seriesList;
final bool animate;
TimeSeriesConfidenceInterval(this.seriesList, {this.animate});
const TimeSeriesConfidenceInterval(this.seriesList, {this.animate, Key key})
: super(key: key);
/// Creates a [TimeSeriesChart] with sample data and no transition.
factory TimeSeriesConfidenceInterval.withSampleData() {
return new TimeSeriesConfidenceInterval(
return TimeSeriesConfidenceInterval(
_createSampleData(),
// Disable animations for image tests.
animate: false,
@@ -43,22 +44,22 @@ class TimeSeriesConfidenceInterval extends StatelessWidget {
// It is used for creating random series data to demonstrate animation in
// the example app only.
factory TimeSeriesConfidenceInterval.withRandomData() {
return new TimeSeriesConfidenceInterval(_createRandomData());
return TimeSeriesConfidenceInterval(_createRandomData());
}
/// Create random data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createRandomData() {
final random = new Random();
final random = Random();
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 26), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 3), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 10), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.time,
@@ -75,7 +76,7 @@ class TimeSeriesConfidenceInterval extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new charts.TimeSeriesChart(
return charts.TimeSeriesChart(
seriesList,
animate: animate,
// Optionally pass in a [DateTimeFactory] used by the chart. The factory
@@ -88,14 +89,14 @@ class TimeSeriesConfidenceInterval extends StatelessWidget {
/// Create one series with sample hard coded data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createSampleData() {
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), 5),
new TimeSeriesSales(new DateTime(2017, 9, 26), 25),
new TimeSeriesSales(new DateTime(2017, 10, 3), 100),
new TimeSeriesSales(new DateTime(2017, 10, 10), 75),
TimeSeriesSales(DateTime(2017, 9, 19), 5),
TimeSeriesSales(DateTime(2017, 9, 26), 25),
TimeSeriesSales(DateTime(2017, 10, 3), 100),
TimeSeriesSales(DateTime(2017, 10, 10), 75),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.time,

View File

@@ -26,11 +26,12 @@ class EndPointsAxisTimeSeriesChart extends StatelessWidget {
final List<charts.Series> seriesList;
final bool animate;
EndPointsAxisTimeSeriesChart(this.seriesList, {this.animate});
const EndPointsAxisTimeSeriesChart(this.seriesList, {this.animate, Key key})
: super(key: key);
/// Creates a [TimeSeriesChart] with sample data and no transition.
factory EndPointsAxisTimeSeriesChart.withSampleData() {
return new EndPointsAxisTimeSeriesChart(
return EndPointsAxisTimeSeriesChart(
_createSampleData(),
// Disable animations for image tests.
animate: false,
@@ -42,22 +43,22 @@ class EndPointsAxisTimeSeriesChart extends StatelessWidget {
// It is used for creating random series data to demonstrate animation in
// the example app only.
factory EndPointsAxisTimeSeriesChart.withRandomData() {
return new EndPointsAxisTimeSeriesChart(_createRandomData());
return EndPointsAxisTimeSeriesChart(_createRandomData());
}
/// Create random data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createRandomData() {
final random = new Random();
final random = Random();
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 26), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 3), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 10), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.time,
@@ -70,28 +71,28 @@ class EndPointsAxisTimeSeriesChart extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new charts.TimeSeriesChart(
return charts.TimeSeriesChart(
seriesList,
animate: animate,
// Configures an axis spec that is configured to render one tick at each
// end of the axis range, anchored "inside" the axis. The start tick label
// will be left-aligned with its tick mark, and the end tick label will be
// right-aligned with its tick mark.
domainAxis: new charts.EndPointsTimeAxisSpec(),
domainAxis: const charts.EndPointsTimeAxisSpec(),
);
}
/// Create one series with sample hard coded data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createSampleData() {
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), 5),
new TimeSeriesSales(new DateTime(2017, 9, 26), 25),
new TimeSeriesSales(new DateTime(2017, 10, 3), 100),
new TimeSeriesSales(new DateTime(2017, 10, 10), 75),
TimeSeriesSales(DateTime(2017, 9, 19), 5),
TimeSeriesSales(DateTime(2017, 9, 26), 25),
TimeSeriesSales(DateTime(2017, 10, 3), 100),
TimeSeriesSales(DateTime(2017, 10, 10), 75),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.time,

View File

@@ -31,11 +31,12 @@ class TimeSeriesLineAnnotationChart extends StatelessWidget {
final List<charts.Series> seriesList;
final bool animate;
TimeSeriesLineAnnotationChart(this.seriesList, {this.animate});
const TimeSeriesLineAnnotationChart(this.seriesList, {this.animate, Key key})
: super(key: key);
/// Creates a [TimeSeriesChart] with sample data and no transition.
factory TimeSeriesLineAnnotationChart.withSampleData() {
return new TimeSeriesLineAnnotationChart(
return TimeSeriesLineAnnotationChart(
_createSampleData(),
// Disable animations for image tests.
animate: false,
@@ -47,22 +48,22 @@ class TimeSeriesLineAnnotationChart extends StatelessWidget {
// It is used for creating random series data to demonstrate animation in
// the example app only.
factory TimeSeriesLineAnnotationChart.withRandomData() {
return new TimeSeriesLineAnnotationChart(_createRandomData());
return TimeSeriesLineAnnotationChart(_createRandomData());
}
/// Create random data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createRandomData() {
final random = new Random();
final random = Random();
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 26), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 3), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 10), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
domainFn: (TimeSeriesSales sales, _) => sales.time,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
@@ -74,13 +75,13 @@ class TimeSeriesLineAnnotationChart extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new charts.TimeSeriesChart(seriesList, animate: animate, behaviors: [
new charts.RangeAnnotation([
new charts.LineAnnotationSegment(
new DateTime(2017, 10, 4), charts.RangeAnnotationAxisType.domain,
return charts.TimeSeriesChart(seriesList, animate: animate, behaviors: [
charts.RangeAnnotation([
charts.LineAnnotationSegment(
DateTime(2017, 10, 4), charts.RangeAnnotationAxisType.domain,
startLabel: 'Oct 4'),
new charts.LineAnnotationSegment(
new DateTime(2017, 10, 15), charts.RangeAnnotationAxisType.domain,
charts.LineAnnotationSegment(
DateTime(2017, 10, 15), charts.RangeAnnotationAxisType.domain,
endLabel: 'Oct 15'),
]),
]);
@@ -89,14 +90,14 @@ class TimeSeriesLineAnnotationChart extends StatelessWidget {
/// Create one series with sample hard coded data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createSampleData() {
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), 5),
new TimeSeriesSales(new DateTime(2017, 9, 26), 25),
new TimeSeriesSales(new DateTime(2017, 10, 3), 100),
new TimeSeriesSales(new DateTime(2017, 10, 10), 75),
TimeSeriesSales(DateTime(2017, 9, 19), 5),
TimeSeriesSales(DateTime(2017, 9, 26), 25),
TimeSeriesSales(DateTime(2017, 10, 3), 100),
TimeSeriesSales(DateTime(2017, 10, 10), 75),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
domainFn: (TimeSeriesSales sales, _) => sales.time,
measureFn: (TimeSeriesSales sales, _) => sales.sales,

View File

@@ -31,11 +31,12 @@ class TimeSeriesRangeAnnotationChart extends StatelessWidget {
final List<charts.Series> seriesList;
final bool animate;
TimeSeriesRangeAnnotationChart(this.seriesList, {this.animate});
const TimeSeriesRangeAnnotationChart(this.seriesList, {this.animate, Key key})
: super(key: key);
/// Creates a [TimeSeriesChart] with sample data and no transition.
factory TimeSeriesRangeAnnotationChart.withSampleData() {
return new TimeSeriesRangeAnnotationChart(
return TimeSeriesRangeAnnotationChart(
_createSampleData(),
// Disable animations for image tests.
animate: false,
@@ -47,22 +48,22 @@ class TimeSeriesRangeAnnotationChart extends StatelessWidget {
// It is used for creating random series data to demonstrate animation in
// the example app only.
factory TimeSeriesRangeAnnotationChart.withRandomData() {
return new TimeSeriesRangeAnnotationChart(_createRandomData());
return TimeSeriesRangeAnnotationChart(_createRandomData());
}
/// Create random data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createRandomData() {
final random = new Random();
final random = Random();
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 26), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 3), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 10), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
domainFn: (TimeSeriesSales sales, _) => sales.time,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
@@ -74,10 +75,10 @@ class TimeSeriesRangeAnnotationChart extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new charts.TimeSeriesChart(seriesList, animate: animate, behaviors: [
new charts.RangeAnnotation([
new charts.RangeAnnotationSegment(new DateTime(2017, 10, 4),
new DateTime(2017, 10, 15), charts.RangeAnnotationAxisType.domain),
return charts.TimeSeriesChart(seriesList, animate: animate, behaviors: [
charts.RangeAnnotation([
charts.RangeAnnotationSegment(DateTime(2017, 10, 4),
DateTime(2017, 10, 15), charts.RangeAnnotationAxisType.domain),
]),
]);
}
@@ -85,14 +86,14 @@ class TimeSeriesRangeAnnotationChart extends StatelessWidget {
/// Create one series with sample hard coded data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createSampleData() {
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), 5),
new TimeSeriesSales(new DateTime(2017, 9, 26), 25),
new TimeSeriesSales(new DateTime(2017, 10, 3), 100),
new TimeSeriesSales(new DateTime(2017, 10, 10), 75),
TimeSeriesSales(DateTime(2017, 9, 19), 5),
TimeSeriesSales(DateTime(2017, 9, 26), 25),
TimeSeriesSales(DateTime(2017, 10, 3), 100),
TimeSeriesSales(DateTime(2017, 10, 10), 75),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
domainFn: (TimeSeriesSales sales, _) => sales.time,
measureFn: (TimeSeriesSales sales, _) => sales.sales,

View File

@@ -25,11 +25,13 @@ class TimeSeriesRangeAnnotationMarginChart extends StatelessWidget {
final List<charts.Series> seriesList;
final bool animate;
TimeSeriesRangeAnnotationMarginChart(this.seriesList, {this.animate});
const TimeSeriesRangeAnnotationMarginChart(this.seriesList,
{this.animate, Key key})
: super(key: key);
/// Creates a [TimeSeriesChart] with sample data and no transition.
factory TimeSeriesRangeAnnotationMarginChart.withSampleData() {
return new TimeSeriesRangeAnnotationMarginChart(
return TimeSeriesRangeAnnotationMarginChart(
_createSampleData(),
// Disable animations for image tests.
animate: false,
@@ -41,24 +43,24 @@ class TimeSeriesRangeAnnotationMarginChart extends StatelessWidget {
// It is used for creating random series data to demonstrate animation in
// the example app only.
factory TimeSeriesRangeAnnotationMarginChart.withRandomData() {
return new TimeSeriesRangeAnnotationMarginChart(_createRandomData());
return TimeSeriesRangeAnnotationMarginChart(_createRandomData());
}
/// Create random data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createRandomData() {
final random = new Random();
final random = Random();
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 26), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 3), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)),
// Fix one of the points to 100 so that the annotations are consistently
// placed.
new TimeSeriesSales(new DateTime(2017, 10, 10), 100),
TimeSeriesSales(DateTime(2017, 10, 10), 100),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
domainFn: (TimeSeriesSales sales, _) => sales.time,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
@@ -70,37 +72,35 @@ class TimeSeriesRangeAnnotationMarginChart extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new charts.TimeSeriesChart(seriesList,
return charts.TimeSeriesChart(seriesList,
animate: animate,
// Allow enough space in the left and right chart margins for the
// annotations.
layoutConfig: new charts.LayoutConfig(
leftMarginSpec: new charts.MarginSpec.fixedPixel(60),
topMarginSpec: new charts.MarginSpec.fixedPixel(20),
rightMarginSpec: new charts.MarginSpec.fixedPixel(60),
bottomMarginSpec: new charts.MarginSpec.fixedPixel(20)),
layoutConfig: charts.LayoutConfig(
leftMarginSpec: charts.MarginSpec.fixedPixel(60),
topMarginSpec: charts.MarginSpec.fixedPixel(20),
rightMarginSpec: charts.MarginSpec.fixedPixel(60),
bottomMarginSpec: charts.MarginSpec.fixedPixel(20)),
behaviors: [
// Define one domain and two measure annotations configured to render
// labels in the chart margins.
new charts.RangeAnnotation([
new charts.RangeAnnotationSegment(
new DateTime(2017, 10, 4),
new DateTime(2017, 10, 15),
charts.RangeAnnotationAxisType.domain,
charts.RangeAnnotation([
charts.RangeAnnotationSegment(DateTime(2017, 10, 4),
DateTime(2017, 10, 15), charts.RangeAnnotationAxisType.domain,
startLabel: 'D1 Start',
endLabel: 'D1 End',
labelAnchor: charts.AnnotationLabelAnchor.end,
color: charts.MaterialPalette.gray.shade200,
// Override the default vertical direction for domain labels.
labelDirection: charts.AnnotationLabelDirection.horizontal),
new charts.RangeAnnotationSegment(
charts.RangeAnnotationSegment(
15, 20, charts.RangeAnnotationAxisType.measure,
startLabel: 'M1 Start',
endLabel: 'M1 End',
labelAnchor: charts.AnnotationLabelAnchor.end,
color: charts.MaterialPalette.gray.shade300),
new charts.RangeAnnotationSegment(
charts.RangeAnnotationSegment(
35, 65, charts.RangeAnnotationAxisType.measure,
startLabel: 'M2 Start',
endLabel: 'M2 End',
@@ -113,14 +113,14 @@ class TimeSeriesRangeAnnotationMarginChart extends StatelessWidget {
/// Create one series with sample hard coded data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createSampleData() {
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), 5),
new TimeSeriesSales(new DateTime(2017, 9, 26), 25),
new TimeSeriesSales(new DateTime(2017, 10, 3), 100),
new TimeSeriesSales(new DateTime(2017, 10, 10), 75),
TimeSeriesSales(DateTime(2017, 9, 19), 5),
TimeSeriesSales(DateTime(2017, 9, 26), 25),
TimeSeriesSales(DateTime(2017, 10, 3), 100),
TimeSeriesSales(DateTime(2017, 10, 10), 75),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
domainFn: (TimeSeriesSales sales, _) => sales.time,
measureFn: (TimeSeriesSales sales, _) => sales.sales,

View File

@@ -24,11 +24,12 @@ class SimpleTimeSeriesChart extends StatelessWidget {
final List<charts.Series> seriesList;
final bool animate;
SimpleTimeSeriesChart(this.seriesList, {this.animate});
const SimpleTimeSeriesChart(this.seriesList, {this.animate, Key key})
: super(key: key);
/// Creates a [TimeSeriesChart] with sample data and no transition.
factory SimpleTimeSeriesChart.withSampleData() {
return new SimpleTimeSeriesChart(
return SimpleTimeSeriesChart(
_createSampleData(),
// Disable animations for image tests.
animate: false,
@@ -40,22 +41,22 @@ class SimpleTimeSeriesChart extends StatelessWidget {
// It is used for creating random series data to demonstrate animation in
// the example app only.
factory SimpleTimeSeriesChart.withRandomData() {
return new SimpleTimeSeriesChart(_createRandomData());
return SimpleTimeSeriesChart(_createRandomData());
}
/// Create random data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createRandomData() {
final random = new Random();
final random = Random();
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 26), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 3), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 10, 10), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.time,
@@ -68,7 +69,7 @@ class SimpleTimeSeriesChart extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new charts.TimeSeriesChart(
return charts.TimeSeriesChart(
seriesList,
animate: animate,
// Optionally pass in a [DateTimeFactory] used by the chart. The factory
@@ -81,14 +82,14 @@ class SimpleTimeSeriesChart extends StatelessWidget {
/// Create one series with sample hard coded data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createSampleData() {
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 19), 5),
new TimeSeriesSales(new DateTime(2017, 9, 26), 25),
new TimeSeriesSales(new DateTime(2017, 10, 3), 100),
new TimeSeriesSales(new DateTime(2017, 10, 10), 75),
TimeSeriesSales(DateTime(2017, 9, 19), 5),
TimeSeriesSales(DateTime(2017, 9, 26), 25),
TimeSeriesSales(DateTime(2017, 10, 3), 100),
TimeSeriesSales(DateTime(2017, 10, 10), 75),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.time,

View File

@@ -35,11 +35,13 @@ class TimeSeriesSymbolAnnotationChart extends StatelessWidget {
final List<charts.Series> seriesList;
final bool animate;
TimeSeriesSymbolAnnotationChart(this.seriesList, {this.animate});
const TimeSeriesSymbolAnnotationChart(this.seriesList,
{this.animate, Key key})
: super(key: key);
/// Creates a [TimeSeriesChart] with sample data and no transition.
factory TimeSeriesSymbolAnnotationChart.withSampleData() {
return new TimeSeriesSymbolAnnotationChart(
return TimeSeriesSymbolAnnotationChart(
_createSampleData(),
// Disable animations for image tests.
animate: false,
@@ -51,33 +53,33 @@ class TimeSeriesSymbolAnnotationChart extends StatelessWidget {
// It is used for creating random series data to demonstrate animation in
// the example app only.
factory TimeSeriesSymbolAnnotationChart.withRandomData() {
return new TimeSeriesSymbolAnnotationChart(_createRandomData());
return TimeSeriesSymbolAnnotationChart(_createRandomData());
}
/// Create random data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createRandomData() {
final random = new Random();
final random = Random();
final myDesktopData = [
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 9, 19), sales: random.nextInt(100)),
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 9, 26), sales: random.nextInt(100)),
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 10, 3), sales: random.nextInt(100)),
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 10, 10), sales: random.nextInt(100)),
TimeSeriesSales(
timeCurrent: DateTime(2017, 9, 19), sales: random.nextInt(100)),
TimeSeriesSales(
timeCurrent: DateTime(2017, 9, 26), sales: random.nextInt(100)),
TimeSeriesSales(
timeCurrent: DateTime(2017, 10, 3), sales: random.nextInt(100)),
TimeSeriesSales(
timeCurrent: DateTime(2017, 10, 10), sales: random.nextInt(100)),
];
final myTabletData = [
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 9, 19), sales: random.nextInt(100)),
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 9, 26), sales: random.nextInt(100)),
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 10, 3), sales: random.nextInt(100)),
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 10, 10), sales: random.nextInt(100)),
TimeSeriesSales(
timeCurrent: DateTime(2017, 9, 19), sales: random.nextInt(100)),
TimeSeriesSales(
timeCurrent: DateTime(2017, 9, 26), sales: random.nextInt(100)),
TimeSeriesSales(
timeCurrent: DateTime(2017, 10, 3), sales: random.nextInt(100)),
TimeSeriesSales(
timeCurrent: DateTime(2017, 10, 10), sales: random.nextInt(100)),
];
// Example of a series with two range annotations. A regular point shape
@@ -87,15 +89,15 @@ class TimeSeriesSymbolAnnotationChart extends StatelessWidget {
// Note that these series do not contain any measure values. They are
// positioned automatically in rows.
final myAnnotationDataTop = [
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 9, 24),
timePrevious: new DateTime(2017, 9, 19),
timeTarget: new DateTime(2017, 9, 24),
TimeSeriesSales(
timeCurrent: DateTime(2017, 9, 24),
timePrevious: DateTime(2017, 9, 19),
timeTarget: DateTime(2017, 9, 24),
),
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 9, 29),
timePrevious: new DateTime(2017, 9, 29),
timeTarget: new DateTime(2017, 10, 4),
TimeSeriesSales(
timeCurrent: DateTime(2017, 9, 29),
timePrevious: DateTime(2017, 9, 29),
timeTarget: DateTime(2017, 10, 4),
),
];
@@ -103,31 +105,31 @@ class TimeSeriesSymbolAnnotationChart extends StatelessWidget {
// annotations. Omitting the previous and target domain values causes that
// datum to be drawn as a single point.
final myAnnotationDataBottom = [
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 9, 25),
timePrevious: new DateTime(2017, 9, 21),
timeTarget: new DateTime(2017, 9, 25),
TimeSeriesSales(
timeCurrent: DateTime(2017, 9, 25),
timePrevious: DateTime(2017, 9, 21),
timeTarget: DateTime(2017, 9, 25),
),
new TimeSeriesSales(timeCurrent: new DateTime(2017, 9, 31)),
new TimeSeriesSales(timeCurrent: new DateTime(2017, 10, 5)),
TimeSeriesSales(timeCurrent: DateTime(2017, 9, 31)),
TimeSeriesSales(timeCurrent: DateTime(2017, 10, 5)),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Desktop',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
data: myDesktopData,
),
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Tablet',
colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
data: myTabletData,
),
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Annotation Series 1',
colorFn: (_, __) => charts.MaterialPalette.gray.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent,
@@ -142,7 +144,7 @@ class TimeSeriesSymbolAnnotationChart extends StatelessWidget {
// Optional radius for the annotation shape. If not specified, this will
// default to the same radius as the points.
..setAttribute(charts.boundsLineRadiusPxKey, 3.5),
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Annotation Series 2',
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent,
@@ -163,12 +165,12 @@ class TimeSeriesSymbolAnnotationChart extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new charts.TimeSeriesChart(
return charts.TimeSeriesChart(
seriesList,
animate: animate,
// Custom renderer configuration for the point series.
customSeriesRenderers: [
new charts.SymbolAnnotationRendererConfig(
charts.SymbolAnnotationRendererConfig(
// ID used to link series to this renderer.
customRendererId: 'customSymbolAnnotation')
],
@@ -182,17 +184,17 @@ class TimeSeriesSymbolAnnotationChart extends StatelessWidget {
/// Create one series with sample hard coded data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createSampleData() {
final myDesktopData = [
new TimeSeriesSales(timeCurrent: new DateTime(2017, 9, 19), sales: 5),
new TimeSeriesSales(timeCurrent: new DateTime(2017, 9, 26), sales: 25),
new TimeSeriesSales(timeCurrent: new DateTime(2017, 10, 3), sales: 100),
new TimeSeriesSales(timeCurrent: new DateTime(2017, 10, 10), sales: 75),
TimeSeriesSales(timeCurrent: DateTime(2017, 9, 19), sales: 5),
TimeSeriesSales(timeCurrent: DateTime(2017, 9, 26), sales: 25),
TimeSeriesSales(timeCurrent: DateTime(2017, 10, 3), sales: 100),
TimeSeriesSales(timeCurrent: DateTime(2017, 10, 10), sales: 75),
];
final myTabletData = [
new TimeSeriesSales(timeCurrent: new DateTime(2017, 9, 19), sales: 10),
new TimeSeriesSales(timeCurrent: new DateTime(2017, 9, 26), sales: 50),
new TimeSeriesSales(timeCurrent: new DateTime(2017, 10, 3), sales: 200),
new TimeSeriesSales(timeCurrent: new DateTime(2017, 10, 10), sales: 150),
TimeSeriesSales(timeCurrent: DateTime(2017, 9, 19), sales: 10),
TimeSeriesSales(timeCurrent: DateTime(2017, 9, 26), sales: 50),
TimeSeriesSales(timeCurrent: DateTime(2017, 10, 3), sales: 200),
TimeSeriesSales(timeCurrent: DateTime(2017, 10, 10), sales: 150),
];
// Example of a series with two range annotations. A regular point shape
@@ -202,15 +204,15 @@ class TimeSeriesSymbolAnnotationChart extends StatelessWidget {
// Note that these series do not contain any measure values. They are
// positioned automatically in rows.
final myAnnotationDataTop = [
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 9, 24),
timePrevious: new DateTime(2017, 9, 19),
timeTarget: new DateTime(2017, 9, 24),
TimeSeriesSales(
timeCurrent: DateTime(2017, 9, 24),
timePrevious: DateTime(2017, 9, 19),
timeTarget: DateTime(2017, 9, 24),
),
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 9, 29),
timePrevious: new DateTime(2017, 9, 29),
timeTarget: new DateTime(2017, 10, 4),
TimeSeriesSales(
timeCurrent: DateTime(2017, 9, 29),
timePrevious: DateTime(2017, 9, 29),
timeTarget: DateTime(2017, 10, 4),
),
];
@@ -218,31 +220,31 @@ class TimeSeriesSymbolAnnotationChart extends StatelessWidget {
// annotations. Omitting the previous and target domain values causes that
// datum to be drawn as a single point.
final myAnnotationDataBottom = [
new TimeSeriesSales(
timeCurrent: new DateTime(2017, 9, 25),
timePrevious: new DateTime(2017, 9, 21),
timeTarget: new DateTime(2017, 9, 25),
TimeSeriesSales(
timeCurrent: DateTime(2017, 9, 25),
timePrevious: DateTime(2017, 9, 21),
timeTarget: DateTime(2017, 9, 25),
),
new TimeSeriesSales(timeCurrent: new DateTime(2017, 9, 31)),
new TimeSeriesSales(timeCurrent: new DateTime(2017, 10, 5)),
TimeSeriesSales(timeCurrent: DateTime(2017, 9, 31)),
TimeSeriesSales(timeCurrent: DateTime(2017, 10, 5)),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Desktop',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
data: myDesktopData,
),
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Tablet',
colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
data: myTabletData,
),
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Annotation Series 1',
colorFn: (_, __) => charts.MaterialPalette.gray.shadeDefault,
// A point shape will be drawn at the location of the domain.
@@ -260,7 +262,7 @@ class TimeSeriesSymbolAnnotationChart extends StatelessWidget {
// Optional radius for the annotation range. If not specified, this will
// default to the same radius as the domain point.
..setAttribute(charts.boundsLineRadiusPxKey, 3.5),
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Annotation Series 2',
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
// A point shape will be drawn at the location of the domain.

View File

@@ -26,55 +26,54 @@ import 'with_bar_renderer.dart';
List<GalleryScaffold> buildGallery() {
return [
new GalleryScaffold(
listTileIcon: new Icon(Icons.show_chart),
GalleryScaffold(
listTileIcon: const Icon(Icons.show_chart),
title: 'Time Series Chart',
subtitle: 'Simple single time series chart',
childBuilder: () => new SimpleTimeSeriesChart.withRandomData(),
childBuilder: () => SimpleTimeSeriesChart.withRandomData(),
),
new GalleryScaffold(
listTileIcon: new Icon(Icons.show_chart),
GalleryScaffold(
listTileIcon: const Icon(Icons.show_chart),
title: 'End Points Axis Time Series Chart',
subtitle: 'Time series chart with an end points axis',
childBuilder: () => new EndPointsAxisTimeSeriesChart.withRandomData(),
childBuilder: () => EndPointsAxisTimeSeriesChart.withRandomData(),
),
new GalleryScaffold(
listTileIcon: new Icon(Icons.show_chart),
GalleryScaffold(
listTileIcon: const Icon(Icons.show_chart),
title: 'Line Annotation on Time Series Chart',
subtitle: 'Time series chart with future line annotation',
childBuilder: () => new TimeSeriesLineAnnotationChart.withRandomData(),
childBuilder: () => TimeSeriesLineAnnotationChart.withRandomData(),
),
new GalleryScaffold(
listTileIcon: new Icon(Icons.show_chart),
GalleryScaffold(
listTileIcon: const Icon(Icons.show_chart),
title: 'Range Annotation on Time Series Chart',
subtitle: 'Time series chart with future range annotation',
childBuilder: () => new TimeSeriesRangeAnnotationChart.withRandomData(),
childBuilder: () => TimeSeriesRangeAnnotationChart.withRandomData(),
),
new GalleryScaffold(
listTileIcon: new Icon(Icons.show_chart),
GalleryScaffold(
listTileIcon: const Icon(Icons.show_chart),
title: 'Range Annotation Margin Labels on Time Series Chart',
subtitle:
'Time series chart with range annotations with labels in margins',
childBuilder: () =>
new TimeSeriesRangeAnnotationMarginChart.withRandomData(),
childBuilder: () => TimeSeriesRangeAnnotationMarginChart.withRandomData(),
),
new GalleryScaffold(
listTileIcon: new Icon(Icons.show_chart),
GalleryScaffold(
listTileIcon: const Icon(Icons.show_chart),
title: 'Symbol Annotation Time Series Chart',
subtitle: 'Time series chart with annotation data below the draw area',
childBuilder: () => new TimeSeriesSymbolAnnotationChart.withRandomData(),
childBuilder: () => TimeSeriesSymbolAnnotationChart.withRandomData(),
),
new GalleryScaffold(
listTileIcon: new Icon(Icons.show_chart),
GalleryScaffold(
listTileIcon: const Icon(Icons.show_chart),
title: 'Time Series Chart with Bars',
subtitle: 'Time series chart using the bar renderer',
childBuilder: () => new TimeSeriesBar.withRandomData(),
childBuilder: () => TimeSeriesBar.withRandomData(),
),
new GalleryScaffold(
listTileIcon: new Icon(Icons.show_chart),
GalleryScaffold(
listTileIcon: const Icon(Icons.show_chart),
title: 'Time Series Chart with Confidence Interval',
subtitle: 'Draws area around the confidence interval',
childBuilder: () => new TimeSeriesConfidenceInterval.withRandomData(),
childBuilder: () => TimeSeriesConfidenceInterval.withRandomData(),
),
];
}

View File

@@ -24,11 +24,12 @@ class TimeSeriesBar extends StatelessWidget {
final List<charts.Series<TimeSeriesSales, DateTime>> seriesList;
final bool animate;
TimeSeriesBar(this.seriesList, {this.animate});
const TimeSeriesBar(this.seriesList, {this.animate, Key key})
: super(key: key);
/// Creates a [TimeSeriesChart] with sample data and no transition.
factory TimeSeriesBar.withSampleData() {
return new TimeSeriesBar(
return TimeSeriesBar(
_createSampleData(),
// Disable animations for image tests.
animate: false,
@@ -40,39 +41,39 @@ class TimeSeriesBar extends StatelessWidget {
// It is used for creating random series data to demonstrate animation in
// the example app only.
factory TimeSeriesBar.withRandomData() {
return new TimeSeriesBar(_createRandomData());
return TimeSeriesBar(_createRandomData());
}
/// Create random data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createRandomData() {
final random = new Random();
final random = Random();
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 1), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 2), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 3), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 4), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 5), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 6), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 7), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 8), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 9), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 10), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 11), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 12), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 13), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 14), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 15), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 16), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 17), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 18), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 19), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 20), random.nextInt(100)),
new TimeSeriesSales(new DateTime(2017, 9, 21), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 1), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 2), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 3), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 4), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 5), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 6), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 7), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 8), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 9), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 10), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 11), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 12), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 13), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 14), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 15), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 16), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 17), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 18), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 20), random.nextInt(100)),
TimeSeriesSales(DateTime(2017, 9, 21), random.nextInt(100)),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.time,
@@ -85,50 +86,50 @@ class TimeSeriesBar extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new charts.TimeSeriesChart(
return charts.TimeSeriesChart(
seriesList,
animate: animate,
// Set the default renderer to a bar renderer.
// This can also be one of the custom renderers of the time series chart.
defaultRenderer: new charts.BarRendererConfig<DateTime>(),
defaultRenderer: charts.BarRendererConfig<DateTime>(),
// It is recommended that default interactions be turned off if using bar
// renderer, because the line point highlighter is the default for time
// series chart.
defaultInteractions: false,
// If default interactions were removed, optionally add select nearest
// and the domain highlighter that are typical for bar charts.
behaviors: [new charts.SelectNearest(), new charts.DomainHighlighter()],
behaviors: [charts.SelectNearest(), charts.DomainHighlighter()],
);
}
/// Create one series with sample hard coded data.
static List<charts.Series<TimeSeriesSales, DateTime>> _createSampleData() {
final data = [
new TimeSeriesSales(new DateTime(2017, 9, 1), 5),
new TimeSeriesSales(new DateTime(2017, 9, 2), 5),
new TimeSeriesSales(new DateTime(2017, 9, 3), 25),
new TimeSeriesSales(new DateTime(2017, 9, 4), 100),
new TimeSeriesSales(new DateTime(2017, 9, 5), 75),
new TimeSeriesSales(new DateTime(2017, 9, 6), 88),
new TimeSeriesSales(new DateTime(2017, 9, 7), 65),
new TimeSeriesSales(new DateTime(2017, 9, 8), 91),
new TimeSeriesSales(new DateTime(2017, 9, 9), 100),
new TimeSeriesSales(new DateTime(2017, 9, 10), 111),
new TimeSeriesSales(new DateTime(2017, 9, 11), 90),
new TimeSeriesSales(new DateTime(2017, 9, 12), 50),
new TimeSeriesSales(new DateTime(2017, 9, 13), 40),
new TimeSeriesSales(new DateTime(2017, 9, 14), 30),
new TimeSeriesSales(new DateTime(2017, 9, 15), 40),
new TimeSeriesSales(new DateTime(2017, 9, 16), 50),
new TimeSeriesSales(new DateTime(2017, 9, 17), 30),
new TimeSeriesSales(new DateTime(2017, 9, 18), 35),
new TimeSeriesSales(new DateTime(2017, 9, 19), 40),
new TimeSeriesSales(new DateTime(2017, 9, 20), 32),
new TimeSeriesSales(new DateTime(2017, 9, 21), 31),
TimeSeriesSales(DateTime(2017, 9, 1), 5),
TimeSeriesSales(DateTime(2017, 9, 2), 5),
TimeSeriesSales(DateTime(2017, 9, 3), 25),
TimeSeriesSales(DateTime(2017, 9, 4), 100),
TimeSeriesSales(DateTime(2017, 9, 5), 75),
TimeSeriesSales(DateTime(2017, 9, 6), 88),
TimeSeriesSales(DateTime(2017, 9, 7), 65),
TimeSeriesSales(DateTime(2017, 9, 8), 91),
TimeSeriesSales(DateTime(2017, 9, 9), 100),
TimeSeriesSales(DateTime(2017, 9, 10), 111),
TimeSeriesSales(DateTime(2017, 9, 11), 90),
TimeSeriesSales(DateTime(2017, 9, 12), 50),
TimeSeriesSales(DateTime(2017, 9, 13), 40),
TimeSeriesSales(DateTime(2017, 9, 14), 30),
TimeSeriesSales(DateTime(2017, 9, 15), 40),
TimeSeriesSales(DateTime(2017, 9, 16), 50),
TimeSeriesSales(DateTime(2017, 9, 17), 30),
TimeSeriesSales(DateTime(2017, 9, 18), 35),
TimeSeriesSales(DateTime(2017, 9, 19), 40),
TimeSeriesSales(DateTime(2017, 9, 20), 32),
TimeSeriesSales(DateTime(2017, 9, 21), 31),
];
return [
new charts.Series<TimeSeriesSales, DateTime>(
charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.time,