add scale setting
This commit is contained in:
@@ -30,11 +30,13 @@ class MainApp extends HookConsumerWidget {
|
||||
final ThemeData? theme;
|
||||
final ThemeData? darkTheme;
|
||||
final ThemeMode? themeMode;
|
||||
final double uiScaleFactor;
|
||||
|
||||
const MainApp({
|
||||
required this.theme,
|
||||
required this.darkTheme,
|
||||
required this.themeMode,
|
||||
required this.uiScaleFactor,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@@ -51,6 +53,12 @@ class MainApp extends HookConsumerWidget {
|
||||
theme: theme,
|
||||
darkTheme: darkTheme,
|
||||
themeMode: themeMode,
|
||||
builder: (context, child) {
|
||||
return _AppUiScale(
|
||||
uiScaleFactor: uiScaleFactor,
|
||||
child: child ?? const SizedBox.shrink(),
|
||||
);
|
||||
},
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: Column(
|
||||
@@ -76,7 +84,12 @@ class MainApp extends HookConsumerWidget {
|
||||
themeMode: themeMode,
|
||||
routerConfig: router.value,
|
||||
builder: (context, child) {
|
||||
return _SyncEventListener(child: child ?? const SizedBox.shrink());
|
||||
return _AppUiScale(
|
||||
uiScaleFactor: uiScaleFactor,
|
||||
child: _SyncEventListener(
|
||||
child: child ?? const SizedBox.shrink(),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
@@ -86,6 +99,12 @@ class MainApp extends HookConsumerWidget {
|
||||
theme: theme,
|
||||
darkTheme: darkTheme,
|
||||
themeMode: themeMode,
|
||||
builder: (context, child) {
|
||||
return _AppUiScale(
|
||||
uiScaleFactor: uiScaleFactor,
|
||||
child: child ?? const SizedBox.shrink(),
|
||||
);
|
||||
},
|
||||
home: Scaffold(
|
||||
appBar: AppBar(title: const Text('Initiallization Error')),
|
||||
body: Center(
|
||||
@@ -106,6 +125,63 @@ class MainApp extends HookConsumerWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class _AppUiScale extends StatelessWidget {
|
||||
final double uiScaleFactor;
|
||||
final Widget child;
|
||||
|
||||
const _AppUiScale({required this.uiScaleFactor, required this.child});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (uiScaleFactor == 1.0) {
|
||||
return child;
|
||||
}
|
||||
|
||||
final mediaQuery = MediaQuery.of(context);
|
||||
|
||||
return MediaQuery(
|
||||
data: mediaQuery.copyWith(
|
||||
textScaler: _AppTextScaler(
|
||||
baseTextScaler: mediaQuery.textScaler,
|
||||
uiScaleFactor: uiScaleFactor,
|
||||
),
|
||||
),
|
||||
child: child,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _AppTextScaler extends TextScaler {
|
||||
final TextScaler baseTextScaler;
|
||||
final double uiScaleFactor;
|
||||
|
||||
const _AppTextScaler({
|
||||
required this.baseTextScaler,
|
||||
required this.uiScaleFactor,
|
||||
}) : assert(uiScaleFactor > 0);
|
||||
|
||||
@override
|
||||
double scale(double fontSize) =>
|
||||
baseTextScaler.scale(fontSize) * uiScaleFactor;
|
||||
|
||||
@override
|
||||
double get textScaleFactor => scale(1.0);
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
if (identical(this, other)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return other is _AppTextScaler &&
|
||||
baseTextScaler == other.baseTextScaler &&
|
||||
uiScaleFactor == other.uiScaleFactor;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(baseTextScaler, uiScaleFactor);
|
||||
}
|
||||
|
||||
class _SyncEventListener extends ConsumerWidget {
|
||||
final Widget child;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user