1
0
mirror of https://github.com/flutter/samples.git synced 2025-11-11 15:28:44 +00:00

Web charts common update (#111)

This commit is contained in:
Brett Morgan
2019-07-10 06:37:53 +10:00
committed by GitHub
parent eac7833d1d
commit 3af5bbf125
145 changed files with 2491 additions and 2687 deletions

View File

@@ -50,8 +50,7 @@ class FakeBarRenderer<D> extends BarRenderer<D> {
int paintBarCallCount = 0;
factory FakeBarRenderer({BarRendererConfig config, String rendererId}) {
return new FakeBarRenderer._internal(
config: config, rendererId: rendererId);
return FakeBarRenderer._internal(config: config, rendererId: rendererId);
}
FakeBarRenderer._internal({BarRendererConfig config, String rendererId})
@@ -73,10 +72,10 @@ void main() {
// Convenience methods for creating mocks.
/////////////////////////////////////////
_configureBaseRenderer(BaseBarRenderer renderer, bool vertical) {
final context = new MockContext();
final context = MockContext();
when(context.chartContainerIsRtl).thenReturn(false);
when(context.isRtl).thenReturn(false);
final verticalChart = new MockChart();
final verticalChart = MockChart();
when(verticalChart.vertical).thenReturn(vertical);
when(verticalChart.context).thenReturn(context);
renderer.onAttach(verticalChart);
@@ -85,132 +84,132 @@ void main() {
}
BarRenderer makeRenderer({BarRendererConfig config}) {
final renderer = new BarRenderer(config: config);
final renderer = BarRenderer(config: config);
_configureBaseRenderer(renderer, true);
return renderer;
}
FakeBarRenderer makeFakeRenderer({BarRendererConfig config}) {
final renderer = new FakeBarRenderer(config: config);
final renderer = FakeBarRenderer(config: config);
_configureBaseRenderer(renderer, true);
return renderer;
}
setUp(() {
var myFakeDesktopAData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeTabletAData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeMobileAData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeDesktopBData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeTabletBData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeMobileBData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
seriesList = [
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Desktop',
colorFn: (_, __) => MaterialPalette.blue.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeDesktopAData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Tablet',
colorFn: (_, __) => MaterialPalette.red.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeTabletAData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Mobile',
colorFn: (_, __) => MaterialPalette.green.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeMobileAData))
];
groupedStackedSeriesList = [
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Desktop A',
seriesCategory: 'A',
colorFn: (_, __) => MaterialPalette.blue.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeDesktopAData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Tablet A',
seriesCategory: 'A',
colorFn: (_, __) => MaterialPalette.red.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeTabletAData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Mobile A',
seriesCategory: 'A',
colorFn: (_, __) => MaterialPalette.green.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeMobileAData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Desktop B',
seriesCategory: 'B',
colorFn: (_, __) => MaterialPalette.blue.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeDesktopBData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Tablet B',
seriesCategory: 'B',
colorFn: (_, __) => MaterialPalette.red.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeTabletBData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Mobile B',
seriesCategory: 'B',
colorFn: (_, __) => MaterialPalette.green.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeMobileBData))
];
});
@@ -218,7 +217,7 @@ void main() {
group('preprocess', () {
test('with grouped bars', () {
renderer = makeRenderer(
config: new BarRendererConfig(groupingType: BarGroupingType.grouped));
config: BarRendererConfig(groupingType: BarGroupingType.grouped));
renderer.preprocessSeries(seriesList);
@@ -278,8 +277,8 @@ void main() {
test('with grouped stacked bars', () {
renderer = makeRenderer(
config: new BarRendererConfig(
groupingType: BarGroupingType.groupedStacked));
config:
BarRendererConfig(groupingType: BarGroupingType.groupedStacked));
renderer.preprocessSeries(groupedStackedSeriesList);
@@ -390,7 +389,7 @@ void main() {
test('with stacked bars', () {
renderer = makeRenderer(
config: new BarRendererConfig(groupingType: BarGroupingType.stacked));
config: BarRendererConfig(groupingType: BarGroupingType.stacked));
renderer.preprocessSeries(seriesList);
@@ -450,16 +449,16 @@ void main() {
test('with stacked bars containing zero and null', () {
// Set up some nulls and zeros in the data.
seriesList[2].data[0] = new MyRow('MyCampaign1', null);
seriesList[2].data[2] = new MyRow('MyCampaign3', 0);
seriesList[2].data[0] = MyRow('MyCampaign1', null);
seriesList[2].data[2] = MyRow('MyCampaign3', 0);
seriesList[1].data[1] = new MyRow('MyCampaign2', null);
seriesList[1].data[3] = new MyRow('MyOtherCampaign', 0);
seriesList[1].data[1] = MyRow('MyCampaign2', null);
seriesList[1].data[3] = MyRow('MyOtherCampaign', 0);
seriesList[0].data[2] = new MyRow('MyCampaign3', 0);
seriesList[0].data[2] = MyRow('MyCampaign3', 0);
renderer = makeRenderer(
config: new BarRendererConfig(groupingType: BarGroupingType.stacked));
config: BarRendererConfig(groupingType: BarGroupingType.stacked));
renderer.preprocessSeries(seriesList);
@@ -547,7 +546,7 @@ void main() {
group('preprocess weight pattern', () {
test('with grouped bars', () {
renderer = makeRenderer(
config: new BarRendererConfig(
config: BarRendererConfig(
groupingType: BarGroupingType.grouped, weightPattern: [3, 2, 1]));
renderer.preprocessSeries(seriesList);
@@ -612,7 +611,7 @@ void main() {
test('with grouped stacked bars', () {
renderer = makeRenderer(
config: new BarRendererConfig(
config: BarRendererConfig(
groupingType: BarGroupingType.groupedStacked,
weightPattern: [2, 1]));
@@ -729,7 +728,7 @@ void main() {
test('with stacked bars - weightPattern not used', () {
renderer = makeRenderer(
config: new BarRendererConfig(
config: BarRendererConfig(
groupingType: BarGroupingType.stacked, weightPattern: [2, 1]));
renderer.preprocessSeries(seriesList);
@@ -796,24 +795,24 @@ void main() {
test('only include null in draw if animating from a non null measure', () {
// Helper to create series list for this test only.
List<MutableSeries<String>> _createSeriesList(List<MyRow> data) {
final domainAxis = new MockAxis<dynamic>();
final domainAxis = MockAxis<dynamic>();
when(domainAxis.rangeBand).thenReturn(100.0);
when(domainAxis.getLocation('MyCampaign1')).thenReturn(20.0);
when(domainAxis.getLocation('MyCampaign2')).thenReturn(40.0);
when(domainAxis.getLocation('MyCampaign3')).thenReturn(60.0);
when(domainAxis.getLocation('MyOtherCampaign')).thenReturn(80.0);
final measureAxis = new MockAxis<num>();
final measureAxis = MockAxis<num>();
when(measureAxis.getLocation(0)).thenReturn(0.0);
when(measureAxis.getLocation(5)).thenReturn(5.0);
when(measureAxis.getLocation(75)).thenReturn(75.0);
when(measureAxis.getLocation(100)).thenReturn(100.0);
final color = new Color.fromHex(code: '#000000');
final color = Color.fromHex(code: '#000000');
final series = new MutableSeries<String>(new Series<MyRow, String>(
final series = MutableSeries<String>(Series<MyRow, String>(
id: 'Desktop',
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (_, __) => 0,
colorFn: (_, __) => color,
fillColorFn: (_, __) => color,
@@ -825,26 +824,26 @@ void main() {
return [series];
}
final canvas = new MockCanvas();
final canvas = MockCanvas();
final myDataWithNull = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', null),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', null),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
final seriesListWithNull = _createSeriesList(myDataWithNull);
final myDataWithMeasures = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 0),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 0),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
final seriesListWithMeasures = _createSeriesList(myDataWithMeasures);
final renderer = makeFakeRenderer(
config: new BarRendererConfig(groupingType: BarGroupingType.grouped));
config: BarRendererConfig(groupingType: BarGroupingType.grouped));
// Verify that only 3 bars are drawn for an initial draw with null data.
renderer.preprocessSeries(seriesListWithNull);