Skip to content

Convert double to int to fix floating point comparison #23

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 10, 2021

Conversation

franciscrispin
Copy link
Contributor

The GapLocationException could be mistakenly thrown when comparing guest.center.dx == host.width / 2 as both values are doubles. This led to the navigation bar showing up as a blank state. Refer to the screen recording and screen shots attached for reference.

Screenshot_20210818-132255

21-08-18-13-22-42.1.mp4

- This comparison `guest.center.dx == host.width / 2` could fail as each
  double can end up with different number of decimal places
@franciscrispin
Copy link
Contributor Author

Hi @vizhan-lanars @LanarsInc can I get your review on this PR :)

@vizhan-lanars
Copy link
Collaborator

@franciscrispin Could you provide code or steps to reproduce that exception?

@zeeshanahmad0201
Copy link

I'm experiencing this issue with the iPhone 15 and above.

I'm using Flutter 3.24.2 and animated_bottom_navigation_bar: ^1.3.3

simulator_screenshot_5CCA0D27-9C06-4420-93B9-B5FD23F743A6

Steps to reproduce:

  1. Use gapLocation: GapLocation.center under AnimatedBottomNavigationBar.builder
  2. Use floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked under Scaffold
  3. Open the application you will get this error in the logs:

======== Exception caught by rendering library =====================================================
The following GapLocationException was thrown during paint():
Wrong gap location in AnimatedBottomNavigationBar towards FloatingActionButtonLocation => consider use GapLocation.end instead of GapLocation.center or change FloatingActionButtonLocation

When the exception was thrown, this was the stack:
#0 CircularNotchedAndCorneredRectangle.getOuterPath (package:animated_bottom_navigation_bar/src/circular_notched_and_cornered_shape.dart:79:9)
#1 CircularNotchedAndCorneredRectangleClipper.getClip (package:animated_bottom_navigation_bar/src/circular_notch_and_corner_clipper.dart:22:18)
#2 _RenderCustomClip._updateClip (package:flutter/src/rendering/proxy_box.dart:1455:25)
#3 RenderPhysicalShape.paint (package:flutter/src/rendering/proxy_box.dart:2120:5)
#4 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3268:7)
#5 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:251:13)
#6 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:136:13)
#7 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3268:7)
#8 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:251:13)
#9 RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:3159:15)
#10 RenderCustomMultiChildLayoutBox.paint (package:flutter/src/rendering/custom_layout.dart:409:5)
#11 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3268:7)
#12 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:251:13)
#13 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:136:13)
#14 _RenderInkFeatures.paint (package:flutter/src/material/material.dart:609:11)
#15 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3268:7)
#16 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:251:13)
#17 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:136:13)
#18 RenderPhysicalModel.paint. (package:flutter/src/rendering/proxy_box.dart:2055:15)
#19 PaintingContext.pushClipRRect (package:flutter/src/rendering/object.dart:576:14)
#20 RenderPhysicalModel.paint (package:flutter/src/rendering/proxy_box.dart:2042:21)
#21 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3268:7)
#22 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:251:13)
#23 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:136:13)
#24 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3268:7)
#25 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:251:13)
#26 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:136:13)
#27 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3268:7)
#28 PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:167:11)
#29 PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:110:5)
#30 PipelineOwner.flushPaint (package:flutter/src/rendering/object.dart:1183:31)
#31 PipelineOwner.flushPaint (package:flutter/src/rendering/object.dart:1193:15)
#32 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:604:23)
#33 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1164:13)
#34 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:468:5)
#35 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1397:15)
#36 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1318:9)
#37 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1176:5)
#41 _invoke (dart:ui/hooks.dart:314:10)
#42 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:419:5)
#43 _drawFrame (dart:ui/hooks.dart:283:31)
(elided 3 frames from dart:async)
The following RenderObject was being processed when the exception was fired: RenderPhysicalShape#8ea2b relayoutBoundary=up2
... parentData: (can use size)
... constraints: BoxConstraints(w=430.0, 0.0<=h<=932.0)
... semantics node: SemanticsNode#8
... Rect.fromLTRB(0.0, 842.0, 430.0, 932.0)
... elevation: 8.0
... size: Size(430.0, 90.0)
... elevation: 8.0
... color: Color(0x00000000)
... shadowColor: Color(0x00000000)
... clipper: CircularNotchedAndCorneredRectangleClipper
RenderObject: RenderPhysicalShape#8ea2b relayoutBoundary=up2
parentData: (can use size)
constraints: BoxConstraints(w=430.0, 0.0<=h<=932.0)
semantics node: SemanticsNode#8
Rect.fromLTRB(0.0, 842.0, 430.0, 932.0)
elevation: 8.0
size: Size(430.0, 90.0)
elevation: 8.0
color: Color(0x00000000)
shadowColor: Color(0x00000000)
clipper: CircularNotchedAndCorneredRectangleClipper
... child: RenderCustomPaint#6be70 relayoutBoundary=up3 NEEDS-PAINT
... parentData: (can use size)
... constraints: BoxConstraints(w=430.0, 0.0<=h<=932.0)
... size: Size(430.0, 90.0)
... painter: _AroundCustomPainter#d9a2a()
... child: RenderClipPath#9db5c relayoutBoundary=up4 NEEDS-PAINT
... parentData: (can use size)
... constraints: BoxConstraints(w=430.0, 0.0<=h<=932.0)
... size: Size(430.0, 90.0)
... child: RenderPhysicalModel#b344c relayoutBoundary=up5 NEEDS-PAINT
... parentData: (can use size)
... constraints: BoxConstraints(w=430.0, 0.0<=h<=932.0)
... size: Size(430.0, 90.0)
... elevation: 0.0
... color: Color(0xffffffff)
... shadowColor: Color(0xffffffff)
... shape: BoxShape.rectangle
... borderRadius: BorderRadius.zero
... child: _RenderInkFeatures#960fc relayoutBoundary=up6 NEEDS-PAINT
... parentData: (can use size)
... constraints: BoxConstraints(w=430.0, 0.0<=h<=932.0)
... size: Size(430.0, 90.0)

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

Successfully merging this pull request may close these issues.

3 participants