first commit
This commit is contained in:
4
lib/services/core/core_service.dart
Normal file
4
lib/services/core/core_service.dart
Normal file
@@ -0,0 +1,4 @@
|
||||
///
|
||||
/// Базовый сервис для сервисов, которые не будут меняться от проекта к проекту
|
||||
///
|
||||
abstract class CoreService {}
|
||||
52
lib/services/core/enc_keys_service.dart
Normal file
52
lib/services/core/enc_keys_service.dart
Normal file
@@ -0,0 +1,52 @@
|
||||
// Dart imports:
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:hive_ce/hive.dart';
|
||||
import 'package:remever/common/storage.dart';
|
||||
|
||||
import 'core_service.dart';
|
||||
|
||||
///
|
||||
/// Сервис для работы с ключами шифрования
|
||||
///
|
||||
class EncKeysService extends CoreService {
|
||||
///
|
||||
/// Получение ключа для шифрования
|
||||
///
|
||||
Future<String> getRawKey(String keyFor) async {
|
||||
String? encKey = await hiveKeysStorage.read(key: keyFor);
|
||||
|
||||
if (encKey == null) {
|
||||
final List<int> hiveKey = Hive.generateSecureKey();
|
||||
|
||||
encKey = base64UrlEncode(hiveKey);
|
||||
|
||||
await hiveKeysStorage.write(key: keyFor, value: encKey);
|
||||
}
|
||||
|
||||
return encKey;
|
||||
}
|
||||
|
||||
///
|
||||
/// Получение ключа шифрования
|
||||
///
|
||||
/// Если ключа ранее не существовало - он будет создан
|
||||
///
|
||||
Future<Uint8List> getKey(String keyFor) async {
|
||||
String? encKey = await getRawKey(keyFor);
|
||||
|
||||
return base64Url.decode(encKey);
|
||||
}
|
||||
|
||||
///
|
||||
/// Получение ключа шифрования в виде строки
|
||||
///
|
||||
/// Если ключа ранее не существовало - он будет создан
|
||||
///
|
||||
Future<String> getStringKey(String keyFor) async {
|
||||
final Uint8List key = await getKey(keyFor);
|
||||
|
||||
return String.fromCharCodes(key);
|
||||
}
|
||||
}
|
||||
42
lib/services/core/lang_service.dart
Normal file
42
lib/services/core/lang_service.dart
Normal file
@@ -0,0 +1,42 @@
|
||||
import 'package:remever/common/resources.dart';
|
||||
import 'package:remever/common/storage.dart';
|
||||
import 'package:remever/i18n/strings.g.dart';
|
||||
import 'package:remever/interfaces/warmup_service.dart';
|
||||
|
||||
import 'core_service.dart';
|
||||
|
||||
///
|
||||
/// Сервис для работы с языками приложения
|
||||
///
|
||||
class LangService extends CoreService implements IWarmupService {
|
||||
///
|
||||
/// Установка языка при первом запуске
|
||||
///
|
||||
@override
|
||||
Future<void> init() async {
|
||||
final AppLocale deviceLocale = await LocaleSettings.useDeviceLocale();
|
||||
AppLocale? locale = hiveLang.get(StorageKeys.langCode);
|
||||
|
||||
if (locale == null) {
|
||||
LocaleSettings.setLocale(deviceLocale);
|
||||
|
||||
hiveLang.put(StorageKeys.langCode, deviceLocale);
|
||||
} else {
|
||||
LocaleSettings.setLocale(locale);
|
||||
}
|
||||
}
|
||||
|
||||
///
|
||||
/// Получение текущей локали
|
||||
///
|
||||
AppLocale get locale =>
|
||||
hiveLang.get(StorageKeys.langCode, defaultValue: AppLocale.en)!;
|
||||
|
||||
///
|
||||
/// Запись и установка языка
|
||||
///
|
||||
Future<void> setLanguage(AppLocale locale) async {
|
||||
await hiveLang.put(StorageKeys.langCode, locale);
|
||||
LocaleSettings.setLocale(locale);
|
||||
}
|
||||
}
|
||||
48
lib/services/core/theme_service.dart
Normal file
48
lib/services/core/theme_service.dart
Normal file
@@ -0,0 +1,48 @@
|
||||
// Flutter imports:
|
||||
import 'package:flutter/material.dart' show ThemeMode;
|
||||
import 'package:remever/common/resources.dart';
|
||||
import 'package:remever/common/storage.dart';
|
||||
import 'package:remever/components/extensions/theme_mode.dart';
|
||||
import 'package:remever/interfaces/warmup_service.dart';
|
||||
|
||||
import 'core_service.dart';
|
||||
|
||||
///
|
||||
/// Сервис для работы с темой приложения
|
||||
///
|
||||
class ThemeService extends CoreService implements IWarmupService {
|
||||
@override
|
||||
Future<void> init() async {
|
||||
final ThemeMode? theme = hiveTheme.get(StorageKeys.themeKey);
|
||||
|
||||
if (theme == null) {
|
||||
await hiveTheme.put(StorageKeys.themeKey, ThemeMode.light);
|
||||
}
|
||||
}
|
||||
|
||||
///
|
||||
/// Получение текущего значения для темы
|
||||
///
|
||||
/// По-умолчанию - светлый
|
||||
///
|
||||
ThemeMode get themeMode {
|
||||
return hiveTheme.get(StorageKeys.themeKey, defaultValue: ThemeMode.light)!;
|
||||
}
|
||||
|
||||
///
|
||||
/// Обновление темы приложения
|
||||
///
|
||||
/// [oldThemeMode] должно быть текущее значение темы. Автоматически будет
|
||||
/// вызван метод {inversed}
|
||||
///
|
||||
Future<void> update(ThemeMode oldThemeMode) async {
|
||||
return updateInversed(oldThemeMode.inversed);
|
||||
}
|
||||
|
||||
///
|
||||
/// Обновление темы приложения
|
||||
///
|
||||
Future<void> updateInversed(ThemeMode themeMode) async {
|
||||
return hiveTheme.put(StorageKeys.themeKey, themeMode);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user