WIP - started implementing quick search

This commit is contained in:
Anton Stubenbord
2023-01-23 02:24:01 +01:00
parent 9bfb6aa661
commit f6ecbae6e8
50 changed files with 824 additions and 409 deletions

View File

@@ -1,7 +1,8 @@
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:paperless_mobile/features/login/services/authentication_service.dart';
import 'package:paperless_mobile/features/settings/model/application_settings_state.dart';
import 'package:paperless_mobile/features/settings/bloc/application_settings_state.dart';
import 'package:paperless_mobile/features/settings/model/color_scheme_option.dart';
import 'package:paperless_mobile/features/settings/model/view_type.dart';
class ApplicationSettingsCubit extends HydratedCubit<ApplicationSettingsState> {
@@ -27,17 +28,23 @@ class ApplicationSettingsCubit extends HydratedCubit<ApplicationSettingsState> {
}
}
Future<void> setThemeMode(ThemeMode? selectedMode) async {
void setThemeMode(ThemeMode? selectedMode) {
final updatedSettings = state.copyWith(preferredThemeMode: selectedMode);
_updateSettings(updatedSettings);
}
Future<void> setViewType(ViewType viewType) async {
void setViewType(ViewType viewType) {
final updatedSettings = state.copyWith(preferredViewType: viewType);
_updateSettings(updatedSettings);
}
Future<void> _updateSettings(ApplicationSettingsState settings) async {
void setColorSchemeOption(ColorSchemeOption schemeOption) {
final updatedSettings =
state.copyWith(preferredColorSchemeOption: schemeOption);
_updateSettings(updatedSettings);
}
void _updateSettings(ApplicationSettingsState settings) async {
emit(settings);
}

View File

@@ -0,0 +1,55 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_mobile/features/settings/model/color_scheme_option.dart';
import 'package:paperless_mobile/features/settings/model/view_type.dart';
part 'application_settings_state.g.dart';
///
/// State holding the current application settings such as selected language, theme mode and more.
///
@JsonSerializable()
class ApplicationSettingsState {
static final defaultSettings = ApplicationSettingsState(
preferredLocaleSubtag: Platform.localeName.split('_').first,
);
final bool isLocalAuthenticationEnabled;
final String preferredLocaleSubtag;
final ThemeMode preferredThemeMode;
final ViewType preferredViewType;
final ColorSchemeOption preferredColorSchemeOption;
ApplicationSettingsState({
required this.preferredLocaleSubtag,
this.preferredThemeMode = ThemeMode.system,
this.isLocalAuthenticationEnabled = false,
this.preferredViewType = ViewType.list,
this.preferredColorSchemeOption = ColorSchemeOption.dynamic,
});
Map<String, dynamic> toJson() => _$ApplicationSettingsStateToJson(this);
factory ApplicationSettingsState.fromJson(Map<String, dynamic> json) =>
_$ApplicationSettingsStateFromJson(json);
ApplicationSettingsState copyWith({
bool? isLocalAuthenticationEnabled,
String? preferredLocaleSubtag,
ThemeMode? preferredThemeMode,
ViewType? preferredViewType,
ColorSchemeOption? preferredColorSchemeOption,
}) {
return ApplicationSettingsState(
isLocalAuthenticationEnabled:
isLocalAuthenticationEnabled ?? this.isLocalAuthenticationEnabled,
preferredLocaleSubtag:
preferredLocaleSubtag ?? this.preferredLocaleSubtag,
preferredThemeMode: preferredThemeMode ?? this.preferredThemeMode,
preferredViewType: preferredViewType ?? this.preferredViewType,
preferredColorSchemeOption:
preferredColorSchemeOption ?? this.preferredColorSchemeOption,
);
}
}

View File

@@ -0,0 +1,51 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'application_settings_state.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
ApplicationSettingsState _$ApplicationSettingsStateFromJson(
Map<String, dynamic> json) =>
ApplicationSettingsState(
preferredLocaleSubtag: json['preferredLocaleSubtag'] as String,
preferredThemeMode:
$enumDecodeNullable(_$ThemeModeEnumMap, json['preferredThemeMode']) ??
ThemeMode.system,
isLocalAuthenticationEnabled:
json['isLocalAuthenticationEnabled'] as bool? ?? false,
preferredViewType:
$enumDecodeNullable(_$ViewTypeEnumMap, json['preferredViewType']) ??
ViewType.list,
preferredColorSchemeOption: $enumDecodeNullable(
_$ColorSchemeOptionEnumMap, json['preferredColorSchemeOption']) ??
ColorSchemeOption.dynamic,
);
Map<String, dynamic> _$ApplicationSettingsStateToJson(
ApplicationSettingsState instance) =>
<String, dynamic>{
'isLocalAuthenticationEnabled': instance.isLocalAuthenticationEnabled,
'preferredLocaleSubtag': instance.preferredLocaleSubtag,
'preferredThemeMode': _$ThemeModeEnumMap[instance.preferredThemeMode]!,
'preferredViewType': _$ViewTypeEnumMap[instance.preferredViewType]!,
'preferredColorSchemeOption':
_$ColorSchemeOptionEnumMap[instance.preferredColorSchemeOption]!,
};
const _$ThemeModeEnumMap = {
ThemeMode.system: 'system',
ThemeMode.light: 'light',
ThemeMode.dark: 'dark',
};
const _$ViewTypeEnumMap = {
ViewType.grid: 'grid',
ViewType.list: 'list',
};
const _$ColorSchemeOptionEnumMap = {
ColorSchemeOption.classic: 'classic',
ColorSchemeOption.dynamic: 'dynamic',
};