Mounir Bouaiche

Add ensureScreenSize to ScreenUtilInit constructor

... ... @@ -12,6 +12,7 @@ class MyApp extends StatelessWidget {
// In first method you only need to wrap [MaterialApp] with [ScreenUtilInit] and that's it
return ScreenUtilInit(
responsiveWidgets: responsiveWidgets,
ensureScreenSize: true,
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: 'First Method',
... ...
import 'dart:async';
import 'dart:collection';
import 'package:flutter/widgets.dart';
... ... @@ -99,12 +100,14 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
final _canMarkedToBuild = HashSet<String>();
MediaQueryData? _mediaQueryData;
final _binding = WidgetsBinding.instance;
final _screenSizeCompleter = Completer<void>();
@override
void initState() {
if (widget.responsiveWidgets != null) {
_canMarkedToBuild.addAll(widget.responsiveWidgets!);
}
_validateSize().then(_screenSizeCompleter.complete);
super.initState();
_binding.addObserver(this);
... ... @@ -129,6 +132,10 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
return mq;
}
Future<void> _validateSize() async {
if (widget.ensureScreenSize ?? false) return ScreenUtil.ensureScreenSize();
}
void _markNeedsBuildIfAllowed(Element el) {
final widgetName = el.widget.runtimeType.toString();
final allowed = widget is SU ||
... ... @@ -162,18 +169,26 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
Widget build(BuildContext context) {
final mq = _mediaQueryData;
if (mq == null) return SizedBox.shrink();
ScreenUtil.configure(
data: mq,
designSize: widget.designSize,
splitScreenMode: widget.splitScreenMode,
minTextAdapt: widget.minTextAdapt,
ensureScreenHasSize: widget.ensureScreenSize,
fontSizeResolver: widget.fontSizeResolver,
if (mq == null) return const SizedBox.shrink();
return FutureBuilder<void>(
future: _screenSizeCompleter.future,
builder: (c, snapshot) {
ScreenUtil.configure(
data: mq,
designSize: widget.designSize,
splitScreenMode: widget.splitScreenMode,
minTextAdapt: widget.minTextAdapt,
fontSizeResolver: widget.fontSizeResolver,
);
if (snapshot.connectionState == ConnectionState.done) {
return widget.builder?.call(context, widget.child) ?? widget.child!;
}
return const SizedBox.shrink();
},
);
return widget.builder?.call(context, widget.child) ?? widget.child!;
}
@override
... ...