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:
@@ -56,47 +56,43 @@ void main() {
|
||||
|
||||
setUp(() {
|
||||
myFakeDesktopData = [
|
||||
new MyRow(
|
||||
'MyCampaign1', 1, 5, MaterialPalette.blue.shadeDefault, null, 2.0),
|
||||
new MyRow(
|
||||
MyRow('MyCampaign1', 1, 5, MaterialPalette.blue.shadeDefault, null, 2.0),
|
||||
MyRow(
|
||||
'MyCampaign2', 2, 25, MaterialPalette.green.shadeDefault, null, 2.0),
|
||||
new MyRow(
|
||||
'MyCampaign3', 3, 100, MaterialPalette.red.shadeDefault, null, 2.0),
|
||||
new MyRow('MyOtherCampaign', 4, 75, MaterialPalette.red.shadeDefault,
|
||||
null, 2.0),
|
||||
MyRow('MyCampaign3', 3, 100, MaterialPalette.red.shadeDefault, null, 2.0),
|
||||
MyRow('MyOtherCampaign', 4, 75, MaterialPalette.red.shadeDefault, null,
|
||||
2.0),
|
||||
];
|
||||
|
||||
myFakeTabletData = [
|
||||
new MyRow(
|
||||
MyRow(
|
||||
'MyCampaign1', 1, 5, MaterialPalette.blue.shadeDefault, [2, 2], 2.0),
|
||||
new MyRow(
|
||||
MyRow(
|
||||
'MyCampaign2', 2, 25, MaterialPalette.blue.shadeDefault, [3, 3], 2.0),
|
||||
new MyRow('MyCampaign3', 3, 100, MaterialPalette.blue.shadeDefault,
|
||||
[4, 4], 2.0),
|
||||
new MyRow('MyOtherCampaign', 4, 75, MaterialPalette.blue.shadeDefault,
|
||||
[4, 4], 2.0),
|
||||
MyRow('MyCampaign3', 3, 100, MaterialPalette.blue.shadeDefault, [4, 4],
|
||||
2.0),
|
||||
MyRow('MyOtherCampaign', 4, 75, MaterialPalette.blue.shadeDefault, [4, 4],
|
||||
2.0),
|
||||
];
|
||||
|
||||
myFakeMobileData = [
|
||||
new MyRow(
|
||||
'MyCampaign1', 1, 5, MaterialPalette.blue.shadeDefault, null, 2.0),
|
||||
new MyRow(
|
||||
'MyCampaign2', 2, 25, MaterialPalette.blue.shadeDefault, null, 3.0),
|
||||
new MyRow(
|
||||
MyRow('MyCampaign1', 1, 5, MaterialPalette.blue.shadeDefault, null, 2.0),
|
||||
MyRow('MyCampaign2', 2, 25, MaterialPalette.blue.shadeDefault, null, 3.0),
|
||||
MyRow(
|
||||
'MyCampaign3', 3, 100, MaterialPalette.blue.shadeDefault, null, 4.0),
|
||||
new MyRow('MyOtherCampaign', 4, 75, MaterialPalette.blue.shadeDefault,
|
||||
null, 4.0),
|
||||
MyRow('MyOtherCampaign', 4, 75, MaterialPalette.blue.shadeDefault, null,
|
||||
4.0),
|
||||
];
|
||||
|
||||
numericSeriesList = [
|
||||
new MutableSeries<int>(new Series<MyRow, int>(
|
||||
MutableSeries<int>(Series<MyRow, int>(
|
||||
id: 'Desktop',
|
||||
colorFn: (_, __) => MaterialPalette.blue.shadeDefault,
|
||||
domainFn: (dynamic row, _) => row.campaign,
|
||||
measureFn: (dynamic row, _) => row.clickCount,
|
||||
measureOffsetFn: (_, __) => 0,
|
||||
data: myFakeDesktopData)),
|
||||
new MutableSeries<int>(new Series<MyRow, int>(
|
||||
MutableSeries<int>(Series<MyRow, int>(
|
||||
id: 'Tablet',
|
||||
colorFn: (_, __) => MaterialPalette.red.shadeDefault,
|
||||
domainFn: (dynamic row, _) => row.campaign,
|
||||
@@ -104,7 +100,7 @@ void main() {
|
||||
measureOffsetFn: (_, __) => 0,
|
||||
strokeWidthPxFn: (_, __) => 1.25,
|
||||
data: myFakeTabletData)),
|
||||
new MutableSeries<int>(new Series<MyRow, int>(
|
||||
MutableSeries<int>(Series<MyRow, int>(
|
||||
id: 'Mobile',
|
||||
colorFn: (_, __) => MaterialPalette.green.shadeDefault,
|
||||
domainFn: (dynamic row, _) => row.campaign,
|
||||
@@ -115,14 +111,14 @@ void main() {
|
||||
];
|
||||
|
||||
ordinalSeriesList = [
|
||||
new MutableSeries<String>(new Series<MyRow, String>(
|
||||
MutableSeries<String>(Series<MyRow, String>(
|
||||
id: 'Desktop',
|
||||
colorFn: (_, __) => MaterialPalette.blue.shadeDefault,
|
||||
domainFn: (dynamic row, _) => row.campaignString,
|
||||
measureFn: (dynamic row, _) => row.clickCount,
|
||||
measureOffsetFn: (_, __) => 0,
|
||||
data: myFakeDesktopData)),
|
||||
new MutableSeries<String>(new Series<MyRow, String>(
|
||||
MutableSeries<String>(Series<MyRow, String>(
|
||||
id: 'Tablet',
|
||||
colorFn: (_, __) => MaterialPalette.red.shadeDefault,
|
||||
domainFn: (dynamic row, _) => row.campaignString,
|
||||
@@ -130,7 +126,7 @@ void main() {
|
||||
measureOffsetFn: (_, __) => 0,
|
||||
strokeWidthPxFn: (_, __) => 1.25,
|
||||
data: myFakeTabletData)),
|
||||
new MutableSeries<String>(new Series<MyRow, String>(
|
||||
MutableSeries<String>(Series<MyRow, String>(
|
||||
id: 'Mobile',
|
||||
colorFn: (_, __) => MaterialPalette.green.shadeDefault,
|
||||
domainFn: (dynamic row, _) => row.campaignString,
|
||||
@@ -143,8 +139,8 @@ void main() {
|
||||
|
||||
group('preprocess', () {
|
||||
test('with numeric data and simple lines', () {
|
||||
renderer = new LineRenderer<num>(
|
||||
config: new LineRendererConfig(strokeWidthPx: 2.0));
|
||||
renderer =
|
||||
LineRenderer<num>(config: LineRendererConfig(strokeWidthPx: 2.0));
|
||||
|
||||
renderer.configureSeries(numericSeriesList);
|
||||
renderer.preprocessSeries(numericSeriesList);
|
||||
@@ -207,8 +203,8 @@ void main() {
|
||||
});
|
||||
|
||||
test('with numeric data and stacked lines', () {
|
||||
renderer = new LineRenderer<num>(
|
||||
config: new LineRendererConfig(stacked: true, strokeWidthPx: 2.0));
|
||||
renderer = LineRenderer<num>(
|
||||
config: LineRendererConfig(stacked: true, strokeWidthPx: 2.0));
|
||||
|
||||
renderer.configureSeries(numericSeriesList);
|
||||
renderer.preprocessSeries(numericSeriesList);
|
||||
@@ -272,37 +268,37 @@ void main() {
|
||||
|
||||
test('with numeric data and changes in style', () {
|
||||
numericSeriesList = [
|
||||
new MutableSeries<int>(new Series<MyRow, int>(
|
||||
MutableSeries<int>(Series<MyRow, int>(
|
||||
id: 'Desktop',
|
||||
colorFn: (MyRow row, _) => row.color,
|
||||
dashPatternFn: (MyRow row, _) => row.dashPattern,
|
||||
strokeWidthPxFn: (MyRow row, _) => row.strokeWidthPx,
|
||||
colorFn: (row, _) => row.color,
|
||||
dashPatternFn: (row, _) => row.dashPattern,
|
||||
strokeWidthPxFn: (row, _) => row.strokeWidthPx,
|
||||
domainFn: (dynamic row, _) => row.campaign,
|
||||
measureFn: (dynamic row, _) => row.clickCount,
|
||||
measureOffsetFn: (_, __) => 0,
|
||||
data: myFakeDesktopData)),
|
||||
new MutableSeries<int>(new Series<MyRow, int>(
|
||||
MutableSeries<int>(Series<MyRow, int>(
|
||||
id: 'Tablet',
|
||||
colorFn: (MyRow row, _) => row.color,
|
||||
dashPatternFn: (MyRow row, _) => row.dashPattern,
|
||||
strokeWidthPxFn: (MyRow row, _) => row.strokeWidthPx,
|
||||
colorFn: (row, _) => row.color,
|
||||
dashPatternFn: (row, _) => row.dashPattern,
|
||||
strokeWidthPxFn: (row, _) => row.strokeWidthPx,
|
||||
domainFn: (dynamic row, _) => row.campaign,
|
||||
measureFn: (dynamic row, _) => row.clickCount,
|
||||
measureOffsetFn: (_, __) => 0,
|
||||
data: myFakeTabletData)),
|
||||
new MutableSeries<int>(new Series<MyRow, int>(
|
||||
MutableSeries<int>(Series<MyRow, int>(
|
||||
id: 'Mobile',
|
||||
colorFn: (MyRow row, _) => row.color,
|
||||
dashPatternFn: (MyRow row, _) => row.dashPattern,
|
||||
strokeWidthPxFn: (MyRow row, _) => row.strokeWidthPx,
|
||||
colorFn: (row, _) => row.color,
|
||||
dashPatternFn: (row, _) => row.dashPattern,
|
||||
strokeWidthPxFn: (row, _) => row.strokeWidthPx,
|
||||
domainFn: (dynamic row, _) => row.campaign,
|
||||
measureFn: (dynamic row, _) => row.clickCount,
|
||||
measureOffsetFn: (_, __) => 0,
|
||||
data: myFakeMobileData))
|
||||
];
|
||||
|
||||
renderer = new LineRenderer<num>(
|
||||
config: new LineRendererConfig(strokeWidthPx: 2.0));
|
||||
renderer =
|
||||
LineRenderer<num>(config: LineRendererConfig(strokeWidthPx: 2.0));
|
||||
|
||||
renderer.configureSeries(numericSeriesList);
|
||||
renderer.preprocessSeries(numericSeriesList);
|
||||
@@ -408,38 +404,38 @@ void main() {
|
||||
|
||||
test('with numeric data and repeats in style', () {
|
||||
var myFakeData = [
|
||||
new MyRow(
|
||||
MyRow(
|
||||
'MyCampaign1', 1, 5, MaterialPalette.blue.shadeDefault, null, 2.0),
|
||||
new MyRow('MyCampaign2', 2, 25, MaterialPalette.green.shadeDefault,
|
||||
null, 2.0),
|
||||
new MyRow('MyCampaign3', 3, 100, MaterialPalette.blue.shadeDefault,
|
||||
null, 2.0),
|
||||
new MyRow('MyCampaign4', 4, 75, MaterialPalette.green.shadeDefault,
|
||||
null, 2.0),
|
||||
new MyRow(
|
||||
MyRow('MyCampaign2', 2, 25, MaterialPalette.green.shadeDefault, null,
|
||||
2.0),
|
||||
MyRow('MyCampaign3', 3, 100, MaterialPalette.blue.shadeDefault, null,
|
||||
2.0),
|
||||
MyRow('MyCampaign4', 4, 75, MaterialPalette.green.shadeDefault, null,
|
||||
2.0),
|
||||
MyRow(
|
||||
'MyCampaign1', 5, 5, MaterialPalette.blue.shadeDefault, null, 2.0),
|
||||
new MyRow('MyCampaign2', 6, 25, MaterialPalette.green.shadeDefault,
|
||||
null, 2.0),
|
||||
new MyRow('MyCampaign3', 7, 100, MaterialPalette.blue.shadeDefault,
|
||||
null, 2.0),
|
||||
new MyRow('MyCampaign4', 8, 75, MaterialPalette.green.shadeDefault,
|
||||
null, 2.0),
|
||||
MyRow('MyCampaign2', 6, 25, MaterialPalette.green.shadeDefault, null,
|
||||
2.0),
|
||||
MyRow('MyCampaign3', 7, 100, MaterialPalette.blue.shadeDefault, null,
|
||||
2.0),
|
||||
MyRow('MyCampaign4', 8, 75, MaterialPalette.green.shadeDefault, null,
|
||||
2.0),
|
||||
];
|
||||
|
||||
numericSeriesList = [
|
||||
new MutableSeries<int>(new Series<MyRow, int>(
|
||||
MutableSeries<int>(Series<MyRow, int>(
|
||||
id: 'Desktop',
|
||||
colorFn: (MyRow row, _) => row.color,
|
||||
dashPatternFn: (MyRow row, _) => row.dashPattern,
|
||||
strokeWidthPxFn: (MyRow row, _) => row.strokeWidthPx,
|
||||
domainFn: (dynamic row, _) => row.campaign,
|
||||
measureFn: (dynamic row, _) => row.clickCount,
|
||||
colorFn: (row, _) => row.color,
|
||||
dashPatternFn: (row, _) => row.dashPattern,
|
||||
strokeWidthPxFn: (row, _) => row.strokeWidthPx,
|
||||
domainFn: (row, _) => row.campaign,
|
||||
measureFn: (row, _) => row.clickCount,
|
||||
measureOffsetFn: (_, __) => 0,
|
||||
data: myFakeData)),
|
||||
];
|
||||
|
||||
renderer = new LineRenderer<num>(
|
||||
config: new LineRendererConfig(strokeWidthPx: 2.0));
|
||||
renderer =
|
||||
LineRenderer<num>(config: LineRendererConfig(strokeWidthPx: 2.0));
|
||||
|
||||
renderer.configureSeries(numericSeriesList);
|
||||
renderer.preprocessSeries(numericSeriesList);
|
||||
@@ -494,8 +490,8 @@ void main() {
|
||||
});
|
||||
|
||||
test('with ordinal data and simple lines', () {
|
||||
renderer = new LineRenderer<String>(
|
||||
config: new LineRendererConfig(strokeWidthPx: 2.0));
|
||||
renderer =
|
||||
LineRenderer<String>(config: LineRendererConfig(strokeWidthPx: 2.0));
|
||||
|
||||
renderer.configureSeries(ordinalSeriesList);
|
||||
renderer.preprocessSeries(ordinalSeriesList);
|
||||
|
||||
@@ -50,23 +50,23 @@ void main() {
|
||||
/////////////////////////////////////////
|
||||
MutableSeries<int> _makeSeries({String id, int measureOffset = 0}) {
|
||||
final data = <MyRow>[
|
||||
new MyRow(1000, measureOffset + 10),
|
||||
new MyRow(2000, measureOffset + 20),
|
||||
new MyRow(3000, measureOffset + 30),
|
||||
MyRow(1000, measureOffset + 10),
|
||||
MyRow(2000, measureOffset + 20),
|
||||
MyRow(3000, measureOffset + 30),
|
||||
];
|
||||
|
||||
final series = new MutableSeries<int>(new Series<MyRow, int>(
|
||||
final series = MutableSeries<int>(Series<MyRow, int>(
|
||||
id: id,
|
||||
data: data,
|
||||
domainFn: (MyRow row, _) => row.timestamp,
|
||||
measureFn: (MyRow row, _) => row.clickCount,
|
||||
domainFn: (row, _) => row.timestamp,
|
||||
measureFn: (row, _) => row.clickCount,
|
||||
));
|
||||
|
||||
series.measureOffsetFn = (_) => 0.0;
|
||||
series.colorFn = (_) => new Color.fromHex(code: '#000000');
|
||||
series.colorFn = (_) => Color.fromHex(code: '#000000');
|
||||
|
||||
// Mock the Domain axis results.
|
||||
final domainAxis = new MockDomainAxis();
|
||||
final domainAxis = MockDomainAxis();
|
||||
when(domainAxis.rangeBand).thenReturn(100.0);
|
||||
when(domainAxis.getLocation(1000)).thenReturn(70.0);
|
||||
when(domainAxis.getLocation(2000)).thenReturn(70.0 + 100);
|
||||
@@ -74,7 +74,7 @@ void main() {
|
||||
series.setAttr(domainAxisKey, domainAxis);
|
||||
|
||||
// Mock the Measure axis results.
|
||||
final measureAxis = new MockMeasureAxis();
|
||||
final measureAxis = MockMeasureAxis();
|
||||
for (var i = 0; i <= 100; i++) {
|
||||
when(measureAxis.getLocation(i.toDouble()))
|
||||
.thenReturn(20.0 + 100.0 - i.toDouble());
|
||||
@@ -94,9 +94,9 @@ void main() {
|
||||
setUp(() {
|
||||
selectNearestByDomain = true;
|
||||
|
||||
renderer = new LineRenderer<int>(
|
||||
config: new LineRendererConfig(strokeWidthPx: 1.0));
|
||||
final layoutBounds = new Rectangle<int>(70, 20, 200, 100);
|
||||
renderer =
|
||||
LineRenderer<int>(config: LineRendererConfig(strokeWidthPx: 1.0));
|
||||
final layoutBounds = Rectangle<int>(70, 20, 200, 100);
|
||||
renderer.layout(layoutBounds, layoutBounds);
|
||||
return renderer;
|
||||
});
|
||||
@@ -114,11 +114,11 @@ void main() {
|
||||
renderer.configureSeries(seriesList);
|
||||
renderer.preprocessSeries(seriesList);
|
||||
renderer.update(seriesList, false);
|
||||
renderer.paint(new MockCanvas(), 1.0);
|
||||
renderer.paint(MockCanvas(), 1.0);
|
||||
|
||||
// Act Point just below barSeries.data[0]
|
||||
final details = renderer.getNearestDatumDetailPerSeries(
|
||||
new Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
selectNearestByDomain,
|
||||
null);
|
||||
|
||||
@@ -142,11 +142,11 @@ void main() {
|
||||
renderer.configureSeries(seriesList);
|
||||
renderer.preprocessSeries(seriesList);
|
||||
renderer.update(seriesList, false);
|
||||
renderer.paint(new MockCanvas(), 1.0);
|
||||
renderer.paint(MockCanvas(), 1.0);
|
||||
|
||||
// Act
|
||||
final details = renderer.getNearestDatumDetailPerSeries(
|
||||
new Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
selectNearestByDomain,
|
||||
null);
|
||||
|
||||
@@ -163,11 +163,11 @@ void main() {
|
||||
renderer.configureSeries(seriesList);
|
||||
renderer.preprocessSeries(seriesList);
|
||||
renderer.update(seriesList, false);
|
||||
renderer.paint(new MockCanvas(), 1.0);
|
||||
renderer.paint(MockCanvas(), 1.0);
|
||||
|
||||
// Act
|
||||
final details = renderer.getNearestDatumDetailPerSeries(
|
||||
new Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
selectNearestByDomain,
|
||||
null);
|
||||
|
||||
@@ -191,11 +191,11 @@ void main() {
|
||||
renderer.configureSeries(seriesList);
|
||||
renderer.preprocessSeries(seriesList);
|
||||
renderer.update(seriesList, false);
|
||||
renderer.paint(new MockCanvas(), 1.0);
|
||||
renderer.paint(MockCanvas(), 1.0);
|
||||
|
||||
// Act
|
||||
final details = renderer.getNearestDatumDetailPerSeries(
|
||||
new Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
selectNearestByDomain,
|
||||
null);
|
||||
|
||||
@@ -214,11 +214,11 @@ void main() {
|
||||
renderer.configureSeries(seriesList);
|
||||
renderer.preprocessSeries(seriesList);
|
||||
renderer.update(seriesList, false);
|
||||
renderer.paint(new MockCanvas(), 1.0);
|
||||
renderer.paint(MockCanvas(), 1.0);
|
||||
|
||||
// Act
|
||||
final details = renderer.getNearestDatumDetailPerSeries(
|
||||
new Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
selectNearestByDomain,
|
||||
null);
|
||||
|
||||
@@ -241,11 +241,11 @@ void main() {
|
||||
renderer.configureSeries(seriesList);
|
||||
renderer.preprocessSeries(seriesList);
|
||||
renderer.update(seriesList, false);
|
||||
renderer.paint(new MockCanvas(), 1.0);
|
||||
renderer.paint(MockCanvas(), 1.0);
|
||||
|
||||
// Act
|
||||
final details = renderer.getNearestDatumDetailPerSeries(
|
||||
new Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
Point<double>(70.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
selectNearestByDomain,
|
||||
null);
|
||||
|
||||
@@ -277,11 +277,11 @@ void main() {
|
||||
renderer.configureSeries(seriesList);
|
||||
renderer.preprocessSeries(seriesList);
|
||||
renderer.update(seriesList, false);
|
||||
renderer.paint(new MockCanvas(), 1.0);
|
||||
renderer.paint(MockCanvas(), 1.0);
|
||||
|
||||
// Act
|
||||
final details = renderer.getNearestDatumDetailPerSeries(
|
||||
new Point<double>(70.0 + 100.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
Point<double>(70.0 + 100.0 + 10.0, 20.0 + 100.0 - 5.0),
|
||||
selectNearestByDomain,
|
||||
null);
|
||||
|
||||
@@ -312,11 +312,11 @@ void main() {
|
||||
renderer.configureSeries(seriesList);
|
||||
renderer.preprocessSeries(seriesList);
|
||||
renderer.update(seriesList, false);
|
||||
renderer.paint(new MockCanvas(), 1.0);
|
||||
renderer.paint(MockCanvas(), 1.0);
|
||||
|
||||
// Act
|
||||
final details = renderer.getNearestDatumDetailPerSeries(
|
||||
new Point<double>(70.0 + 100.0 + 10.0, 20.0 + 10.0),
|
||||
Point<double>(70.0 + 100.0 + 10.0, 20.0 + 10.0),
|
||||
selectNearestByDomain,
|
||||
null);
|
||||
|
||||
@@ -333,19 +333,17 @@ void main() {
|
||||
test('no selection for points outside of viewport', () {
|
||||
// Setup
|
||||
final seriesList = <MutableSeries<int>>[
|
||||
_makeSeries(id: 'foo')..data.add(new MyRow(-1000, 20))
|
||||
_makeSeries(id: 'foo')..data.add(MyRow(-1000, 20))
|
||||
];
|
||||
renderer.configureSeries(seriesList);
|
||||
renderer.preprocessSeries(seriesList);
|
||||
renderer.update(seriesList, false);
|
||||
renderer.paint(new MockCanvas(), 1.0);
|
||||
renderer.paint(MockCanvas(), 1.0);
|
||||
|
||||
// Act
|
||||
// Note: point is in the axis, over a bar outside of the viewport.
|
||||
final details = renderer.getNearestDatumDetailPerSeries(
|
||||
new Point<double>(-0.0, 20.0 + 100.0 - 5.0),
|
||||
selectNearestByDomain,
|
||||
null);
|
||||
Point<double>(-0.0, 20.0 + 100.0 - 5.0), selectNearestByDomain, null);
|
||||
|
||||
// Verify
|
||||
expect(details.length, equals(0));
|
||||
|
||||
Reference in New Issue
Block a user