Skip to content

_RenderScaledInlineWidget can throw assertion due to floating point rounding problems #130588

Closed

Description

@moffatman

Is there an existing issue for this?

Steps to reproduce

  1. Create a container Text.rich with width 502.5454545454545
  2. Make textScaleFactor 0.95
  3. Include in it a WidgetSpan which takes all available width

Expected results

No assertion thrown

Actual results

Assertion is thrown that child of _RenderScaledInlineWidget does not meet its constraints. That's because of floating point rounding error.

  ( 502.5454545454545 / 0.95 ) * 0.95
=   528.9952153110048          * 0.95
=   502.54545454545456

Code sample

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

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  createState() => MyAppState22();
}

class MyAppState22 extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Center(
        child: SizedBox(
          width: 502.5454545454545,
          child: Text.rich(
            WidgetSpan(child: Row()),
            textScaleFactor: 0.95
          )
        )
      )
    );
  }
}

Screenshots or Video

No response

Logs

Logs
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
_RenderScaledInlineWidget does not meet its constraints.
Constraints:
  BoxConstraints(0.0<=w<=502.5, 0.0<=h<=Infinity)
Size:
  Size(502.5, 0.0)
Constraints maxwidth callum:
  502.5454545454545
Size width callum:
  502.54545454545456
If you are not writing your own RenderBox subclass, then this is not your fault. Contact support:
https://github.com/flutter/flutter/issues/new?template=2_bug.yml

The relevant error-causing widget was:
  Text Text:file:///Users/callum/Code/chan/lib/widgets/post_row.dart:169:19

When the exception was thrown, this was the stack:
#0      RenderBox.debugAssertDoesMeetConstraints.<anonymous closure>
(package:flutter/src/rendering/box.dart:2259:9)
#1      RenderBox.debugAssertDoesMeetConstraints (package:flutter/src/rendering/box.dart:2348:6)
#2      RenderBox.size=.<anonymous closure> (package:flutter/src/rendering/box.dart:2030:7)
#3      RenderBox.size= (package:flutter/src/rendering/box.dart:2032:6)
#4      _RenderScaledInlineWidget.performLayout (package:flutter/src/widgets/widget_span.dart:387:5)
#5      RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#6      RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#7      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#8      RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#9      RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#10     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#11     RenderInlineChildrenContainerDefaults._layoutChild (package:flutter/src/rendering/paragraph.dart:124:28)
#12     RenderInlineChildrenContainerDefaults.layoutInlineChildren
(package:flutter/src/rendering/paragraph.dart:156:9)
#13     RenderParagraph.performLayout (package:flutter/src/rendering/paragraph.dart:764:30)
#14     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#15     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#16     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#17     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#18     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#19     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#20     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#21     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#22     RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:238:12)
#23     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#24     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#25     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#26     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:868:45)
#27     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:903:32)
#28     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#29     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#30     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#31     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:868:45)
#32     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:903:32)
#33     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#34     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#35     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#36     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#37     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#38     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#39     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:580:43)
#40     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:607:12)
#41     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#42     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#43     RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:238:12)
#44     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#45     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#46     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#47     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#48     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#49     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#50     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#51     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#52     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#53     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#54     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#55     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#56     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#57     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#58     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#59     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#60     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#61     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#62     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#63     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#64     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#65     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#66     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#67     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#68     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#69     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#70     _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:315:14)
#71     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#72     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#73     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#74     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#75     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#76     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#77     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#78     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#79     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#80     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#81     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#82     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#83     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#84     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#85     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#86     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#87     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#88     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#89     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:580:43)
#90     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:607:12)
#91     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#92     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#93     RenderAnimatedSize.performLayout (package:flutter/src/rendering/animated_size.dart:210:12)
#94     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#95     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#96     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#97     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1431:11)
#98     RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#99     RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#100    RenderAnimatedSize.performLayout (package:flutter/src/rendering/animated_size.dart:210:12)
#101    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#102    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#103    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#104    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#105    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#106    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#107    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#108    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#109    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#110    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#111    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#112    RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:213:28)
#113    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#114    RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:534:13)
#115    RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1512:12)
#116    RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1421:20)
#117    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#118    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#119    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#120    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#121    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#122    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#123    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#124    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#125    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#126    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#127    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#128    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#129    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#130    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#131    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#132    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#133    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#134    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#135    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#136    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#137    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#138    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#139    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#140    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#141    RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:554:11)
#142    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#143    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#144    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#145    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#146    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#147    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#148    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#149    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#150    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#151    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#152    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#153    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#154    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#155    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#156    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#157    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#158    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#159    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#160    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#161    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#162    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#163    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#164    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#165    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
#166    RenderObject.layout (package:flutter/src/rendering/object.dart:2493:7)
#167    RenderBox.layout (package:flutter/src/rendering/box.dart:2384:11)
#168    ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#169    RenderStack._computeSize (package:flutter/src/rendering/stack.dart:580:43)
#170    RenderStack.performLayout (package:flutter/src/rendering/stack.dart:607:12)
#171    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2332:7)
#172    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1013:18)
#173    RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:494:19)
#174    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:918:13)
#175    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:360:5)
#176    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1300:15)
#177    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1230:9)
#178    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1086:5)
#182    _invoke (dart:ui/hooks.dart:172:10)
#183    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:401:5)
#184    _drawFrame (dart:ui/hooks.dart:140:31)
(elided 3 frames from dart:async)

The following RenderObject was being processed when the exception was fired: _RenderScaledInlineWidget#07718
relayoutBoundary=up33 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
  creator: _AutoScaleInlineWidget ← Semantics ← _WidgetSpanParentData ← RichText ← Text ← Listener ←
    ConditionalOnTapUp ← IgnorePointer ← Padding ← Builder ←
    _InheritedProviderScope<PostSpanZoneData?> ← ChangeNotifierProvider<PostSpanZoneData> ← ⋯
  parentData: <none> (can use size)
  constraints: BoxConstraints(0.0<=w<=502.5, 0.0<=h<=Infinity)
  size: Size(502.5, 0.0)
This RenderObject had the following child:
    child: RenderConstrainedBox#79fbf relayoutBoundary=up34 NEEDS-PAINT
════════════════════════════════════════════════════════════════════════════════════════════════════

Flutter Doctor output

Doctor output
[!] Flutter (Channel master, 3.13.0-3.0.pre.21, on macOS 13.4.1 22F82
    darwin-arm64, locale en-CA)
    • Flutter version 3.13.0-3.0.pre.21 on channel master at
      /Users/callum/Code/flutter
    ! Upstream repository https://github.com/moffatman/flutter.git is not a
      standard remote.
      Set environment variable "FLUTTER_GIT_URL" to
      https://github.com/moffatman/flutter.git to dismiss this error.
    • Framework revision 40ebe3f5b7 (2 days ago), 2023-07-12 11:14:00 -0400
    • Engine revision d68ea304ee
    • Dart version 3.1.0 (build 3.1.0-300.0.dev)
    • DevTools version 2.25.0
    • If those were intentional, you can disregard the above warnings; however
      it is recommended to use "git" directly to perform update checks and
      upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/callum/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Applications/Android
      Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      17.0.6+0-17.0.6b802.4-9586694)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14E300c
    • CocoaPods version 1.12.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • 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.6+0-17.0.6b802.4-9586694)

[✓] VS Code (version 1.79.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.68.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 13.4.1 22F82
      darwin-arm64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 114.0.5735.198

[✓] Network resources
    • All expected network resources are available.

! Doctor found issues in 1 category.

Activity

  1. moffatman commented on Jul 14, 2023

    @moffatman
    ContributorAuthor

    cc @LongCatIsLooong, related to this? #127308

  2. github-actions commented on Jul 31, 2023

    @github-actions

    This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

  3. locked as resolved and limited conversation to collaborators on Jul 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

frameworkflutter/packages/flutter repository. See also f: labels.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions