Welcome to the Flutter feedback portal. We’re happy you’re here! If you have feedback on how to improve the Flutter, we’d love to hear it!>
Thanks for joining our community and helping improve Syncfusion products!
Axis object should be able to set the range of zoomFactor to avoid user "over-zoom".
Also, there is a bug related to this feature.
When zoom is enabled, a UnsupportedError will be thrown if user keep zooming in until zoomFactor = 0.
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following UnsupportedError was thrown building LayoutBuilder:
Unsupported operation: Infinity or NaN toInt
The relevant error-causing widget was:
SfCartesianChart lib/main.dart:32:13
When the exception was thrown, this was the stack:
#0 double.toInt (dart:core-patch/double.dart:192:36)
#1 double.floor (dart:core-patch/double.dart:161:34)
#2 DateTimeAxis._alignRangeStart (package:syncfusion_flutter_charts/src/chart/axis/datetime_axis.dart:496:43)
#3 DateTimeAxis.generateVisibleLabels (package:syncfusion_flutter_charts/src/chart/axis/datetime_axis.dart:416:16)
#4 DateTimeAxis._calculateRangeAndInterval (package:syncfusion_flutter_charts/src/chart/axis/datetime_axis.dart:271:9)
#5 _calculateYRangeOnZoomX (package:syncfusion_flutter_charts/src/chart/utils/helper.dart:2853:11)
#6 NumericAxis._calculateActualRange (package:syncfusion_flutter_charts/src/chart/axis/numeric_axis.dart:309:22)
#7 NumericAxis._calculateRangeAndInterval (package:syncfusion_flutter_charts/src/chart/axis/numeric_axis.dart:287:5)
#8 _ChartAxis._measureAxesBounds (package:syncfusion_flutter_charts/src/chart/axis/axis_panel.dart:105:14)
#9 _ContainerArea._calculateBounds (package:syncfusion_flutter_charts/src/chart/base/chart_base.dart:1765:23)
#10 _ContainerArea._initializeChart (package:syncfusion_flutter_charts/src/chart/base/chart_base.dart:1747:5)
#11 _ContainerArea.build.
#12 _LayoutBuilderElement._layout.
#13 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2620:19)
#14 _LayoutBuilderElement._layout (package:flutter/src/widgets/layout_builder.dart:117:11)
#15 RenderObject.invokeLayoutCallback.
#16 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:920:15)
#17 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1868:13)
#18 RenderConstrainedLayoutBuilder.rebuildIfNecessary (package:flutter/src/widgets/layout_builder.dart:226:7)
#19 _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:299:5)
#20 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1632:7)
#21 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:889:18)
#22 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:404:19)
#23 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:867:13)
#24 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
#25 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
#26 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1056:9)
#27 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:972:5)
#31 _invoke (dart:ui/hooks.dart:253:10)
#32 _drawFrame (dart:ui/hooks.dart:211:3)
(elided 3 frames from dart:async)
════════════════════════════════════════════════════════════════════════════════════════════════════
mport 'dart:async';
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';
import 'package:intl/intl.dart';
void main() {
runApp(MaterialApp(
home: TestPage(),
));
}
class TestPage extends StatefulWidget {
@override
_TestPageState createState() => _TestPageState();
}
class _TestPageState extends State<TestPage> {
Future future;
@override
void initState() {
super.initState();
future = Future.delayed(Duration(seconds: 1));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: SfCartesianChart(
series: [
LineSeries<Datum, DateTime>(
dataSource: [
Datum(DateTime(2020, 7, 1), 3),
Datum(DateTime(2020, 7, 2), 1),
Datum(DateTime(2020, 7, 3), 4),
Datum(DateTime(2020, 7, 4), 8),
Datum(DateTime(2020, 7, 5), 5),
Datum(DateTime(2020, 7, 6), 1),
Datum(DateTime(2020, 7, 7), 3),
Datum(DateTime(2020, 7, 8), 7),
Datum(DateTime(2020, 7, 9), 2),
],
xValueMapper: (Datum datum, _) => datum.x,
yValueMapper: (Datum datum, _) => datum.y,
markerSettings: MarkerSettings(
isVisible: true,
),
),
],
primaryXAxis: DateTimeAxis(
dateFormat: DateFormat.Md().add_Hm(),
),
zoomPanBehavior: ZoomPanBehavior(
enablePanning: true,
enablePinching: true,
zoomMode: ZoomMode.x,
),
),
);
}
}
class Datum {
DateTime x;
num y;
Datum(this.x, this.y);
}