introduced setting to request disable animations
This commit is contained in:
@@ -31,12 +31,14 @@ class MainApp extends HookConsumerWidget {
|
||||
final ThemeData? darkTheme;
|
||||
final ThemeMode? themeMode;
|
||||
final double uiScaleFactor;
|
||||
final bool disableAnimations;
|
||||
|
||||
const MainApp({
|
||||
required this.theme,
|
||||
required this.darkTheme,
|
||||
required this.themeMode,
|
||||
required this.uiScaleFactor,
|
||||
required this.disableAnimations,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@@ -54,8 +56,9 @@ class MainApp extends HookConsumerWidget {
|
||||
darkTheme: darkTheme,
|
||||
themeMode: themeMode,
|
||||
builder: (context, child) {
|
||||
return _AppUiScale(
|
||||
return _AppMediaQueryOverrides(
|
||||
uiScaleFactor: uiScaleFactor,
|
||||
disableAnimations: disableAnimations,
|
||||
child: child ?? const SizedBox.shrink(),
|
||||
);
|
||||
},
|
||||
@@ -84,8 +87,9 @@ class MainApp extends HookConsumerWidget {
|
||||
themeMode: themeMode,
|
||||
routerConfig: router.value,
|
||||
builder: (context, child) {
|
||||
return _AppUiScale(
|
||||
return _AppMediaQueryOverrides(
|
||||
uiScaleFactor: uiScaleFactor,
|
||||
disableAnimations: disableAnimations,
|
||||
child: _SyncEventListener(
|
||||
child: child ?? const SizedBox.shrink(),
|
||||
),
|
||||
@@ -100,8 +104,9 @@ class MainApp extends HookConsumerWidget {
|
||||
darkTheme: darkTheme,
|
||||
themeMode: themeMode,
|
||||
builder: (context, child) {
|
||||
return _AppUiScale(
|
||||
return _AppMediaQueryOverrides(
|
||||
uiScaleFactor: uiScaleFactor,
|
||||
disableAnimations: disableAnimations,
|
||||
child: child ?? const SizedBox.shrink(),
|
||||
);
|
||||
},
|
||||
@@ -125,29 +130,54 @@ class MainApp extends HookConsumerWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class _AppUiScale extends StatelessWidget {
|
||||
MediaQueryData applyAppMediaQueryOverrides({
|
||||
required MediaQueryData mediaQuery,
|
||||
required double uiScaleFactor,
|
||||
required bool disableAnimations,
|
||||
}) {
|
||||
final textScaler = uiScaleFactor == 1.0
|
||||
? mediaQuery.textScaler
|
||||
: _AppTextScaler(
|
||||
baseTextScaler: mediaQuery.textScaler,
|
||||
uiScaleFactor: uiScaleFactor,
|
||||
);
|
||||
|
||||
if (disableAnimations) {
|
||||
return mediaQuery.copyWith(textScaler: textScaler, disableAnimations: true);
|
||||
}
|
||||
|
||||
if (uiScaleFactor == 1.0) {
|
||||
return mediaQuery;
|
||||
}
|
||||
|
||||
return mediaQuery.copyWith(textScaler: textScaler);
|
||||
}
|
||||
|
||||
class _AppMediaQueryOverrides extends StatelessWidget {
|
||||
final double uiScaleFactor;
|
||||
final bool disableAnimations;
|
||||
final Widget child;
|
||||
|
||||
const _AppUiScale({required this.uiScaleFactor, required this.child});
|
||||
const _AppMediaQueryOverrides({
|
||||
required this.uiScaleFactor,
|
||||
required this.disableAnimations,
|
||||
required this.child,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (uiScaleFactor == 1.0) {
|
||||
if (uiScaleFactor == 1.0 && !disableAnimations) {
|
||||
return child;
|
||||
}
|
||||
|
||||
final mediaQuery = MediaQuery.of(context);
|
||||
|
||||
return MediaQuery(
|
||||
data: mediaQuery.copyWith(
|
||||
textScaler: _AppTextScaler(
|
||||
baseTextScaler: mediaQuery.textScaler,
|
||||
uiScaleFactor: uiScaleFactor,
|
||||
),
|
||||
),
|
||||
child: child,
|
||||
final overriddenMediaQuery = applyAppMediaQueryOverrides(
|
||||
mediaQuery: mediaQuery,
|
||||
uiScaleFactor: uiScaleFactor,
|
||||
disableAnimations: disableAnimations,
|
||||
);
|
||||
|
||||
return MediaQuery(data: overriddenMediaQuery, child: child);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user