Add font scaling

This commit is contained in:
Hillel Coren 2021-12-05 09:15:11 +02:00
parent e883d03737
commit 8f3a25a9c1
3 changed files with 353 additions and 297 deletions

View File

@ -250,6 +250,12 @@ class InvoiceNinjaAppState extends State<InvoiceNinjaApp> {
state.prefState.enableDarkMode ? Colors.white : Colors.black87, state.prefState.enableDarkMode ? Colors.white : Colors.black87,
); );
// https://stackoverflow.com/a/69883043/497368
MediaQueryData windowData =
MediaQueryData.fromWindow(WidgetsBinding.instance.window);
windowData = windowData.copyWith(
textScaleFactor: state.prefState.textScaleFactor);
return StyledToast( return StyledToast(
locale: locale, locale: locale,
duration: Duration(seconds: 3), duration: Duration(seconds: 3),
@ -262,290 +268,310 @@ class InvoiceNinjaAppState extends State<InvoiceNinjaApp> {
), ),
child: WebSocketRefresh( child: WebSocketRefresh(
companyId: state.company?.id, companyId: state.company?.id,
child: MaterialApp( child: MediaQuery(
scrollBehavior: MyCustomScrollBehavior(), data: windowData,
navigatorKey: navigatorKey, child: MaterialApp(
supportedLocales: kLanguages useInheritedMediaQuery: true,
.map( scrollBehavior: MyCustomScrollBehavior(),
(String locale) => AppLocalization.createLocale(locale)) navigatorKey: navigatorKey,
.toList(), supportedLocales: kLanguages
debugShowCheckedModeBanner: false, .map((String locale) =>
//showPerformanceOverlay: true, AppLocalization.createLocale(locale))
navigatorObservers: [ .toList(),
SentryNavigatorObserver(), debugShowCheckedModeBanner: false,
], //showPerformanceOverlay: true,
localizationsDelegates: [ navigatorObservers: [
const AppLocalizationsDelegate(), SentryNavigatorObserver(),
GlobalCupertinoLocalizations.delegate, ],
GlobalWidgetsLocalizations.delegate, localizationsDelegates: [
GlobalMaterialLocalizations.delegate const AppLocalizationsDelegate(),
], GlobalCupertinoLocalizations.delegate,
home: state.prefState.requireAuthentication && !_authenticated GlobalWidgetsLocalizations.delegate,
? LockScreen(onAuthenticatePressed: _authenticate) GlobalMaterialLocalizations.delegate
: InitScreen(), ],
locale: locale, home: state.prefState.requireAuthentication && !_authenticated
theme: state.prefState.enableDarkMode ? LockScreen(onAuthenticatePressed: _authenticate)
? ThemeData( : InitScreen(),
colorScheme: ColorScheme.dark().copyWith( locale: locale,
secondary: accentColor, theme: state.prefState.enableDarkMode
primary: accentColor, ? ThemeData(
), colorScheme: ColorScheme.dark().copyWith(
pageTransitionsTheme: pageTransitionsTheme, secondary: accentColor,
indicatorColor: accentColor, primary: accentColor,
textSelectionTheme: TextSelectionThemeData(
selectionHandleColor: accentColor,
),
fontFamily: fontFamily,
backgroundColor: Colors.black,
canvasColor: Colors.black,
cardColor: const Color(0xFF1B1C1E),
bottomAppBarColor: const Color(0xFF1B1C1E),
primaryColorDark: Colors.black,
textButtonTheme:
TextButtonThemeData(style: textButtonTheme),
outlinedButtonTheme:
OutlinedButtonThemeData(style: outlinedButtonTheme),
)
: ThemeData(
colorScheme: ColorScheme.fromSwatch()
.copyWith(secondary: accentColor),
pageTransitionsTheme: pageTransitionsTheme,
primaryColor: accentColor,
indicatorColor: accentColor,
textSelectionTheme: TextSelectionThemeData(
selectionColor: accentColor,
),
fontFamily: fontFamily,
backgroundColor: Colors.white,
canvasColor: Colors.white,
cardColor: Colors.white,
bottomAppBarColor: Colors.white,
primaryColorDark: hasAccentColor
? accentColor
: const Color(0xFF0D5D91),
primaryColorLight: hasAccentColor
? accentColor
: const Color(0xFF5dabf4),
scaffoldBackgroundColor: const Color(0xFFE4E8EB),
tabBarTheme: TabBarTheme(
labelColor:
hasAccentColor ? Colors.white : Colors.black,
unselectedLabelColor: hasAccentColor
? Colors.white.withOpacity(.65)
: Colors.black.withOpacity(.65),
),
iconTheme: IconThemeData(
color: hasAccentColor ? null : accentColor,
),
appBarTheme: AppBarTheme(
color: hasAccentColor ? accentColor : Colors.white,
iconTheme: IconThemeData(
color: hasAccentColor ? Colors.white : accentColor,
), ),
titleTextStyle: TextStyle( pageTransitionsTheme: pageTransitionsTheme,
fontSize: 20, indicatorColor: accentColor,
textSelectionTheme: TextSelectionThemeData(
selectionHandleColor: accentColor,
),
fontFamily: fontFamily,
backgroundColor: Colors.black,
canvasColor: Colors.black,
cardColor: const Color(0xFF1B1C1E),
bottomAppBarColor: const Color(0xFF1B1C1E),
primaryColorDark: Colors.black,
textButtonTheme:
TextButtonThemeData(style: textButtonTheme),
outlinedButtonTheme: OutlinedButtonThemeData(
style: outlinedButtonTheme),
)
: ThemeData(
colorScheme: ColorScheme.fromSwatch()
.copyWith(secondary: accentColor),
pageTransitionsTheme: pageTransitionsTheme,
primaryColor: accentColor,
indicatorColor: accentColor,
textSelectionTheme: TextSelectionThemeData(
selectionColor: accentColor,
),
fontFamily: fontFamily,
backgroundColor: Colors.white,
canvasColor: Colors.white,
cardColor: Colors.white,
bottomAppBarColor: Colors.white,
primaryColorDark: hasAccentColor
? accentColor
: const Color(0xFF0D5D91),
primaryColorLight: hasAccentColor
? accentColor
: const Color(0xFF5dabf4),
scaffoldBackgroundColor: const Color(0xFFE4E8EB),
tabBarTheme: TabBarTheme(
labelColor:
hasAccentColor ? Colors.white : Colors.black,
unselectedLabelColor: hasAccentColor
? Colors.white.withOpacity(.65)
: Colors.black.withOpacity(.65),
),
iconTheme: IconThemeData(
color: hasAccentColor ? null : accentColor,
),
appBarTheme: AppBarTheme(
color: hasAccentColor ? accentColor : Colors.white,
iconTheme: IconThemeData(
color: color:
hasAccentColor ? Colors.white : Colors.black), hasAccentColor ? Colors.white : accentColor,
),
textButtonTheme:
TextButtonThemeData(style: textButtonTheme),
outlinedButtonTheme:
OutlinedButtonThemeData(style: outlinedButtonTheme),
),
title: kAppName,
onGenerateRoute: isMobile(context) ? null : generateRoute,
routes: isMobile(context)
? {
LoginScreen.route: (context) => LoginScreen(),
MainScreen.route: (context) => MainScreen(),
DashboardScreenBuilder.route: (context) =>
ChangeLayoutBanner(
suggestedLayout: AppLayout.mobile,
appLayout: state.prefState.appLayout,
child: DashboardScreenBuilder(),
), ),
ProductScreen.route: (context) => titleTextStyle: TextStyle(
ProductScreenBuilder(), fontSize: 20,
ProductViewScreen.route: (context) => color: hasAccentColor
ProductViewScreen(), ? Colors.white
ProductEditScreen.route: (context) => : Colors.black),
ProductEditScreen(), ),
ClientScreen.route: (context) => ClientScreenBuilder(), textButtonTheme:
ClientViewScreen.route: (context) => ClientViewScreen(), TextButtonThemeData(style: textButtonTheme),
ClientEditScreen.route: (context) => ClientEditScreen(), outlinedButtonTheme: OutlinedButtonThemeData(
ClientPdfScreen.route: (context) => ClientPdfScreen(), style: outlinedButtonTheme),
InvoiceScreen.route: (context) => ),
InvoiceScreenBuilder(), title: kAppName,
InvoiceViewScreen.route: (context) => onGenerateRoute: isMobile(context) ? null : generateRoute,
InvoiceViewScreen(), routes: isMobile(context)
InvoiceEditScreen.route: (context) => ? {
InvoiceEditScreen(), LoginScreen.route: (context) => LoginScreen(),
InvoiceEmailScreen.route: (context) => MainScreen.route: (context) => MainScreen(),
InvoiceEmailScreen(), DashboardScreenBuilder.route: (context) =>
InvoicePdfScreen.route: (context) => InvoicePdfScreen(), ChangeLayoutBanner(
DocumentScreen.route: (context) => suggestedLayout: AppLayout.mobile,
DocumentScreenBuilder(), appLayout: state.prefState.appLayout,
DocumentViewScreen.route: (context) => child: DashboardScreenBuilder(),
DocumentViewScreen(), ),
DocumentEditScreen.route: (context) => ProductScreen.route: (context) =>
DocumentEditScreen(), ProductScreenBuilder(),
ExpenseScreen.route: (context) => ProductViewScreen.route: (context) =>
ExpenseScreenBuilder(), ProductViewScreen(),
ExpenseViewScreen.route: (context) => ProductEditScreen.route: (context) =>
ExpenseViewScreen(), ProductEditScreen(),
ExpenseEditScreen.route: (context) => ClientScreen.route: (context) =>
ExpenseEditScreen(), ClientScreenBuilder(),
VendorScreen.route: (context) => VendorScreenBuilder(), ClientViewScreen.route: (context) =>
VendorViewScreen.route: (context) => VendorViewScreen(), ClientViewScreen(),
VendorEditScreen.route: (context) => VendorEditScreen(), ClientEditScreen.route: (context) =>
TaskScreen.route: (context) => TaskScreenBuilder(), ClientEditScreen(),
TaskViewScreen.route: (context) => TaskViewScreen(), ClientPdfScreen.route: (context) => ClientPdfScreen(),
TaskEditScreen.route: (context) => TaskEditScreen(), InvoiceScreen.route: (context) =>
ProjectScreen.route: (context) => InvoiceScreenBuilder(),
ProjectScreenBuilder(), InvoiceViewScreen.route: (context) =>
ProjectViewScreen.route: (context) => InvoiceViewScreen(),
ProjectViewScreen(), InvoiceEditScreen.route: (context) =>
ProjectEditScreen.route: (context) => InvoiceEditScreen(),
ProjectEditScreen(), InvoiceEmailScreen.route: (context) =>
PaymentScreen.route: (context) => InvoiceEmailScreen(),
PaymentScreenBuilder(), InvoicePdfScreen.route: (context) =>
PaymentViewScreen.route: (context) => InvoicePdfScreen(),
PaymentViewScreen(), DocumentScreen.route: (context) =>
PaymentEditScreen.route: (context) => DocumentScreenBuilder(),
PaymentEditScreen(), DocumentViewScreen.route: (context) =>
PaymentRefundScreen.route: (context) => DocumentViewScreen(),
PaymentRefundScreen(), DocumentEditScreen.route: (context) =>
QuoteScreen.route: (context) => QuoteScreenBuilder(), DocumentEditScreen(),
QuoteViewScreen.route: (context) => QuoteViewScreen(), ExpenseScreen.route: (context) =>
QuoteEditScreen.route: (context) => QuoteEditScreen(), ExpenseScreenBuilder(),
QuoteEmailScreen.route: (context) => QuoteEmailScreen(), ExpenseViewScreen.route: (context) =>
QuotePdfScreen.route: (context) => QuotePdfScreen(), ExpenseViewScreen(),
// STARTER: routes - do not remove comment ExpenseEditScreen.route: (context) =>
RecurringExpenseScreen.route: (context) => ExpenseEditScreen(),
RecurringExpenseScreenBuilder(), VendorScreen.route: (context) =>
RecurringExpenseViewScreen.route: (context) => VendorScreenBuilder(),
RecurringExpenseViewScreen(), VendorViewScreen.route: (context) =>
RecurringExpenseEditScreen.route: (context) => VendorViewScreen(),
RecurringExpenseEditScreen(), VendorEditScreen.route: (context) =>
VendorEditScreen(),
TaskScreen.route: (context) => TaskScreenBuilder(),
TaskViewScreen.route: (context) => TaskViewScreen(),
TaskEditScreen.route: (context) => TaskEditScreen(),
ProjectScreen.route: (context) =>
ProjectScreenBuilder(),
ProjectViewScreen.route: (context) =>
ProjectViewScreen(),
ProjectEditScreen.route: (context) =>
ProjectEditScreen(),
PaymentScreen.route: (context) =>
PaymentScreenBuilder(),
PaymentViewScreen.route: (context) =>
PaymentViewScreen(),
PaymentEditScreen.route: (context) =>
PaymentEditScreen(),
PaymentRefundScreen.route: (context) =>
PaymentRefundScreen(),
QuoteScreen.route: (context) => QuoteScreenBuilder(),
QuoteViewScreen.route: (context) => QuoteViewScreen(),
QuoteEditScreen.route: (context) => QuoteEditScreen(),
QuoteEmailScreen.route: (context) =>
QuoteEmailScreen(),
QuotePdfScreen.route: (context) => QuotePdfScreen(),
// STARTER: routes - do not remove comment
RecurringExpenseScreen.route: (context) =>
RecurringExpenseScreenBuilder(),
RecurringExpenseViewScreen.route: (context) =>
RecurringExpenseViewScreen(),
RecurringExpenseEditScreen.route: (context) =>
RecurringExpenseEditScreen(),
SubscriptionScreen.route: (context) => SubscriptionScreen.route: (context) =>
SubscriptionScreenBuilder(), SubscriptionScreenBuilder(),
SubscriptionViewScreen.route: (context) => SubscriptionViewScreen.route: (context) =>
SubscriptionViewScreen(), SubscriptionViewScreen(),
SubscriptionEditScreen.route: (context) => SubscriptionEditScreen.route: (context) =>
SubscriptionEditScreen(), SubscriptionEditScreen(),
TaskStatusScreen.route: (context) => TaskStatusScreen.route: (context) =>
TaskStatusScreenBuilder(), TaskStatusScreenBuilder(),
TaskStatusViewScreen.route: (context) => TaskStatusViewScreen.route: (context) =>
TaskStatusViewScreen(), TaskStatusViewScreen(),
TaskStatusEditScreen.route: (context) => TaskStatusEditScreen.route: (context) =>
TaskStatusEditScreen(), TaskStatusEditScreen(),
ExpenseCategoryScreen.route: (context) => ExpenseCategoryScreen.route: (context) =>
ExpenseCategoryScreenBuilder(), ExpenseCategoryScreenBuilder(),
ExpenseCategoryViewScreen.route: (context) => ExpenseCategoryViewScreen.route: (context) =>
ExpenseCategoryViewScreen(), ExpenseCategoryViewScreen(),
ExpenseCategoryEditScreen.route: (context) => ExpenseCategoryEditScreen.route: (context) =>
ExpenseCategoryEditScreen(), ExpenseCategoryEditScreen(),
RecurringInvoiceScreen.route: (context) => RecurringInvoiceScreen.route: (context) =>
RecurringInvoiceScreenBuilder(), RecurringInvoiceScreenBuilder(),
RecurringInvoiceViewScreen.route: (context) => RecurringInvoiceViewScreen.route: (context) =>
RecurringInvoiceViewScreen(), RecurringInvoiceViewScreen(),
RecurringInvoiceEditScreen.route: (context) => RecurringInvoiceEditScreen.route: (context) =>
RecurringInvoiceEditScreen(), RecurringInvoiceEditScreen(),
RecurringInvoicePdfScreen.route: (context) => RecurringInvoicePdfScreen.route: (context) =>
RecurringInvoicePdfScreen(), RecurringInvoicePdfScreen(),
WebhookScreen.route: (context) => WebhookScreen.route: (context) =>
WebhookScreenBuilder(), WebhookScreenBuilder(),
WebhookViewScreen.route: (context) => WebhookViewScreen.route: (context) =>
WebhookViewScreen(), WebhookViewScreen(),
WebhookEditScreen.route: (context) => WebhookEditScreen.route: (context) =>
WebhookEditScreen(), WebhookEditScreen(),
TokenScreen.route: (context) => TokenScreenBuilder(), TokenScreen.route: (context) => TokenScreenBuilder(),
TokenViewScreen.route: (context) => TokenViewScreen(), TokenViewScreen.route: (context) => TokenViewScreen(),
TokenEditScreen.route: (context) => TokenEditScreen(), TokenEditScreen.route: (context) => TokenEditScreen(),
PaymentTermScreen.route: (context) => PaymentTermScreen.route: (context) =>
PaymentTermScreenBuilder(), PaymentTermScreenBuilder(),
PaymentTermEditScreen.route: (context) => PaymentTermEditScreen.route: (context) =>
PaymentTermEditScreen(), PaymentTermEditScreen(),
PaymentTermViewScreen.route: (context) => PaymentTermViewScreen.route: (context) =>
PaymentTermViewScreen(), PaymentTermViewScreen(),
DesignScreen.route: (context) => DesignScreenBuilder(), DesignScreen.route: (context) =>
DesignViewScreen.route: (context) => DesignViewScreen(), DesignScreenBuilder(),
DesignEditScreen.route: (context) => DesignEditScreen(), DesignViewScreen.route: (context) =>
CreditScreen.route: (context) => CreditScreenBuilder(), DesignViewScreen(),
CreditViewScreen.route: (context) => CreditViewScreen(), DesignEditScreen.route: (context) =>
CreditEditScreen.route: (context) => CreditEditScreen(), DesignEditScreen(),
CreditEmailScreen.route: (context) => CreditScreen.route: (context) =>
CreditEmailScreen(), CreditScreenBuilder(),
CreditPdfScreen.route: (context) => CreditPdfScreen(), CreditViewScreen.route: (context) =>
UserScreen.route: (context) => UserScreenBuilder(), CreditViewScreen(),
UserViewScreen.route: (context) => UserViewScreen(), CreditEditScreen.route: (context) =>
UserEditScreen.route: (context) => UserEditScreen(), CreditEditScreen(),
GroupSettingsScreen.route: (context) => CreditEmailScreen.route: (context) =>
GroupScreenBuilder(), CreditEmailScreen(),
GroupViewScreen.route: (context) => GroupViewScreen(), CreditPdfScreen.route: (context) => CreditPdfScreen(),
GroupEditScreen.route: (context) => GroupEditScreen(), UserScreen.route: (context) => UserScreenBuilder(),
SettingsScreen.route: (context) => UserViewScreen.route: (context) => UserViewScreen(),
SettingsScreenBuilder(), UserEditScreen.route: (context) => UserEditScreen(),
ReportsScreen.route: (context) => GroupSettingsScreen.route: (context) =>
ReportsScreenBuilder(), GroupScreenBuilder(),
CompanyDetailsScreen.route: (context) => GroupViewScreen.route: (context) => GroupViewScreen(),
CompanyDetailsScreen(), GroupEditScreen.route: (context) => GroupEditScreen(),
UserDetailsScreen.route: (context) => SettingsScreen.route: (context) =>
UserDetailsScreen(), SettingsScreenBuilder(),
LocalizationScreen.route: (context) => ReportsScreen.route: (context) =>
LocalizationScreen(), ReportsScreenBuilder(),
OnlinePaymentsScreen.route: (context) => CompanyDetailsScreen.route: (context) =>
OnlinePaymentsScreen(), CompanyDetailsScreen(),
CompanyGatewayScreen.route: (context) => UserDetailsScreen.route: (context) =>
CompanyGatewayScreenBuilder(), UserDetailsScreen(),
CompanyGatewayViewScreen.route: (context) => LocalizationScreen.route: (context) =>
CompanyGatewayViewScreen(), LocalizationScreen(),
CompanyGatewayEditScreen.route: (context) => OnlinePaymentsScreen.route: (context) =>
CompanyGatewayEditScreen(), OnlinePaymentsScreen(),
TaxSettingsScreen.route: (context) => CompanyGatewayScreen.route: (context) =>
TaxSettingsScreen(), CompanyGatewayScreenBuilder(),
TaxRateSettingsScreen.route: (context) => CompanyGatewayViewScreen.route: (context) =>
TaxRateScreenBuilder(), CompanyGatewayViewScreen(),
TaxRateViewScreen.route: (context) => CompanyGatewayEditScreen.route: (context) =>
TaxRateViewScreen(), CompanyGatewayEditScreen(),
TaxRateEditScreen.route: (context) => TaxSettingsScreen.route: (context) =>
TaxRateEditScreen(), TaxSettingsScreen(),
ProductSettingsScreen.route: (context) => TaxRateSettingsScreen.route: (context) =>
ProductSettingsScreen(), TaxRateScreenBuilder(),
ExpenseSettingsScreen.route: (context) => TaxRateViewScreen.route: (context) =>
ExpenseSettingsScreen(), TaxRateViewScreen(),
TaskSettingsScreen.route: (context) => TaxRateEditScreen.route: (context) =>
TaskSettingsScreen(), TaxRateEditScreen(),
ImportExportScreen.route: (context) => ProductSettingsScreen.route: (context) =>
ImportExportScreen(), ProductSettingsScreen(),
DeviceSettingsScreen.route: (context) => ExpenseSettingsScreen.route: (context) =>
DeviceSettingsScreen(), ExpenseSettingsScreen(),
AccountManagementScreen.route: (context) => TaskSettingsScreen.route: (context) =>
AccountManagementScreen(), TaskSettingsScreen(),
CustomFieldsScreen.route: (context) => ImportExportScreen.route: (context) =>
CustomFieldsScreen(), ImportExportScreen(),
GeneratedNumbersScreen.route: (context) => DeviceSettingsScreen.route: (context) =>
GeneratedNumbersScreen(), DeviceSettingsScreen(),
WorkflowSettingsScreen.route: (context) => AccountManagementScreen.route: (context) =>
WorkflowSettingsScreen(), AccountManagementScreen(),
InvoiceDesignScreen.route: (context) => CustomFieldsScreen.route: (context) =>
InvoiceDesignScreen(), CustomFieldsScreen(),
ClientPortalScreen.route: (context) => GeneratedNumbersScreen.route: (context) =>
ClientPortalScreen(), GeneratedNumbersScreen(),
BuyNowButtonsScreen.route: (context) => WorkflowSettingsScreen.route: (context) =>
BuyNowButtonsScreen(), WorkflowSettingsScreen(),
EmailSettingsScreen.route: (context) => InvoiceDesignScreen.route: (context) =>
EmailSettingsScreen(), InvoiceDesignScreen(),
TemplatesAndRemindersScreen.route: (context) => ClientPortalScreen.route: (context) =>
TemplatesAndRemindersScreen(), ClientPortalScreen(),
CreditCardsAndBanksScreen.route: (context) => BuyNowButtonsScreen.route: (context) =>
CreditCardsAndBanksScreen(), BuyNowButtonsScreen(),
DataVisualizationsScreen.route: (context) => EmailSettingsScreen.route: (context) =>
DataVisualizationsScreen(), EmailSettingsScreen(),
} TemplatesAndRemindersScreen.route: (context) =>
: {}, TemplatesAndRemindersScreen(),
CreditCardsAndBanksScreen.route: (context) =>
CreditCardsAndBanksScreen(),
DataVisualizationsScreen.route: (context) =>
DataVisualizationsScreen(),
}
: {},
),
), ),
), ),
); );

View File

@ -29,6 +29,7 @@ abstract class PrefState implements Built<PrefState, PrefStateBuilder> {
requireAuthentication: false, requireAuthentication: false,
colorTheme: kColorThemeLight, colorTheme: kColorThemeLight,
isFilterVisible: false, isFilterVisible: false,
textScaleFactor: 1,
longPressSelectionIsDefault: true, longPressSelectionIsDefault: true,
tapSelectedToEdit: false, tapSelectedToEdit: false,
hideDesktopWarning: false, hideDesktopWarning: false,
@ -44,6 +45,11 @@ abstract class PrefState implements Built<PrefState, PrefStateBuilder> {
PrefState._(); PrefState._();
static const TEXT_SCALING_NORMAL = 1.0;
static const TEXT_SCALING_LARGE = 1.2;
static const TEXT_SCALING_LARGER = 1.4;
static const TEXT_SCALING_LARGEST = 1.6;
static const THEME_SIDEBAR_ACTIVE_BACKGROUND_COLOR = static const THEME_SIDEBAR_ACTIVE_BACKGROUND_COLOR =
'sidebar_active_background_color'; 'sidebar_active_background_color';
static const THEME_SIDEBAR_ACTIVE_FONT_COLOR = 'sidebar_active_font_color'; static const THEME_SIDEBAR_ACTIVE_FONT_COLOR = 'sidebar_active_font_color';
@ -123,6 +129,8 @@ abstract class PrefState implements Built<PrefState, PrefStateBuilder> {
bool get hideDesktopWarning; bool get hideDesktopWarning;
double get textScaleFactor;
BuiltMap<EntityType, PrefStateSortField> get sortFields; BuiltMap<EntityType, PrefStateSortField> get sortFields;
ColorTheme get colorThemeModel => colorThemesMap.containsKey(colorTheme) ColorTheme get colorThemeModel => colorThemesMap.containsKey(colorTheme)
@ -190,6 +198,7 @@ abstract class PrefState implements Built<PrefState, PrefStateBuilder> {
..persistData = false ..persistData = false
..persistUI = true ..persistUI = true
..showPdfPreview = true ..showPdfPreview = true
..textScaleFactor = 1
..colorTheme = ..colorTheme =
builder.enableDarkMode == true ? kColorThemeLight : kColorThemeLight; builder.enableDarkMode == true ? kColorThemeLight : kColorThemeLight;

View File

@ -178,6 +178,9 @@ class _$PrefStateSerializer implements StructuredSerializer<PrefState> {
'hideDesktopWarning', 'hideDesktopWarning',
serializers.serialize(object.hideDesktopWarning, serializers.serialize(object.hideDesktopWarning,
specifiedType: const FullType(bool)), specifiedType: const FullType(bool)),
'textScaleFactor',
serializers.serialize(object.textScaleFactor,
specifiedType: const FullType(double)),
'sortFields', 'sortFields',
serializers.serialize(object.sortFields, serializers.serialize(object.sortFields,
specifiedType: const FullType(BuiltMap, const [ specifiedType: const FullType(BuiltMap, const [
@ -292,6 +295,10 @@ class _$PrefStateSerializer implements StructuredSerializer<PrefState> {
result.hideDesktopWarning = serializers.deserialize(value, result.hideDesktopWarning = serializers.deserialize(value,
specifiedType: const FullType(bool)) as bool; specifiedType: const FullType(bool)) as bool;
break; break;
case 'textScaleFactor':
result.textScaleFactor = serializers.deserialize(value,
specifiedType: const FullType(double)) as double;
break;
case 'sortFields': case 'sortFields':
result.sortFields.replace(serializers.deserialize(value, result.sortFields.replace(serializers.deserialize(value,
specifiedType: const FullType(BuiltMap, const [ specifiedType: const FullType(BuiltMap, const [
@ -579,6 +586,8 @@ class _$PrefState extends PrefState {
@override @override
final bool hideDesktopWarning; final bool hideDesktopWarning;
@override @override
final double textScaleFactor;
@override
final BuiltMap<EntityType, PrefStateSortField> sortFields; final BuiltMap<EntityType, PrefStateSortField> sortFields;
@override @override
final BuiltMap<String, CompanyPrefState> companyPrefs; final BuiltMap<String, CompanyPrefState> companyPrefs;
@ -608,6 +617,7 @@ class _$PrefState extends PrefState {
this.rowsPerPage, this.rowsPerPage,
this.colorTheme, this.colorTheme,
this.hideDesktopWarning, this.hideDesktopWarning,
this.textScaleFactor,
this.sortFields, this.sortFields,
this.companyPrefs}) this.companyPrefs})
: super._() { : super._() {
@ -651,6 +661,8 @@ class _$PrefState extends PrefState {
colorTheme, 'PrefState', 'colorTheme'); colorTheme, 'PrefState', 'colorTheme');
BuiltValueNullFieldError.checkNotNull( BuiltValueNullFieldError.checkNotNull(
hideDesktopWarning, 'PrefState', 'hideDesktopWarning'); hideDesktopWarning, 'PrefState', 'hideDesktopWarning');
BuiltValueNullFieldError.checkNotNull(
textScaleFactor, 'PrefState', 'textScaleFactor');
BuiltValueNullFieldError.checkNotNull( BuiltValueNullFieldError.checkNotNull(
sortFields, 'PrefState', 'sortFields'); sortFields, 'PrefState', 'sortFields');
BuiltValueNullFieldError.checkNotNull( BuiltValueNullFieldError.checkNotNull(
@ -689,6 +701,7 @@ class _$PrefState extends PrefState {
rowsPerPage == other.rowsPerPage && rowsPerPage == other.rowsPerPage &&
colorTheme == other.colorTheme && colorTheme == other.colorTheme &&
hideDesktopWarning == other.hideDesktopWarning && hideDesktopWarning == other.hideDesktopWarning &&
textScaleFactor == other.textScaleFactor &&
sortFields == other.sortFields && sortFields == other.sortFields &&
companyPrefs == other.companyPrefs; companyPrefs == other.companyPrefs;
} }
@ -714,24 +727,24 @@ class _$PrefState extends PrefState {
$jc( $jc(
$jc( $jc(
$jc( $jc(
$jc($jc($jc($jc($jc(0, appLayout.hashCode), moduleLayout.hashCode), menuSidebarMode.hashCode), historySidebarMode.hashCode), $jc($jc($jc($jc($jc($jc(0, appLayout.hashCode), moduleLayout.hashCode), menuSidebarMode.hashCode), historySidebarMode.hashCode), useSidebarEditor.hashCode),
useSidebarEditor.hashCode), customColors.hashCode),
customColors.hashCode), isPreviewVisible.hashCode),
isPreviewVisible.hashCode), isMenuVisible.hashCode),
isMenuVisible.hashCode), showKanban.hashCode),
showKanban.hashCode), showPdfPreview.hashCode),
showPdfPreview.hashCode), isHistoryVisible.hashCode),
isHistoryVisible.hashCode), enableDarkMode.hashCode),
enableDarkMode.hashCode), isFilterVisible.hashCode),
isFilterVisible.hashCode), persistData.hashCode),
persistData.hashCode), persistUI.hashCode),
persistUI.hashCode), longPressSelectionIsDefault.hashCode),
longPressSelectionIsDefault.hashCode), requireAuthentication.hashCode),
requireAuthentication.hashCode), tapSelectedToEdit.hashCode),
tapSelectedToEdit.hashCode), rowsPerPage.hashCode),
rowsPerPage.hashCode), colorTheme.hashCode),
colorTheme.hashCode), hideDesktopWarning.hashCode),
hideDesktopWarning.hashCode), textScaleFactor.hashCode),
sortFields.hashCode), sortFields.hashCode),
companyPrefs.hashCode)); companyPrefs.hashCode));
} }
@ -760,6 +773,7 @@ class _$PrefState extends PrefState {
..add('rowsPerPage', rowsPerPage) ..add('rowsPerPage', rowsPerPage)
..add('colorTheme', colorTheme) ..add('colorTheme', colorTheme)
..add('hideDesktopWarning', hideDesktopWarning) ..add('hideDesktopWarning', hideDesktopWarning)
..add('textScaleFactor', textScaleFactor)
..add('sortFields', sortFields) ..add('sortFields', sortFields)
..add('companyPrefs', companyPrefs)) ..add('companyPrefs', companyPrefs))
.toString(); .toString();
@ -870,6 +884,11 @@ class PrefStateBuilder implements Builder<PrefState, PrefStateBuilder> {
set hideDesktopWarning(bool hideDesktopWarning) => set hideDesktopWarning(bool hideDesktopWarning) =>
_$this._hideDesktopWarning = hideDesktopWarning; _$this._hideDesktopWarning = hideDesktopWarning;
double _textScaleFactor;
double get textScaleFactor => _$this._textScaleFactor;
set textScaleFactor(double textScaleFactor) =>
_$this._textScaleFactor = textScaleFactor;
MapBuilder<EntityType, PrefStateSortField> _sortFields; MapBuilder<EntityType, PrefStateSortField> _sortFields;
MapBuilder<EntityType, PrefStateSortField> get sortFields => MapBuilder<EntityType, PrefStateSortField> get sortFields =>
_$this._sortFields ??= new MapBuilder<EntityType, PrefStateSortField>(); _$this._sortFields ??= new MapBuilder<EntityType, PrefStateSortField>();
@ -910,6 +929,7 @@ class PrefStateBuilder implements Builder<PrefState, PrefStateBuilder> {
_rowsPerPage = $v.rowsPerPage; _rowsPerPage = $v.rowsPerPage;
_colorTheme = $v.colorTheme; _colorTheme = $v.colorTheme;
_hideDesktopWarning = $v.hideDesktopWarning; _hideDesktopWarning = $v.hideDesktopWarning;
_textScaleFactor = $v.textScaleFactor;
_sortFields = $v.sortFields.toBuilder(); _sortFields = $v.sortFields.toBuilder();
_companyPrefs = $v.companyPrefs.toBuilder(); _companyPrefs = $v.companyPrefs.toBuilder();
_$v = null; _$v = null;
@ -963,6 +983,7 @@ class PrefStateBuilder implements Builder<PrefState, PrefStateBuilder> {
rowsPerPage: BuiltValueNullFieldError.checkNotNull(rowsPerPage, 'PrefState', 'rowsPerPage'), rowsPerPage: BuiltValueNullFieldError.checkNotNull(rowsPerPage, 'PrefState', 'rowsPerPage'),
colorTheme: BuiltValueNullFieldError.checkNotNull(colorTheme, 'PrefState', 'colorTheme'), colorTheme: BuiltValueNullFieldError.checkNotNull(colorTheme, 'PrefState', 'colorTheme'),
hideDesktopWarning: BuiltValueNullFieldError.checkNotNull(hideDesktopWarning, 'PrefState', 'hideDesktopWarning'), hideDesktopWarning: BuiltValueNullFieldError.checkNotNull(hideDesktopWarning, 'PrefState', 'hideDesktopWarning'),
textScaleFactor: BuiltValueNullFieldError.checkNotNull(textScaleFactor, 'PrefState', 'textScaleFactor'),
sortFields: sortFields.build(), sortFields: sortFields.build(),
companyPrefs: companyPrefs.build()); companyPrefs: companyPrefs.build());
} catch (_) { } catch (_) {