李卓原

revert

... ... @@ -9,6 +9,7 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
// In first method you only need to wrap [MaterialApp] with [ScreenUtilInit] and that's it
return ScreenUtilInit(
useInheritedMediaQuery: true,
builder: (_, child) {
return MaterialApp(
debugShowCheckedModeBanner: false,
... ...
... ... @@ -39,6 +39,7 @@ class ScreenUtilInit extends StatefulWidget {
this.designSize = ScreenUtil.defaultSize,
this.splitScreenMode = false,
this.minTextAdapt = false,
this.useInheritedMediaQuery = false,
this.scaleByHeight = false})
: super(key: key);
... ... @@ -46,6 +47,7 @@ class ScreenUtilInit extends StatefulWidget {
final Widget? child;
final bool splitScreenMode;
final bool minTextAdapt;
final bool useInheritedMediaQuery;
final bool scaleByHeight;
final RebuildFactor rebuildFactor;
... ... @@ -60,19 +62,60 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
with WidgetsBindingObserver {
MediaQueryData? _mediaQueryData;
bool wrappedInMediaQuery = false;
WidgetsBinding get binding => WidgetsFlutterBinding.ensureInitialized();
MediaQueryData get mediaQueryData => _mediaQueryData!;
MediaQueryData get newData {
if (widget.useInheritedMediaQuery) {
final data = MediaQuery.maybeOf(context);
if (data != null) {
wrappedInMediaQuery = true;
return data;
}
}
return MediaQueryData.fromView(View.of(context));
}
Widget get child {
return widget.builder.call(context, widget.child);
}
_updateTree(Element el) {
el.markNeedsBuild();
el.visitChildren(_updateTree);
}
@override
void initState() {
super.initState();
// mediaQueryData = newData;
binding.addObserver(this);
}
@override
void didChangeMetrics() {
final old = _mediaQueryData!;
final data = newData;
if (widget.scaleByHeight || widget.rebuildFactor(old, data)) {
_mediaQueryData = data;
_updateTree(context as Element);
}
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
if (_mediaQueryData == null) _mediaQueryData = newData;
didChangeMetrics();
}
@override
void dispose() {
binding.removeObserver(this);
super.dispose();
... ... @@ -80,8 +123,12 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
@override
Widget build(BuildContext _context) {
if (_mediaQueryData?.size == Size.zero) return const SizedBox.shrink();
return Builder(
if (mediaQueryData.size == Size.zero) return const SizedBox.shrink();
if (!wrappedInMediaQuery) {
return MediaQuery(
// key: GlobalObjectKey('mediaQuery'),
data: mediaQueryData,
child: Builder(
builder: (__context) {
final deviceData = MediaQuery.maybeOf(__context);
final deviceSize = deviceData?.size ?? widget.designSize;
... ... @@ -106,6 +153,32 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
),
));
},
),
);
}
ScreenUtil.init(_context,
designSize: widget.designSize,
splitScreenMode: widget.splitScreenMode,
minTextAdapt: widget.minTextAdapt,
scaleByHeight: widget.scaleByHeight);
final deviceData = MediaQuery.maybeOf(_context);
final deviceSize = deviceData?.size ?? widget.designSize;
return Container(
width: deviceSize.width,
height: deviceSize.height,
child: FittedBox(
fit: BoxFit.none,
alignment: Alignment.center,
child: Container(
width: widget.scaleByHeight
? (deviceSize.height * widget.designSize.width) /
widget.designSize.height
: deviceSize.width,
height: deviceSize.height,
child: child,
),
));
}
}
... ...