GaugesFlutter icon indicating copy to clipboard operation
GaugesFlutter copied to clipboard

Gauge breaking when range has a end smaller than 10

Open leragequit opened this issue 3 months ago • 4 comments

Describe the bug When the RadialTrack has a end value smaller than 10, the range is not properly renderered and throws an exception

To Reproduce `import 'package:flutter/material.dart'; import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart';

void main() { runApp(const MyApp()); }

class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } }

class MyHomePage extends StatelessWidget { const MyHomePage({super.key, required this.title}); final String title;

@override Widget build(BuildContext context) { return Scaffold( body: Center( child: RadialGauge( track: RadialTrack(start: 0, end: 1), needlePointer: [NeedlePointer(value: 0.1)], ), ), ); } } `

Expected behavior A gauge with a range from 0 to 1, with the needle at value 0.1. And no exception being thrown

Screenshots

Image

Desktop (please complete the following information):

  • OS: Windows 10

Additional context ` ════════ Exception caught by rendering library ═════════════════════════════════ The following assertion was thrown during paint(): Offset argument contained a NaN value. 'dart:ui/painting.dart': Failed assertion: line 41 pos 10: ''

The relevant error-causing widget was: RadialGaugeContainer RadialGaugeContainer:file:///C:/Users/theon/AppData/Local/Pub/Cache/hosted/pub.dev/geekyants_flutter_gauges-1.0.4/lib/src/radial_gauge/radial_gauge.dart:200:29

When the exception was thrown, this was the stack: #2 _offsetIsValid (dart:ui/painting.dart:41:10) painting.dart:41 #3 _NativeCanvas.drawLine (dart:ui/painting.dart:6713:12) painting.dart:6713 #4 RenderRadialGaugeContainer.paintRulersAndLabels (package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge_container_painter.dart:86:16) radial_gauge_container_painter.dart:86 #5 RenderRadialGaugeContainer.paint (package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge_container_painter.dart:221:5) radial_gauge_container_painter.dart:221 #6 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #7 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #8 RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:3367:15) box.dart:3367 #9 RenderRadialGauge.paint (package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge_painter.dart:309:5) radial_gauge_painter.dart:309 #10 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #11 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #12 RenderShiftedBox.paint (package:flutter/src/rendering/shifted_box.dart:81:15) shifted_box.dart:81 #13 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #14 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #15 RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:3367:15) box.dart:3367 #16 RenderCustomMultiChildLayoutBox.paint (package:flutter/src/rendering/custom_layout.dart:425:5) custom_layout.dart:425 #17 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #18 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #19 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #20 _RenderInkFeatures.paint (package:flutter/src/material/material.dart:634:11) material.dart:634 #21 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #22 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #23 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #24 RenderPhysicalModel.paint. (package:flutter/src/rendering/proxy_box.dart:2184:15) proxy_box.dart:2184 #25 PaintingContext.pushClipRRect (package:flutter/src/rendering/object.dart:609:14) object.dart:609 #26 RenderPhysicalModel.paint (package:flutter/src/rendering/proxy_box.dart:2171:21) proxy_box.dart:2171 #27 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #28 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #29 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #30 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #31 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #32 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #33 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #34 PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:176:11) object.dart:176 #35 PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:121:5) object.dart:121 #36 PaintingContext._compositeChild (package:flutter/src/rendering/object.dart:272:7) object.dart:272 #37 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:253:7) object.dart:253 #38 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #39 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #40 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #41 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #42 _ZoomExitTransitionPainter.paint (package:flutter/src/material/page_transitions_theme.dart:1457:21) page_transitions_theme.dart:1457 #43 _RenderSnapshotWidget.paint (package:flutter/src/widgets/snapshot_widget.dart:337:15) snapshot_widget.dart:337 #44 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #45 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #46 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #47 _ZoomEnterTransitionPainter.paint (package:flutter/src/material/page_transitions_theme.dart:1362:21) page_transitions_theme.dart:1362 #48 _RenderSnapshotWidget.paint (package:flutter/src/widgets/snapshot_widget.dart:337:15) snapshot_widget.dart:337 #49 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #50 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #51 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #52 _ZoomExitTransitionPainter.paint (package:flutter/src/material/page_transitions_theme.dart:1457:21) page_transitions_theme.dart:1457 #53 _RenderSnapshotWidget.paint (package:flutter/src/widgets/snapshot_widget.dart:337:15) snapshot_widget.dart:337 #54 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #55 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #56 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #57 _ZoomEnterTransitionPainter.paint (package:flutter/src/material/page_transitions_theme.dart:1362:21) page_transitions_theme.dart:1362 #58 _RenderSnapshotWidget.paint (package:flutter/src/widgets/snapshot_widget.dart:337:15) snapshot_widget.dart:337 #59 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #60 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #61 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #62 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #63 PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:176:11) object.dart:176 #64 PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:121:5) object.dart:121 #65 PaintingContext._compositeChild (package:flutter/src/rendering/object.dart:272:7) object.dart:272 #66 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:253:7) object.dart:253 #67 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #68 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #69 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #70 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #71 RenderOffstage.paint (package:flutter/src/rendering/proxy_box.dart:3868:11) proxy_box.dart:3868 #72 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #73 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #74 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #75 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #76 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #77 _RenderTheaterMixin.paint (package:flutter/src/widgets/overlay.dart:1120:15) overlay.dart:1120 #78 _RenderTheater.paint (package:flutter/src/widgets/overlay.dart:1477:13) overlay.dart:1477 #79 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #80 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #81 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #82 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #83 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #84 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #85 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #86 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #87 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #88 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #89 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #90 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #91 RenderCustomPaint.paint (package:flutter/src/rendering/custom_paint.dart:644:11) custom_paint.dart:644 #92 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #93 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #94 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #95 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #96 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #97 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #98 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #99 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #100 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #101 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #102 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #103 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #104 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #105 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #106 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #107 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #108 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #109 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:140:13) proxy_box.dart:140 #110 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #111 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:261:13) object.dart:261 #112 RenderView.paint (package:flutter/src/rendering/view.dart:322:15) view.dart:322 #113 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3423:7) object.dart:3423 #114 PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:176:11) object.dart:176 #115 PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:121:5) object.dart:121 #116 PipelineOwner.flushPaint (package:flutter/src/rendering/object.dart:1309:31) object.dart:1309 #117 PipelineOwner.flushPaint (package:flutter/src/rendering/object.dart:1319:15) object.dart:1319 #118 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:631:23) binding.dart:631 #119 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1261:13) binding.dart:1261 #120 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:495:5) binding.dart:495 #121 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1434:15) binding.dart:1434 #122 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1347:9) binding.dart:1347 #123 SchedulerBinding.scheduleWarmUpFrame. (package:flutter/src/scheduler/binding.dart:1057:9) binding.dart:1057 #124 PlatformDispatcher.scheduleWarmUpFrame. (dart:ui/platform_dispatcher.dart:886:16) platform_dispatcher.dart:886 #128 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:193:12) isolate_patch.dart:193 (elided 5 frames from class _AssertionError, class _Timer, and dart:async-patch)

The following RenderObject was being processed when the exception was fired: RenderRadialGaugeContainer#8bafe relayoutBoundary=up3 parentData: offset=Offset(632.0, 340.5); id=null (can use size) constraints: BoxConstraints(0.0<=w<=1264.0, 0.0<=h<=681.0) size: Size(1264.0, 681.0) RenderObject: RenderRadialGaugeContainer#8bafe relayoutBoundary=up3 parentData: offset=Offset(632.0, 340.5); id=null (can use size) constraints: BoxConstraints(0.0<=w<=1264.0, 0.0<=h<=681.0) size: Size(1264.0, 681.0) `

leragequit avatar Sep 18 '25 08:09 leragequit

This is a virus, at least according to my virusscanner

leragequit avatar Sep 18 '25 08:09 leragequit

setting the steps to 1 seems to work :D

leragequit avatar Sep 18 '25 08:09 leragequit

PR for the issue is here https://github.com/GeekyAnts/GaugesFlutter/pull/291

leragequit avatar Sep 18 '25 09:09 leragequit

the PR still fixes it, but the it appears the number of steps is used as step size.

leragequit avatar Sep 19 '25 11:09 leragequit