Приложение на флаторе, настройки

This commit is contained in:
Халимов Рустам
2026-05-13 17:21:37 +03:00
parent 89e325556c
commit e8161d23d4
119 changed files with 18469 additions and 0 deletions
@@ -0,0 +1,57 @@
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
import '../../../../core/constants/storage_keys.dart';
import '../../domain/entities/server_config.dart';
abstract class SettingsLocalDataSource {
Future<String?> getApiUrl();
Future<void> saveApiUrl(String url);
Future<String?> getLanguageCode();
Future<void> saveLanguageCode(String code);
Future<ServerConfig?> getServerConfig();
Future<void> saveServerConfig(ServerConfig config);
}
class SettingsLocalDataSourceImpl implements SettingsLocalDataSource {
final SharedPreferences _prefs;
SettingsLocalDataSourceImpl(this._prefs);
@override
Future<String?> getApiUrl() async {
return _prefs.getString(StorageKeys.apiUrl);
}
@override
Future<void> saveApiUrl(String url) async {
await _prefs.setString(StorageKeys.apiUrl, url);
}
@override
Future<String?> getLanguageCode() async {
return _prefs.getString(StorageKeys.languageCode);
}
@override
Future<void> saveLanguageCode(String code) async {
await _prefs.setString(StorageKeys.languageCode, code);
}
@override
Future<ServerConfig?> getServerConfig() async {
final jsonString = _prefs.getString(StorageKeys.serverConfig);
if (jsonString == null) return null;
try {
final json = jsonDecode(jsonString) as Map<String, dynamic>;
return ServerConfig.fromJson(json);
} catch (_) {
return null;
}
}
@override
Future<void> saveServerConfig(ServerConfig config) async {
final jsonString = jsonEncode(config.toJson());
await _prefs.setString(StorageKeys.serverConfig, jsonString);
}
}
@@ -0,0 +1,30 @@
import 'package:dio/dio.dart';
import '../../../../core/errors/errors.dart';
import '../../../../core/errors/result.dart';
import '../../domain/entities/server_config.dart';
abstract class SettingsRemoteDataSource {
Future<Result<ServerConfig>> getServerConfig();
}
class SettingsRemoteDataSourceImpl implements SettingsRemoteDataSource {
final Dio _dio;
SettingsRemoteDataSourceImpl(this._dio);
@override
Future<Result<ServerConfig>> getServerConfig() async {
try {
final response = await _dio.get('/api/config');
if (response.statusCode == 200) {
final config = ServerConfig.fromJson(response.data as Map<String, dynamic>);
return Result.success(config);
}
return Result.failure(AppError.server(statusCode: 500, message: 'Failed to load config'));
} on DioException catch (e) {
return Result.failure(AppError.network(message: e.message));
} catch (e) {
return Result.failure(const AppError.unknown(message: 'Unknown error'));
}
}
}