Mounir Bouaiche

Update logic if allowing widget to being rebuilt

  1 +import 'dart:collection';
  2 +
1 import 'package:flutter/widgets.dart'; 3 import 'package:flutter/widgets.dart';
  4 +import './_flutter_widgets.dart';
2 5
3 import 'screenutil_mixin.dart'; 6 import 'screenutil_mixin.dart';
4 import 'screen_util.dart'; 7 import 'screen_util.dart';
@@ -67,13 +70,16 @@ class ScreenUtilInit extends StatefulWidget { @@ -67,13 +70,16 @@ class ScreenUtilInit extends StatefulWidget {
67 70
68 class _ScreenUtilInitState extends State<ScreenUtilInit> 71 class _ScreenUtilInitState extends State<ScreenUtilInit>
69 with WidgetsBindingObserver { 72 with WidgetsBindingObserver {
70 - late final Iterable<String>? _canMarkedToBuild; 73 + final _canMarkedToBuild = HashSet<String>();
71 MediaQueryData? _mediaQueryData; 74 MediaQueryData? _mediaQueryData;
72 - final WidgetsBinding _binding = WidgetsBinding.instance; 75 + final _binding = WidgetsBinding.instance;
73 76
74 @override 77 @override
75 void initState() { 78 void initState() {
76 - _canMarkedToBuild = widget.responsiveWidgets; 79 + if (widget.responsiveWidgets != null) {
  80 + _canMarkedToBuild.addAll(widget.responsiveWidgets!);
  81 + }
  82 +
77 super.initState(); 83 super.initState();
78 _binding.addObserver(this); 84 _binding.addObserver(this);
79 } 85 }
@@ -98,13 +104,12 @@ class _ScreenUtilInitState extends State<ScreenUtilInit> @@ -98,13 +104,12 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
98 } 104 }
99 105
100 void _markNeedsBuildIfAllowed(Element el) { 106 void _markNeedsBuildIfAllowed(Element el) {
101 - if (_canMarkedToBuild != null) {  
102 - final widget = el.widget, widgetName = el.widget.runtimeType.toString();  
103 -  
104 - if (widget is! SU && !_canMarkedToBuild!.contains(widgetName)) return;  
105 - } 107 + final widgetName = el.widget.runtimeType.toString();
  108 + final allowed = widget is SU ||
  109 + _canMarkedToBuild.contains(widgetName) ||
  110 + !(widgetName.startsWith('_') || flutterWidgets.contains(widgetName));
106 111
107 - el.markNeedsBuild(); 112 + if (allowed) el.markNeedsBuild();
108 } 113 }
109 114
110 void _updateTree(Element el) { 115 void _updateTree(Element el) {