Mounir-Bouaiche

Add missing code

1 import 'package:flutter/widgets.dart'; 1 import 'package:flutter/widgets.dart';
2 -import 'package:flutter/rendering.dart';  
3 2
4 import 'screen_util.dart'; 3 import 'screen_util.dart';
5 4
@@ -12,7 +11,11 @@ class ScreenUtilInit extends StatelessWidget { @@ -12,7 +11,11 @@ class ScreenUtilInit extends StatelessWidget {
12 this.splitScreenMode = false, 11 this.splitScreenMode = false,
13 this.minTextAdapt = false, 12 this.minTextAdapt = false,
14 Key? key, 13 Key? key,
15 - }) : super(key: key); 14 + }) : assert(
  15 + builder != null || child != null,
  16 + 'You must either pass builder or child or both',
  17 + ),
  18 + super(key: key);
16 19
17 final Widget Function(Widget? child)? builder; 20 final Widget Function(Widget? child)? builder;
18 final Widget? child; 21 final Widget? child;
@@ -23,28 +26,37 @@ class ScreenUtilInit extends StatelessWidget { @@ -23,28 +26,37 @@ class ScreenUtilInit extends StatelessWidget {
23 final Size designSize; 26 final Size designSize;
24 27
25 @override 28 @override
26 - Widget build(BuildContext _) { 29 + Widget build(BuildContext context) {
27 bool firstFrameAllowed = false; 30 bool firstFrameAllowed = false;
28 - RendererBinding.instance!.deferFirstFrame(); 31 + final binding = WidgetsFlutterBinding.ensureInitialized();
  32 + binding.deferFirstFrame();
  33 +
  34 + final rootMediaQueryData = (context
  35 + .getElementForInheritedWidgetOfExactType<MediaQuery>()
  36 + ?.widget as MediaQuery?)
  37 + ?.data;
29 38
30 return LayoutBuilder( 39 return LayoutBuilder(
31 - builder: (context, constraints) { 40 + builder: (_, constraints) {
32 if (constraints.biggest == Size.zero) return const SizedBox.shrink(); 41 if (constraints.biggest == Size.zero) return const SizedBox.shrink();
33 42
  43 + if (!firstFrameAllowed) {
  44 + binding.allowFirstFrame();
  45 + firstFrameAllowed = true;
  46 + }
  47 +
  48 + return MediaQuery(
  49 + data: rootMediaQueryData ?? MediaQueryData.fromWindow(binding.window),
  50 + child: Builder(builder: (_context) {
34 ScreenUtil.init( 51 ScreenUtil.init(
35 - null,  
36 - deviceSize: constraints.biggest, 52 + _context,
37 designSize: designSize, 53 designSize: designSize,
38 splitScreenMode: splitScreenMode, 54 splitScreenMode: splitScreenMode,
39 minTextAdapt: minTextAdapt, 55 minTextAdapt: minTextAdapt,
40 ); 56 );
41 -  
42 - if (!firstFrameAllowed) {  
43 - RendererBinding.instance!.allowFirstFrame();  
44 - firstFrameAllowed = true;  
45 - }  
46 -  
47 return builder?.call(child) ?? child!; 57 return builder?.call(child) ?? child!;
  58 + }),
  59 + );
48 }, 60 },
49 ); 61 );
50 } 62 }