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
34 - ScreenUtil.init(  
35 - null,  
36 - deviceSize: constraints.biggest,  
37 - designSize: designSize,  
38 - splitScreenMode: splitScreenMode,  
39 - minTextAdapt: minTextAdapt,  
40 - );  
41 -  
42 if (!firstFrameAllowed) { 43 if (!firstFrameAllowed) {
43 - RendererBinding.instance!.allowFirstFrame(); 44 + binding.allowFirstFrame();
44 firstFrameAllowed = true; 45 firstFrameAllowed = true;
45 } 46 }
46 47
47 - return builder?.call(child) ?? child!; 48 + return MediaQuery(
  49 + data: rootMediaQueryData ?? MediaQueryData.fromWindow(binding.window),
  50 + child: Builder(builder: (_context) {
  51 + ScreenUtil.init(
  52 + _context,
  53 + designSize: designSize,
  54 + splitScreenMode: splitScreenMode,
  55 + minTextAdapt: minTextAdapt,
  56 + );
  57 + return builder?.call(child) ?? child!;
  58 + }),
  59 + );
48 }, 60 },
49 ); 61 );
50 } 62 }