introduced setting to request disable animations

This commit is contained in:
Fabian Freund
2026-03-09 16:17:46 +01:00
parent 0fa526b1cb
commit 9700b3868a
8 changed files with 164 additions and 16 deletions
+45 -15
View File
@@ -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);
}
}