From 821a11781249f77d18885baa52a7f1fe45c3457a Mon Sep 17 00:00:00 2001 From: Patrick Wulfe Date: Mon, 18 Dec 2023 11:11:13 -0800 Subject: [PATCH 1/2] Fix for 'dirty' error caused by scroll notifications during layout --- lib/src/scroll_shadow.dart | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/src/scroll_shadow.dart b/lib/src/scroll_shadow.dart index aa0df42..8366d0a 100644 --- a/lib/src/scroll_shadow.dart +++ b/lib/src/scroll_shadow.dart @@ -63,14 +63,18 @@ class _ScrollShadowState extends State { set reachedStart(final bool value) { if (_reachedStart == value) return; - setState(() => _reachedStart = value); + WidgetsBinding.instance.addPostFrameCallback((_) { + setState(() => _reachedStart = value); + }); } bool get reachedEnd => _reachedEnd; set reachedEnd(final bool value) { if (_reachedEnd == value) return; - setState(() => _reachedEnd = value); + WidgetsBinding.instance.addPostFrameCallback((_) { + setState(() => _reachedEnd = value); + }); } @override @@ -186,7 +190,9 @@ class _ScrollShadowState extends State { bool _handleNewMetrics(final ScrollMetrics metrics) { if (_axis != metrics.axis) { - setState(() => _axis = metrics.axis); + WidgetsBinding.instance.addPostFrameCallback((_) { + setState(() => _axis = metrics.axis); + }); } reachedStart = metrics.pixels <= metrics.minScrollExtent; reachedEnd = metrics.pixels >= metrics.maxScrollExtent; From e06e964254ecd4138a3a724b2eb85c617d30201a Mon Sep 17 00:00:00 2001 From: Patrick Wulfe Date: Mon, 18 Dec 2023 11:21:23 -0800 Subject: [PATCH 2/2] Fix for 'dirty' state caused by setState during build --- lib/src/scroll_shadow.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/src/scroll_shadow.dart b/lib/src/scroll_shadow.dart index 8366d0a..f2a9a59 100644 --- a/lib/src/scroll_shadow.dart +++ b/lib/src/scroll_shadow.dart @@ -1,6 +1,8 @@ /// [ScrollShadow] class library flutter_scroll_shadow; +import 'dart:async'; + import 'package:flutter/material.dart'; /// Wraps a scrollable child in `ScrollShadow`s. @@ -63,7 +65,7 @@ class _ScrollShadowState extends State { set reachedStart(final bool value) { if (_reachedStart == value) return; - WidgetsBinding.instance.addPostFrameCallback((_) { + scheduleMicrotask(() { setState(() => _reachedStart = value); }); } @@ -72,7 +74,7 @@ class _ScrollShadowState extends State { set reachedEnd(final bool value) { if (_reachedEnd == value) return; - WidgetsBinding.instance.addPostFrameCallback((_) { + scheduleMicrotask(() { setState(() => _reachedEnd = value); }); } @@ -190,7 +192,7 @@ class _ScrollShadowState extends State { bool _handleNewMetrics(final ScrollMetrics metrics) { if (_axis != metrics.axis) { - WidgetsBinding.instance.addPostFrameCallback((_) { + scheduleMicrotask(() { setState(() => _axis = metrics.axis); }); }