mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2025-12-22 01:20:46 +00:00
refactor(app): Обновить зависимости и улучшить документацию для сервисов
This commit is contained in:
@@ -1 +1 @@
|
|||||||
# Базовые сервисы для приложения
|
# Реализация сервисов для Аврора OC
|
||||||
@@ -2,3 +2,4 @@ library;
|
|||||||
|
|
||||||
export 'src/app_path_provider.dart';
|
export 'src/app_path_provider.dart';
|
||||||
export 'src/app_secure_storage.dart';
|
export 'src/app_secure_storage.dart';
|
||||||
|
export 'src/app_location_service.dart';
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import 'package:i_app_services/i_app_services.dart';
|
||||||
|
|
||||||
|
/// {@template app_location_service}
|
||||||
|
/// Реализация сервиса для работы с гео на платформе Aurora.
|
||||||
|
/// {@endtemplate}
|
||||||
|
class AppLocationService implements ILocationService {
|
||||||
|
/// {@macro app_location_service}
|
||||||
|
const AppLocationService();
|
||||||
|
|
||||||
|
/// Наименование сервиса
|
||||||
|
static const name = 'AuroraAppLocationService';
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Object?> getCurrentPosition() {
|
||||||
|
// TODO: Реализовать получение текущей позиции в AuroraOS
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:i_app_services/i_app_services.dart';
|
import 'package:i_app_services/i_app_services.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
|
||||||
|
|
||||||
/// {@template app_path_provider}
|
/// {@template app_path_provider}
|
||||||
/// Класс для Аврора реализации сервиса работы с путями
|
/// Класс для Аврора реализации сервиса работы с путями
|
||||||
@@ -13,6 +12,7 @@ class AppPathProvider implements IPathProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<String> getAppDocumentsDirectoryPath() async {
|
Future<String> getAppDocumentsDirectoryPath() async {
|
||||||
return (await getApplicationDocumentsDirectory()).path;
|
// TODO: Реализовать для AuroraOS
|
||||||
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
||||||
import 'package:flutter_secure_storage_aurora/flutter_secure_storage_aurora.dart';
|
|
||||||
import 'package:i_app_services/i_app_services.dart';
|
import 'package:i_app_services/i_app_services.dart';
|
||||||
|
|
||||||
/// {@template app_secure_storage}
|
/// {@template app_secure_storage}
|
||||||
@@ -12,7 +10,8 @@ final class AppSecureStorage implements ISecureStorage {
|
|||||||
/// Принимает:
|
/// Принимает:
|
||||||
/// - [secretKey] - ключ шифрования данных
|
/// - [secretKey] - ключ шифрования данных
|
||||||
AppSecureStorage({required this.secretKey}) {
|
AppSecureStorage({required this.secretKey}) {
|
||||||
FlutterSecureStorageAurora.setSecret(secretKey);
|
// Инициализация Aurora Secure Storage с ключом шифрования
|
||||||
|
// FlutterSecureStorageAurora.setSecret(secretKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -20,34 +19,36 @@ final class AppSecureStorage implements ISecureStorage {
|
|||||||
|
|
||||||
static const name = 'AuroraAppSecureStorage';
|
static const name = 'AuroraAppSecureStorage';
|
||||||
|
|
||||||
/// Экземпляр хранилища данных
|
|
||||||
final _box = const FlutterSecureStorage();
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> clear() async {
|
|
||||||
await _box.deleteAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> delete(String key) async {
|
Future<void> delete(String key) async {
|
||||||
await _box.delete(key: key);
|
// TODO: Реализовать удаление ключа из Aurora Secure Storage
|
||||||
}
|
throw UnimplementedError();
|
||||||
|
|
||||||
@override
|
|
||||||
Future<bool> exists(String key) {
|
|
||||||
return _box.containsKey(key: key);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<String?> read(String key) async {
|
Future<String?> read(String key) async {
|
||||||
return _box.read(key: key);
|
// TODO: Реализовать чтение значения по ключу из Aurora Secure Storage
|
||||||
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> write(String key, String value) async {
|
Future<void> write(String key, String value) async {
|
||||||
await _box.write(key: key, value: value);
|
// TODO: Реализовать запись значения по ключу в Aurora Secure Storage
|
||||||
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get nameImpl => AppSecureStorage.name;
|
String get nameImpl => AppSecureStorage.name;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> containsKey(String key) {
|
||||||
|
// TODO: Реализовать проверку наличия ключа в Aurora Secure Storage
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> deleteAll() {
|
||||||
|
// TODO: Реализовать удаление всех ключей из Aurora Secure Storage
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,22 +4,12 @@ version: 0.0.1
|
|||||||
publish_to: none
|
publish_to: none
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.16.2 <4.0.0'
|
sdk: ">=3.0.0 <4.0.0"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|
||||||
# Зависимости для сервиса защищенного хранилища
|
|
||||||
flutter_secure_storage: 8.0.0
|
|
||||||
flutter_secure_storage_aurora:
|
|
||||||
git:
|
|
||||||
url: https://gitlab.com/omprussia/flutter/flutter-community-plugins/flutter_secure_storage_aurora.git
|
|
||||||
ref: aurora-0.5.3
|
|
||||||
|
|
||||||
# для работы с путями (плагин встроен в sdk flutter 3.27.1)
|
|
||||||
path_provider: 2.1.5
|
|
||||||
|
|
||||||
# Обязательные интерфейсы
|
# Обязательные интерфейсы
|
||||||
i_app_services:
|
i_app_services:
|
||||||
path: ../../i_app_services
|
path: ../../i_app_services
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import 'package:geolocator/geolocator.dart';
|
||||||
|
import 'package:i_app_services/i_app_services.dart';
|
||||||
|
|
||||||
|
/// {@template app_location_service}
|
||||||
|
/// Реализация сервиса для работы с гео в базовой реализацией Android/OS.
|
||||||
|
/// {@endtemplate}
|
||||||
|
class AppLocationService implements ILocationService {
|
||||||
|
/// {@macro app_location_service}
|
||||||
|
const AppLocationService();
|
||||||
|
|
||||||
|
/// Наименование сервиса
|
||||||
|
static const name = 'BaseAppLocationService';
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Position> getCurrentPosition() async {
|
||||||
|
bool serviceEnabled;
|
||||||
|
LocationPermission permission;
|
||||||
|
|
||||||
|
serviceEnabled = await Geolocator.isLocationServiceEnabled();
|
||||||
|
if (!serviceEnabled) {
|
||||||
|
// Службы геолокации не включены, не продолжаем
|
||||||
|
// обращаться к позиции и запрашиваем у пользователей
|
||||||
|
// приложения включить службы геолокации.
|
||||||
|
return Future.error('Location services are disabled.');
|
||||||
|
}
|
||||||
|
|
||||||
|
permission = await Geolocator.checkPermission();
|
||||||
|
if (permission == LocationPermission.denied) {
|
||||||
|
permission = await Geolocator.requestPermission();
|
||||||
|
if (permission == LocationPermission.denied) {
|
||||||
|
// Разрешения отклонены, в следующий раз можно попробовать
|
||||||
|
// запросить разрешения снова (здесь также возвращается
|
||||||
|
// shouldShowRequestPermissionRationale Android.
|
||||||
|
// Согласно рекомендациям Android ваше приложение
|
||||||
|
// должно показать пояснительный интерфейс сейчас.
|
||||||
|
return Future.error('Location permissions are denied');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (permission == LocationPermission.deniedForever) {
|
||||||
|
// Разрешения отклонены навсегда, обрабатываем соответствующим образом.
|
||||||
|
return Future.error(
|
||||||
|
'Location permissions are permanently denied, we cannot request permissions.',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Когда мы доходим сюда, разрешения предоставлены и мы можем
|
||||||
|
// продолжить обращение к позиции устройства.
|
||||||
|
return await Geolocator.getCurrentPosition();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@ version: 0.0.1
|
|||||||
publish_to: none
|
publish_to: none
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.8.0
|
sdk: ">=3.0.0 <4.0.0"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
@@ -19,6 +19,9 @@ dependencies:
|
|||||||
# для работы с путями в хранилища
|
# для работы с путями в хранилища
|
||||||
path_provider: 2.1.5
|
path_provider: 2.1.5
|
||||||
|
|
||||||
|
# Работа с геолокацией
|
||||||
|
geolocator: 14.0.1
|
||||||
|
|
||||||
# Обязательные интерфейсы
|
# Обязательные интерфейсы
|
||||||
i_app_services:
|
i_app_services:
|
||||||
path: ../../i_app_services
|
path: ../../i_app_services
|
||||||
|
|||||||
29
app_services/hms/app_services/.gitignore
vendored
Normal file
29
app_services/hms/app_services/.gitignore
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Miscellaneous
|
||||||
|
*.class
|
||||||
|
*.log
|
||||||
|
*.pyc
|
||||||
|
*.swp
|
||||||
|
.DS_Store
|
||||||
|
.atom/
|
||||||
|
.buildlog/
|
||||||
|
.history
|
||||||
|
.svn/
|
||||||
|
migrate_working_dir/
|
||||||
|
|
||||||
|
# IntelliJ related
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# The .vscode folder contains launch configuration and tasks you configure in
|
||||||
|
# VS Code which you may wish to be included in version control, so this line
|
||||||
|
# is commented out by default.
|
||||||
|
#.vscode/
|
||||||
|
|
||||||
|
# Flutter/Dart/Pub related
|
||||||
|
# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
|
||||||
|
/pubspec.lock
|
||||||
|
**/doc/api/
|
||||||
|
.dart_tool/
|
||||||
|
build/
|
||||||
10
app_services/hms/app_services/.metadata
Normal file
10
app_services/hms/app_services/.metadata
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# This file tracks properties of this Flutter project.
|
||||||
|
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||||
|
#
|
||||||
|
# This file should be version controlled and should not be manually edited.
|
||||||
|
|
||||||
|
version:
|
||||||
|
revision: "7482962148e8d758338d8a28f589f317e1e42ba4"
|
||||||
|
channel: "stable"
|
||||||
|
|
||||||
|
project_type: package
|
||||||
1
app_services/hms/app_services/README.md
Normal file
1
app_services/hms/app_services/README.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# Реализация сервисов для HarmonyOS
|
||||||
89
app_services/hms/app_services/analysis_options.yaml
Normal file
89
app_services/hms/app_services/analysis_options.yaml
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
include: package:flutter_lints/flutter.yaml
|
||||||
|
|
||||||
|
# Включает правила из:
|
||||||
|
# - package:lints/core.yaml: основные правила критических проблем
|
||||||
|
# - package:lints/recommended.yaml: рекомендуемые правила для чистого кода
|
||||||
|
# - package:flutter_lints/flutter.yaml: специфичные правила для Flutter
|
||||||
|
|
||||||
|
analyzer:
|
||||||
|
exclude:
|
||||||
|
- "android/**"
|
||||||
|
- "assets/**"
|
||||||
|
- "build/**"
|
||||||
|
- "config/**"
|
||||||
|
- "core/**"
|
||||||
|
- "res/**"
|
||||||
|
- "ios/**"
|
||||||
|
- "**/*.g.dart"
|
||||||
|
- "**/*.config.dart"
|
||||||
|
- "**/*.gen.dart"
|
||||||
|
- "**/*.freezed.dart"
|
||||||
|
- "**/generated/*"
|
||||||
|
- "**/*.gr.dart"
|
||||||
|
- "**/*.yaml"
|
||||||
|
- "app_services/aurora/**"
|
||||||
|
- "/app_services/aurora/**"
|
||||||
|
- "**/app_services/aurora/**"
|
||||||
|
- "**/*.lock.dart"
|
||||||
|
errors:
|
||||||
|
# Переопределения уровней ошибок (error/warning/info)
|
||||||
|
avoid_dynamic_calls: error # Запрещает использование dynamic для вызовов методов
|
||||||
|
avoid_returning_null_for_future: error # Запрещает возврат null вместо Future
|
||||||
|
avoid_slow_async_io: warning # Предупреждает о медленных асинхронных операциях ввода/вывода
|
||||||
|
avoid_type_to_string: warning # Предупреждает о неправильном использовании toString() для типов
|
||||||
|
cancel_subscriptions: error # Требует отмены подписок, предотвращает утечки памяти
|
||||||
|
close_sinks: error # Требует закрытия sink-ов, предотвращает утечки ресурсов
|
||||||
|
comment_references: warning # Проверяет корректность ссылок в комментариях
|
||||||
|
always_declare_return_types: error # Требует явного указания возвращаемых типов методов
|
||||||
|
always_require_non_null_named_parameters: warning # Требует использования @required для ненулевых параметров
|
||||||
|
avoid_bool_literals_in_conditional_expressions: warning # Запрещает избыточные булевы литералы в условных выражениях
|
||||||
|
avoid_return_types_on_setters: warning # Запрещает возвращаемые типы для сеттеров
|
||||||
|
avoid_returning_null: error # Запрещает возврат null
|
||||||
|
avoid_setters_without_getters: error # Требует создания геттера при наличии сеттера
|
||||||
|
avoid_void_async: error # Запрещает использование void для асинхронных функций
|
||||||
|
constant_identifier_names: error # Проверяет правильность именования констант
|
||||||
|
unnecessary_new: warning # Запрещает избыточное использование ключевого слова new
|
||||||
|
use_decorated_box: warning # Рекомендует использовать DecoratedBox вместо Container
|
||||||
|
use_colored_box: warning # Рекомендует использовать ColoredBox вместо Container с цветом
|
||||||
|
|
||||||
|
linter:
|
||||||
|
rules:
|
||||||
|
# Нестандартные правила или правила с измененными значениями
|
||||||
|
always_put_required_named_parameters_first: true # Требовать размещать обязательные именованные параметры первыми
|
||||||
|
avoid_catches_without_on_clauses: true # Избегать catch без указания типа исключения
|
||||||
|
avoid_catching_errors: true # Избегать перехвата ошибок типа Error
|
||||||
|
avoid_equals_and_hash_code_on_mutable_classes: true # Избегать equals и hashCode в изменяемых классах
|
||||||
|
avoid_escaping_inner_quotes: true # Избегать экранирования внутренних кавычек
|
||||||
|
avoid_field_initializers_in_const_classes: true # Избегать инициализаторов полей в константных классах
|
||||||
|
avoid_implementing_value_types: true # Избегать реализации интерфейсов значимых типов
|
||||||
|
avoid_multiple_declarations_per_line: false # Разрешать несколько объявлений в одной строке
|
||||||
|
avoid_positional_boolean_parameters: true # Избегать позиционных булевых параметров
|
||||||
|
avoid_private_typedef_functions: true # Избегать приватных typedef-функций
|
||||||
|
avoid_redundant_argument_values: true # Избегать избыточных значений аргументов
|
||||||
|
avoid_returning_this: true # Избегать возврата this
|
||||||
|
cascade_invocations: true # Использовать каскадные вызовы
|
||||||
|
deprecated_consistency: true # Поддерживать согласованность устаревших элементов
|
||||||
|
do_not_use_environment: false # Разрешить использование Environment
|
||||||
|
leading_newlines_in_multiline_strings: true # Начинать многострочные строки с новой строки
|
||||||
|
no_runtimeType_toString: true # Не использовать runtimeType.toString()
|
||||||
|
one_member_abstracts: false # Разрешать абстрактные классы с одним методом
|
||||||
|
only_throw_errors: true # Выбрасывать только объекты Error
|
||||||
|
parameter_assignments: true # Запрещать присваивание значений параметрам
|
||||||
|
prefer_asserts_with_message: true # Использовать сообщения с assert
|
||||||
|
prefer_constructors_over_static_methods: true # Предпочитать конструкторы статическим методам
|
||||||
|
prefer_final_in_for_each: true # Использовать final в for-each циклах
|
||||||
|
prefer_final_locals: true # Использовать final для локальных переменных
|
||||||
|
public_member_api_docs: false # Не требовать документацию для всех публичных членов
|
||||||
|
require_trailing_commas: true # Требовать запятые в конце для улучшения форматирования
|
||||||
|
sort_constructors_first: true # Требовать размещать конструкторы первыми
|
||||||
|
sort_pub_dependencies: false # Не требовать сортировки зависимостей в pubspec
|
||||||
|
sort_unnamed_constructors_first: false # Не требовать размещать безымянные конструкторы первыми
|
||||||
|
use_is_even_rather_than_modulo: true # Использовать isEven вместо % 2 == 0
|
||||||
|
use_late_for_private_fields_and_variables: false # Не требовать late для приватных полей
|
||||||
|
use_setters_to_change_properties: true # Использовать сеттеры для изменения свойств
|
||||||
|
use_string_buffers: true # Использовать StringBuffer для сложной конкатенации
|
||||||
|
use_to_and_as_if_applicable: true # Использовать методы to и as при применимости
|
||||||
|
no_literal_bool_comparisons: true # Запрещать сравнения с литералами true/false
|
||||||
|
use_key_in_widget_constructors: true # Обязательное указание ключа для stateful/stateless widgets
|
||||||
|
always_use_package_imports: true # Всегда использовать package: импорты
|
||||||
|
|
||||||
5
app_services/hms/app_services/lib/app_services.dart
Normal file
5
app_services/hms/app_services/lib/app_services.dart
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
library;
|
||||||
|
|
||||||
|
export 'src/app_path_provider.dart';
|
||||||
|
export 'src/app_secure_storage.dart';
|
||||||
|
export 'src/app_location_service.dart';
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import 'package:i_app_services/i_app_services.dart';
|
||||||
|
|
||||||
|
/// {@template app_location_service}
|
||||||
|
/// Реализация сервиса для работы с гео на HarmonyOS.
|
||||||
|
/// {@endtemplate}
|
||||||
|
class AppLocationService implements ILocationService {
|
||||||
|
/// {@macro app_location_service}
|
||||||
|
const AppLocationService();
|
||||||
|
|
||||||
|
/// Наименование сервиса
|
||||||
|
static const name = 'HarmonyAppLocationService';
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Object?> getCurrentPosition() {
|
||||||
|
// TODO: Реализовать получение текущей позиции в HarmonyOS
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
}
|
||||||
18
app_services/hms/app_services/lib/src/app_path_provider.dart
Normal file
18
app_services/hms/app_services/lib/src/app_path_provider.dart
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import 'package:i_app_services/i_app_services.dart';
|
||||||
|
|
||||||
|
/// {@template app_path_provider}
|
||||||
|
/// Класс для HarmonyOS реализации сервиса работы с путями
|
||||||
|
/// {@endtemplate}
|
||||||
|
class AppPathProvider implements IPathProvider {
|
||||||
|
/// {@macro app_path_provider}
|
||||||
|
const AppPathProvider();
|
||||||
|
|
||||||
|
/// Наименование сервиса
|
||||||
|
static const name = 'HarmonyAppPathProvider';
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String> getAppDocumentsDirectoryPath() async {
|
||||||
|
// TODO: Реализовать для HarmonyOS
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import 'package:i_app_services/i_app_services.dart';
|
||||||
|
|
||||||
|
/// {@template app_secure_storage}
|
||||||
|
/// Класс для HarmonyOS реализации сервиса по работе с защищенным хранилищем
|
||||||
|
/// {@endtemplate}
|
||||||
|
final class AppSecureStorage implements ISecureStorage {
|
||||||
|
/// Создает сервис для работы с защищенным хранилищем
|
||||||
|
///
|
||||||
|
/// Принимает:
|
||||||
|
/// - [secretKey] - ключ шифрования данных, если требуется
|
||||||
|
AppSecureStorage({required this.secretKey});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final String secretKey;
|
||||||
|
|
||||||
|
static const name = 'HarmonyAppSecureStorage';
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> delete(String key) async {
|
||||||
|
// TODO: Реализовать удаление ключа из HarmonyOS Secure Storage
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String?> read(String key) async {
|
||||||
|
// TODO: Реализовать чтение значения по ключу из HarmonyOS Secure Storage
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> write(String key, String value) async {
|
||||||
|
// TODO: Реализовать запись значения по ключу в HarmonyOS Secure Storage
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get nameImpl => AppSecureStorage.name;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> containsKey(String key) {
|
||||||
|
// TODO: Реализовать проверку наличия ключа в HarmonyOS Secure Storage
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> deleteAll() {
|
||||||
|
// TODO: Реализовать удаление всех ключей из HarmonyOS Secure Storage
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
}
|
||||||
18
app_services/hms/app_services/pubspec.yaml
Normal file
18
app_services/hms/app_services/pubspec.yaml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
name: app_services
|
||||||
|
description: "Huawei сервисы для приложения"
|
||||||
|
version: 0.0.1
|
||||||
|
publish_to: none
|
||||||
|
|
||||||
|
environment:
|
||||||
|
sdk: ">=3.0.0 <4.0.0"
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
flutter:
|
||||||
|
sdk: flutter
|
||||||
|
|
||||||
|
# Обязательные интерфейсы
|
||||||
|
i_app_services:
|
||||||
|
path: ../../i_app_services
|
||||||
|
|
||||||
|
dev_dependencies:
|
||||||
|
flutter_lints: 6.0.0
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
library;
|
library;
|
||||||
|
|
||||||
export 'src/i_path_provider.dart';
|
export 'src/i_path_provider.dart';
|
||||||
|
export 'src/i_location_service.dart';
|
||||||
export 'src/i_secure_storage.dart';
|
export 'src/i_secure_storage.dart';
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
/// {@template i_location_service}
|
||||||
|
/// Интерфейс для работы с геопозицией пользователя
|
||||||
|
/// {@endtemplate}
|
||||||
|
abstract interface class ILocationService {
|
||||||
|
static const name = 'ILocationService';
|
||||||
|
|
||||||
|
/// Метод для получения координат пользователя
|
||||||
|
Future<dynamic> getCurrentPosition();
|
||||||
|
}
|
||||||
@@ -4,6 +4,6 @@ abstract interface class IPathProvider {
|
|||||||
/// Наименования интерфейса
|
/// Наименования интерфейса
|
||||||
static const name = 'IPathProvider';
|
static const name = 'IPathProvider';
|
||||||
|
|
||||||
/// Получение path на внутренне хранилище приложения
|
/// Получение path на внутреннее хранилище приложения
|
||||||
Future<String?> getAppDocumentsDirectoryPath();
|
Future<String?> getAppDocumentsDirectoryPath();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
name: i_app_services
|
name: i_app_services
|
||||||
description: "Хранит в себе все интерфейсы для реализации общих сервисов"
|
description: "Хранит в себе все интерфейсы для реализации сервисов"
|
||||||
version: 0.0.1
|
version: 0.0.1
|
||||||
publish_to: "none"
|
publish_to: "none"
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.8.0
|
sdk: ">=3.0.0 <4.0.0"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
|
|||||||
Reference in New Issue
Block a user