From a8077c04775c8d233928f383b6101ff212bddbfe Mon Sep 17 00:00:00 2001 From: Liam Farnan Date: Thu, 23 May 2024 15:02:09 +0930 Subject: [PATCH 1/3] check hasSize before reading size --- lib/linear_percent_indicator.dart | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/linear_percent_indicator.dart b/lib/linear_percent_indicator.dart index 6790aa5..a8a29c1 100644 --- a/lib/linear_percent_indicator.dart +++ b/lib/linear_percent_indicator.dart @@ -177,13 +177,14 @@ class _LinearPercentIndicatorState extends State void initState() { WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted) { + final RenderObject? containerObject = _containerKey.currentContext?.findRenderObject(); + final RenderObject? keyObject = _keyIndicator.currentContext?.findRenderObject(); setState(() { - _containerWidth = _containerKey.currentContext?.size?.width ?? 0.0; - _containerHeight = _containerKey.currentContext?.size?.height ?? 0.0; + _containerWidth = (containerObject is RenderBox && containerObject.hasSize) ? containerObject.size.width : 0.0; + _containerHeight = (containerObject is RenderBox && containerObject.hasSize) ? containerObject.size.height : 0.0; if (_keyIndicator.currentContext != null) { - _indicatorWidth = _keyIndicator.currentContext?.size?.width ?? 0.0; - _indicatorHeight = - _keyIndicator.currentContext?.size?.height ?? 0.0; + _indicatorWidth = (keyObject is RenderBox && keyObject.hasSize) ? keyObject.size.width : 0.0; + _indicatorHeight = (keyObject is RenderBox && keyObject.hasSize) ? keyObject.size.height : 0.0; } }); } From 1836868e31a33e8cf2a74c0a19d96a6c2d59cf7c Mon Sep 17 00:00:00 2001 From: Liam Farnan Date: Fri, 24 May 2024 14:11:47 +0930 Subject: [PATCH 2/3] add extension for getting RenderBox size from GlobalKey --- lib/linear_percent_indicator.dart | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/linear_percent_indicator.dart b/lib/linear_percent_indicator.dart index a8a29c1..77accba 100644 --- a/lib/linear_percent_indicator.dart +++ b/lib/linear_percent_indicator.dart @@ -7,6 +7,16 @@ extension ExtDouble on double { bool get isZero => this.toString() == '0.0'; } +extension ExtGlobalKey on GlobalKey { + Size getSize() { + final RenderObject? renderObject = currentContext?.findRenderObject(); + if (renderObject is RenderBox && renderObject.hasSize) { + return renderObject.size; + } + return Size.zero; + } +} + // ignore: must_be_immutable class LinearPercentIndicator extends StatefulWidget { ///Percent value between 0.0 and 1.0 @@ -177,14 +187,14 @@ class _LinearPercentIndicatorState extends State void initState() { WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted) { - final RenderObject? containerObject = _containerKey.currentContext?.findRenderObject(); - final RenderObject? keyObject = _keyIndicator.currentContext?.findRenderObject(); + final Size containerSize = _containerKey.getSize(); + final Size keySize = _keyIndicator.getSize(); setState(() { - _containerWidth = (containerObject is RenderBox && containerObject.hasSize) ? containerObject.size.width : 0.0; - _containerHeight = (containerObject is RenderBox && containerObject.hasSize) ? containerObject.size.height : 0.0; + _containerWidth = containerSize.width; + _containerHeight = containerSize.height; if (_keyIndicator.currentContext != null) { - _indicatorWidth = (keyObject is RenderBox && keyObject.hasSize) ? keyObject.size.width : 0.0; - _indicatorHeight = (keyObject is RenderBox && keyObject.hasSize) ? keyObject.size.height : 0.0; + _indicatorWidth = keySize.width; + _indicatorHeight = keySize.height; } }); } From fa667b67e9cbcb7a50f38498f4ad3d35c41e77b7 Mon Sep 17 00:00:00 2001 From: Liam Farnan Date: Fri, 24 May 2024 14:15:34 +0930 Subject: [PATCH 3/3] rename --- lib/linear_percent_indicator.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/linear_percent_indicator.dart b/lib/linear_percent_indicator.dart index 77accba..255550a 100644 --- a/lib/linear_percent_indicator.dart +++ b/lib/linear_percent_indicator.dart @@ -188,13 +188,13 @@ class _LinearPercentIndicatorState extends State WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted) { final Size containerSize = _containerKey.getSize(); - final Size keySize = _keyIndicator.getSize(); + final Size indicatorSize = _keyIndicator.getSize(); setState(() { _containerWidth = containerSize.width; _containerHeight = containerSize.height; if (_keyIndicator.currentContext != null) { - _indicatorWidth = keySize.width; - _indicatorHeight = keySize.height; + _indicatorWidth = indicatorSize.width; + _indicatorHeight = indicatorSize.height; } }); }