Skip to content

[syncfusion_flutter_charts] If chart is too thin, an exception is thrown #2404

@DrNiels

Description

@DrNiels

Bug description

Due to some constraints, a chart becomes very thin. Unfortunately, this causes an exception to be thrown and the app cannot be used any more. In my tests, the presence of multiple axes seemed to be relevant for the exception to be thrown.

I actually don't care what happens if there is not sufficient space, only that usage remains possible. In our app, a user can select the size by himself. So, if he realises there's not enough space he should be able to increase the size again. So I could imagine:

  • Hiding axes
  • Scaling everything down
  • Simply show what you can with the available space
  • Show a notificiation instead of a chart

Steps to reproduce

Simply load the attached sample

Code sample

Code sample
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';

void main() async {
  runApp(MaterialApp(home: TestChart()));
}

class TestChart extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => TestChartState();
}

class TestChartState extends State<TestChart> {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: SizedBox(
        width: 50,
        child: SfCartesianChart(
          primaryYAxis: NumericAxis(
            labelFormat: '{value}asdfasdfasdfasdf',
          ),
          axes: [NumericAxis()],
          primaryXAxis: DateTimeAxis(),
          series: [
            StackedColumnSeries<num, DateTime>(
              dataSource: [3],
              xValueMapper: (num source, int index) {
                return DateTime(2025, source.toInt(), 1);
              },
              yValueMapper: (num source, int index) {
                return 57.44004;
              },
            ),
          ],
        ),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

Nothing to be seen, the screen remains empty.

Stack Traces

Stack Traces
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
BoxConstraints has non-normalized width constraints.
The offending constraints were:
  BoxConstraints(0.0<=w<=-30.8, 0.0<=h<=933.0; NOT NORMALIZED)

The relevant error-causing widget was:
  CartesianAxes
  CartesianAxes:file:///C:/Users/Niels/AppData/Local/Pub/Cache/git/flutter-widgets-20009d57b92965578eafac32850b7c6d87e92c2f/packages/syncfusion_flutter_charts/lib/src/charts/cartesian_chart.dart:1504:11

When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 266:3       throw_
package:flutter/src/rendering/box.dart 548:9                                      throwError
package:flutter/src/rendering/box.dart 600:9                                      <fn>
package:flutter/src/rendering/box.dart 617:14                                     debugAssertIsValid
package:flutter/src/rendering/object.dart 2707:18                                 layout
package:syncfusion_flutter_charts/src/charts/base.dart 2225:13                    measureHorizontalAxes
package:syncfusion_flutter_charts/src/charts/base.dart 2289:5                     performLayout
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:syncfusion_flutter_charts/src/charts/base.dart 1033:23                    performLayout
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:syncfusion_flutter_charts/src/charts/common/core_legend.dart 990:5        performLayout
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/shifted_box.dart 243:5                              performLayout
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/shifted_box.dart 243:5                              performLayout
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 293:7                                performLayout
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/shifted_box.dart 465:7                              performLayout
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/proxy_box.dart 3857:13                              performLayout
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/widgets/overlay.dart 1085:12                                  layoutChild
package:flutter/src/widgets/overlay.dart 1431:9                                   performLayout
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/custom_paint.dart 574:11                            performLayout
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
package:flutter/src/rendering/object.dart 2822:7                                  layout
package:flutter/src/rendering/view.dart 294:12                                    performLayout
package:flutter/src/rendering/object.dart 2655:7                                  [_layoutWithoutResize]
package:flutter/src/rendering/object.dart 1160:17                                 flushLayout
package:flutter/src/rendering/object.dart 1173:14                                 flushLayout
package:flutter/src/rendering/binding.dart 629:5                                  drawFrame
package:flutter/src/widgets/binding.dart 1242:13                                  drawFrame
package:flutter/src/rendering/binding.dart 495:5                                  [_handlePersistentFrameCallback]
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 117:77  tear
package:flutter/src/scheduler/binding.dart 1438:7                                 [_invokeFrameCallback]
package:flutter/src/scheduler/binding.dart 1351:9                                 handleDrawFrame
package:flutter/src/scheduler/binding.dart 1060:9                                 <fn>
lib/_engine/engine/frame_service.dart 147:9                                       <fn>
dart-sdk/lib/_internal/js_dev_runtime/private/isolate_helper.dart 47:11           internalCallback

The following RenderObject was being processed when the exception was fired: RenderCartesianAxes#0d67a relayoutBoundary=up8 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
  creator: CartesianAxesCartesianChartAreaKeyedSubtree-[GlobalKey#599d5] ← _LegendLayoutHandlerLegendLayout-[GlobalKey#6a3f3] ← PaddingPaddingDecoratedBoxContainerRepaintBoundarySfCartesianChartSizedBox ← ⋯
  parentData: offset=Offset(0.0, 0.0) (can use size)
  constraints: BoxConstraints(0.0<=w<=30.0, 0.0<=h<=933.0)
  size: MISSING
This RenderObject had the following descendants (showing up to depth 5):
    child 1: RenderDateTimeAxis#55f7b NEEDS-LAYOUT NEEDS-PAINT
    child 2: RenderNumericAxis#a3873 relayoutBoundary=up9 NEEDS-PAINT
    child 3: RenderNumericAxis#d53e4 relayoutBoundary=up9 NEEDS-PAINT
════════════════════════════════════════════════════════════════════════════════════════════════════

On which target platforms have you observed this bug?

Web, Android

Flutter Doctor output

Doctor output
[√] Flutter (Channel stable, 3.32.0, on Microsoft Windows [Version 10.0.19045.6093], locale de-DE) [611ms]
    • Flutter version 3.32.0 on channel stable at C:\Users\Niels\Documents\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision be698c48a6 (2 months ago), 2025-05-19 12:59:14 -0700     
    • Engine revision 1881800949
    • Dart version 3.8.0
    • DevTools version 2.45.1

[√] Windows Version (10 Education 64-bit, 22H2, 2009) [2,2s]

[√] Android toolchain - develop for Android devices (Android SDK version 35.0.0) [3,3s]
    • Android SDK at C:\Users\Niels\AppData\Local\Android\Sdk
    • Platform android-35, build-tools 35.0.0
    • Java binary at: C:\Program Files\Android\Android Studio1\jbr\bin\java
      This is the JDK bundled with the latest Android Studio installation on this machine.
      To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
    • Java version OpenJDK Runtime Environment (build 17.0.11+0--11852314)
    • All Android licenses accepted.

[√] Chrome - develop for the web [179ms]
    • Chrome at C:\Users\Niels\AppData\Local\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.14.6 (June 2025)) [177ms]
    • Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Community
    • Visual Studio Community 2022 version 17.14.36212.18
    • Windows 10 SDK version 10.0.26100.0

[!] Android Studio (version 2021.2) [27ms]
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    X Unable to determine bundled Java version.
    • Try updating or re-installing Android Studio.

[√] Android Studio (version 2024.1) [26ms]
    • Android Studio at C:\Program Files\Android\Android Studio1
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.11+0--11852314)

[√] VS Code, 64-bit edition (version 1.96.0) [24ms]
    • VS Code at C:\Program Files\Microsoft VS Code
    • Flutter extension version 3.114.0

[√] Connected device (4 available) [670ms]
    • SM S921B (wireless) (mobile) • adb-RFCX306GLHZ-2OV7MI._adb-tls-connect._tcp. • android-arm64  • Android 15 (API 35)
    • Windows (desktop)            • windows                                       • windows-x64    • Microsoft Windows [Version 10.0.19045.6093]
    • Chrome (web)                 • chrome                                        • web-javascript • Google Chrome 138.0.7204.169
    • Edge (web)                   • edge                                          • web-javascript • Microsoft Edge 128.0.2739.42

[√] Network resources [747ms]
    • All expected network resources are available.

! Doctor found issues in 1 category.

Metadata

Metadata

Assignees

No one assigned

    Labels

    chartsCharts componentopenOpen

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions