Mounir Bouaiche

Add ability to exclude widgets from from rebuild list

@@ -75,6 +75,7 @@ class ScreenUtilInit extends StatefulWidget { @@ -75,6 +75,7 @@ class ScreenUtilInit extends StatefulWidget {
75 this.useInheritedMediaQuery = false, 75 this.useInheritedMediaQuery = false,
76 this.ensureScreenSize = false, 76 this.ensureScreenSize = false,
77 this.responsiveWidgets, 77 this.responsiveWidgets,
  78 + this.excludeWidgets,
78 this.fontSizeResolver = FontSizeResolvers.width, 79 this.fontSizeResolver = FontSizeResolvers.width,
79 }) : super(key: key); 80 }) : super(key: key);
80 81
@@ -90,6 +91,7 @@ class ScreenUtilInit extends StatefulWidget { @@ -90,6 +91,7 @@ class ScreenUtilInit extends StatefulWidget {
90 /// The [Size] of the device in the design draft, in dp 91 /// The [Size] of the device in the design draft, in dp
91 final Size designSize; 92 final Size designSize;
92 final Iterable<String>? responsiveWidgets; 93 final Iterable<String>? responsiveWidgets;
  94 + final Iterable<String>? excludeWidgets;
93 95
94 @override 96 @override
95 State<ScreenUtilInit> createState() => _ScreenUtilInitState(); 97 State<ScreenUtilInit> createState() => _ScreenUtilInitState();
@@ -98,6 +100,7 @@ class ScreenUtilInit extends StatefulWidget { @@ -98,6 +100,7 @@ class ScreenUtilInit extends StatefulWidget {
98 class _ScreenUtilInitState extends State<ScreenUtilInit> 100 class _ScreenUtilInitState extends State<ScreenUtilInit>
99 with WidgetsBindingObserver { 101 with WidgetsBindingObserver {
100 final _canMarkedToBuild = HashSet<String>(); 102 final _canMarkedToBuild = HashSet<String>();
  103 + final _excludedWidgets = HashSet<String>();
101 MediaQueryData? _mediaQueryData; 104 MediaQueryData? _mediaQueryData;
102 final _binding = WidgetsBinding.instance; 105 final _binding = WidgetsBinding.instance;
103 final _screenSizeCompleter = Completer<void>(); 106 final _screenSizeCompleter = Completer<void>();
@@ -137,6 +140,7 @@ class _ScreenUtilInitState extends State<ScreenUtilInit> @@ -137,6 +140,7 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
137 140
138 void _markNeedsBuildIfAllowed(Element el) { 141 void _markNeedsBuildIfAllowed(Element el) {
139 final widgetName = el.widget.runtimeType.toString(); 142 final widgetName = el.widget.runtimeType.toString();
  143 + if (_excludedWidgets.contains(widgetName)) return;
140 final allowed = widget is SU || 144 final allowed = widget is SU ||
141 _canMarkedToBuild.contains(widgetName) || 145 _canMarkedToBuild.contains(widgetName) ||
142 !(widgetName.startsWith('_') || flutterWidgets.contains(widgetName)); 146 !(widgetName.startsWith('_') || flutterWidgets.contains(widgetName));