Mounir Bouaiche

Add ensureScreenSize to ScreenUtilInit constructor

@@ -12,6 +12,7 @@ class MyApp extends StatelessWidget { @@ -12,6 +12,7 @@ class MyApp extends StatelessWidget {
12 // In first method you only need to wrap [MaterialApp] with [ScreenUtilInit] and that's it 12 // In first method you only need to wrap [MaterialApp] with [ScreenUtilInit] and that's it
13 return ScreenUtilInit( 13 return ScreenUtilInit(
14 responsiveWidgets: responsiveWidgets, 14 responsiveWidgets: responsiveWidgets,
  15 + ensureScreenSize: true,
15 child: MaterialApp( 16 child: MaterialApp(
16 debugShowCheckedModeBanner: false, 17 debugShowCheckedModeBanner: false,
17 title: 'First Method', 18 title: 'First Method',
  1 +import 'dart:async';
1 import 'dart:collection'; 2 import 'dart:collection';
2 3
3 import 'package:flutter/widgets.dart'; 4 import 'package:flutter/widgets.dart';
@@ -99,12 +100,14 @@ class _ScreenUtilInitState extends State<ScreenUtilInit> @@ -99,12 +100,14 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
99 final _canMarkedToBuild = HashSet<String>(); 100 final _canMarkedToBuild = HashSet<String>();
100 MediaQueryData? _mediaQueryData; 101 MediaQueryData? _mediaQueryData;
101 final _binding = WidgetsBinding.instance; 102 final _binding = WidgetsBinding.instance;
  103 + final _screenSizeCompleter = Completer<void>();
102 104
103 @override 105 @override
104 void initState() { 106 void initState() {
105 if (widget.responsiveWidgets != null) { 107 if (widget.responsiveWidgets != null) {
106 _canMarkedToBuild.addAll(widget.responsiveWidgets!); 108 _canMarkedToBuild.addAll(widget.responsiveWidgets!);
107 } 109 }
  110 + _validateSize().then(_screenSizeCompleter.complete);
108 111
109 super.initState(); 112 super.initState();
110 _binding.addObserver(this); 113 _binding.addObserver(this);
@@ -129,6 +132,10 @@ class _ScreenUtilInitState extends State<ScreenUtilInit> @@ -129,6 +132,10 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
129 return mq; 132 return mq;
130 } 133 }
131 134
  135 + Future<void> _validateSize() async {
  136 + if (widget.ensureScreenSize ?? false) return ScreenUtil.ensureScreenSize();
  137 + }
  138 +
132 void _markNeedsBuildIfAllowed(Element el) { 139 void _markNeedsBuildIfAllowed(Element el) {
133 final widgetName = el.widget.runtimeType.toString(); 140 final widgetName = el.widget.runtimeType.toString();
134 final allowed = widget is SU || 141 final allowed = widget is SU ||
@@ -162,20 +169,28 @@ class _ScreenUtilInitState extends State<ScreenUtilInit> @@ -162,20 +169,28 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
162 Widget build(BuildContext context) { 169 Widget build(BuildContext context) {
163 final mq = _mediaQueryData; 170 final mq = _mediaQueryData;
164 171
165 - if (mq == null) return SizedBox.shrink(); 172 + if (mq == null) return const SizedBox.shrink();
166 173
  174 + return FutureBuilder<void>(
  175 + future: _screenSizeCompleter.future,
  176 + builder: (c, snapshot) {
167 ScreenUtil.configure( 177 ScreenUtil.configure(
168 data: mq, 178 data: mq,
169 designSize: widget.designSize, 179 designSize: widget.designSize,
170 splitScreenMode: widget.splitScreenMode, 180 splitScreenMode: widget.splitScreenMode,
171 minTextAdapt: widget.minTextAdapt, 181 minTextAdapt: widget.minTextAdapt,
172 - ensureScreenHasSize: widget.ensureScreenSize,  
173 fontSizeResolver: widget.fontSizeResolver, 182 fontSizeResolver: widget.fontSizeResolver,
174 ); 183 );
175 184
  185 + if (snapshot.connectionState == ConnectionState.done) {
176 return widget.builder?.call(context, widget.child) ?? widget.child!; 186 return widget.builder?.call(context, widget.child) ?? widget.child!;
177 } 187 }
178 188
  189 + return const SizedBox.shrink();
  190 + },
  191 + );
  192 + }
  193 +
179 @override 194 @override
180 void dispose() { 195 void dispose() {
181 _binding.removeObserver(this); 196 _binding.removeObserver(this);