Skip to content
This repository has been archived by the owner on Jan 9, 2023. It is now read-only.

TimeSeriesChart : PanAndZoomBehavior causing error #73

Open
rtolar opened this issue Jul 12, 2018 · 4 comments
Open

TimeSeriesChart : PanAndZoomBehavior causing error #73

rtolar opened this issue Jul 12, 2018 · 4 comments

Comments

@rtolar
Copy link

rtolar commented Jul 12, 2018

Moved from flutter/flutter#19301

While attempting to figure out how to implement pan-and-zoom on a time series graph, I received the following error:

Performing hot reload...
I/flutter ( 7381): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 7381): The following assertion was thrown during performLayout():
I/flutter ( 7381): type 'int' is not a subtype of type 'double'
I/flutter ( 7381):
I/flutter ( 7381): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter ( 7381): more information in this error message to help you determine and fix the underlying cause.
I/flutter ( 7381): In either case, please report this assertion by filing a bug on GitHub:
I/flutter ( 7381): https://github.com/flutter/flutter/issues/new
I/flutter ( 7381):
I/flutter ( 7381): When the exception was thrown, this was the stack:
I/flutter ( 7381): #0 LinearScaleViewportSettings.updateViewportScaleFactor (package:charts_common/src/chart/cartesian/axis/linear/linear_scale_viewport.dart)
I/flutter ( 7381): #1 LinearScale._configureScale (package:charts_common/src/chart/cartesian/axis/linear/linear_scale.dart:219:23)
I/flutter ( 7381): #2 LinearScale.viewportDomain (package:charts_common/src/chart/cartesian/axis/linear/linear_scale.dart:145:5)
I/flutter ( 7381): #3 DateTimeScale.viewportDomain (package:charts_common/src/chart/cartesian/axis/time/date_time_scale.dart:84:34)
I/flutter ( 7381): #4 AutoAdjustingDateTimeTickProvider.getTicks (package:charts_common/src/chart/cartesian/axis/time/auto_adjusting_date_time_tick_provider.dart:117:28)
I/flutter ( 7381): #5 PanningTickProvider.getTicks (package:charts_common/src/chart/common/behavior/zoom/panning_tick_provider.dart:74:29)
I/flutter ( 7381): #6 Axis._updateProvidedTicks (package:charts_common/src/chart/cartesian/axis/axis.dart:196:35)
I/flutter ( 7381): #7 Axis._measureHorizontalAxis (package:charts_common/src/chart/cartesian/axis/axis.dart:360:5)
I/flutter ( 7381): #8 Axis.measure (package:charts_common/src/chart/cartesian/axis/axis.dart:347:11)
I/flutter ( 7381): #9 HorizontalMarginStrategy.measure. (package:charts_common/src/chart/layout/layout_margin_strategy.dart:198:21)
I/flutter ( 7381): #10 Iterable.forEach (dart:core/iterable.dart:281:30)
I/flutter ( 7381): #11 HorizontalMarginStrategy.measure (package:charts_common/src/chart/layout/layout_margin_strategy.dart:180:11)
I/flutter ( 7381): #12 LayoutManagerImpl._measure (package:charts_common/src/chart/layout/layout_manager_impl.dart:237:56)
I/flutter ( 7381): #13 LayoutManagerImpl.measure (package:charts_common/src/chart/layout/layout_manager_impl.dart:100:24)
I/flutter ( 7381): #14 BaseChart.measure (package:charts_common/src/chart/common/base_chart.dart:252:22)
I/flutter ( 7381): #15 ChartContainerRenderObject.performLayout (package:charts_flutter/src/chart_container.dart:129:12)
I/flutter ( 7381): #16 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #17 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #18 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #19 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #20 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #21 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:141:11)
I/flutter ( 7381): #22 WidgetLayoutDelegate.performLayout (package:charts_flutter/src/widget_layout_delegate.dart:80:7)
I/flutter ( 7381): #23 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:211:7)
I/flutter ( 7381): #24 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:355:14)
I/flutter ( 7381): #25 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #26 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:141:11)
I/flutter ( 7381): #27 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:399:7)
I/flutter ( 7381): #28 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:211:7)
I/flutter ( 7381): #29 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:355:14)
I/flutter ( 7381): #30 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #31 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #32 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #33 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #34 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1143:11)
I/flutter ( 7381): #35 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #36 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #37 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #38 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #39 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #40 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #41 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #42 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #43 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #44 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #45 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #46 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #47 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #48 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #49 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #50 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #51 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:2831:13)
I/flutter ( 7381): #52 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #53 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:520:15)
I/flutter ( 7381): #54 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #55 __RenderTheatre&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #56 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #57 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #58 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #59 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #60 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #61 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #62 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #63 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #64 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #65 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 7381): #66 RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter ( 7381): #67 RenderView.performLayout (package:flutter/src/rendering/view.dart:125:13)
I/flutter ( 7381): #68 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1445:7)
I/flutter ( 7381): #69 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:709:18)
I/flutter ( 7381): #70 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:270:19)
I/flutter ( 7381): #71 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:627:13)
I/flutter ( 7381): #72 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5)
I/flutter ( 7381): #73 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter ( 7381): #74 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter ( 7381): #75 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame. (package:flutter/src/scheduler/binding.dart:751:7)
I/flutter ( 7381): #77 _Timer._runTimers (dart:isolate/runtime/libtimer_impl.dart:382:19)
I/flutter ( 7381): #78 _Timer._handleMessage (dart:isolate/runtime/libtimer_impl.dart:416:5)
I/flutter ( 7381): #79 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:165:12)
I/flutter ( 7381): (elided one frame from package dart:async)
I/flutter ( 7381):
I/flutter ( 7381): The following RenderObject was being processed when the exception was fired:
I/flutter ( 7381): ChartContainerRenderObject#1c86c NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 7381): creator: ChartContainer ← Listener ← _GestureSemantics ← RawGestureDetector ←
I/flutter ( 7381): GestureDetector ← LayoutId-[] ← CustomMultiChildLayout ← TimeSeriesChart ←
I/flutter ( 7381): SimpleTimeSeriesChart ← MediaQuery ← LayoutId-[<_ScaffoldSlot.body>] ← CustomMultiChildLayout ← ⋯
I/flutter ( 7381): parentData: (can use size)
I/flutter ( 7381): constraints: BoxConstraints(w=411.4, h=603.4)
I/flutter ( 7381): semantic boundary
I/flutter ( 7381): size: Size(411.4, 603.4)
I/flutter ( 7381): This RenderObject has no descendants.
I/flutter ( 7381): ════════════════════════════════════════════════════════════════════════════════════════════════════
Reloaded 2 of 608 libraries in 1,518ms.
/// Timeseries chart example
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:flutter/material.dart';

class SimpleTimeSeriesChart extends StatelessWidget {
final List<charts.Series> seriesList;
final bool animate;

//SimpleTimeSeriesChart(this.seriesList, {this.animate});
SimpleTimeSeriesChart(this.seriesList, {this.animate});
/// Creates a [TimeSeriesChart] with sample data and no transition.
factory SimpleTimeSeriesChart.withSampleData() {
return new SimpleTimeSeriesChart(
_createSampleData(),
// Disable animations for image tests.
animate: true,
);
}

@OverRide
Widget build(BuildContext context) {

var c =  charts.TimeSeriesChart(
  seriesList,
  animate: animate,
  // Optionally pass in a [DateTimeFactory] used by the chart. The factory
  // should create the same type of [DateTime] as the data provided. If none
  // specified, the default creates local date time.
  dateTimeFactory: const charts.LocalDateTimeFactory(),
  //domainAxis: new charts.OrdinalAxisSpec(viewport: new charts.OrdinalViewport((new DateTime(2017, 9, 19)).toString(), 4)),
  domainAxis: new charts.DateTimeAxisSpec(viewport: new charts.DateTimeExtents(start: new DateTime(2017, 9, 19), end: new DateTime(2017, 9, 20))),

// *** LINE CAUSING THE ERROR BELOW ***
behaviors: [new charts.PanAndZoomBehavior()],
);

return c;

}

/// Create one series with sample hard coded data.
static List<charts.Series<XYValue, DateTime>> _createSampleData() {
final data = [
new XYValue(new DateTime(2017, 9, 19), 5),
new XYValue(new DateTime(2017, 9, 26), 25),
new XYValue(new DateTime(2017, 9, 28), 26),
new XYValue(new DateTime(2017, 10, 3), 100),
new XYValue(new DateTime(2017, 10, 10), 75),
];

return [
  new charts.Series<XYValue, DateTime>(
    id: 'Sales',
    colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
    domainFn: (XYValue datapoints, _) => datapoints.time,
    measureFn: (XYValue datapoints, _) => datapoints.value,
    data: data,
    strokeWidthPxFn: (XYValue datapoints, _) => 5,
    //domainLowerBoundFn: (_, __) => new DateTime(2017, 8, 1),
    //domainUpperBoundFn: (_, __) => new DateTime(2017, 11, 1),

  )
];

}
}

/// Sample time series data type.
class XYValue {
final DateTime time;
final int value;

XYValue(this.time, this.value);
}

@jerherrero
Copy link

Does commenting out domainAxis: new charts.DateTimeAxisSpec(... bring back PanAndZoomBehavior()?

@oetiker
Copy link

oetiker commented Sep 11, 2019

Does commenting out domainAxis: new charts.DateTimeAxisSpec(... bring back PanAndZoomBehavior()?

for me it does NOT @jerherrero any idea ?

@jerherrero
Copy link

@oetiker It's been a while since I've dug in there, but as I remember, each axis type had its own class except for the one used for a Time Series, which is an extension of another axis class.

@oetiker
Copy link

oetiker commented Sep 12, 2019

@jerherrero I found the solution here: #287 (comment)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants