Toggle navigation
Toggle navigation
This project
Loading...
Sign in
flutter_package
/
flutter_screenutil
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
李卓原
2023-05-15 18:59:49 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
646c9fabbb73b6ebae8b3686075b77aede0f42c2
646c9fab
1 parent
d9a760d2
revert
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
76 additions
and
2 deletions
example/lib/src/first_method.dart
lib/src/screenutil_init.dart
example/lib/src/first_method.dart
View file @
646c9fa
...
...
@@ -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
,
...
...
lib/src/screenutil_init.dart
View file @
646c9fa
...
...
@@ -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
,
),
));
}
}
...
...
Please
register
or
login
to post a comment