Приложение на флаторе, настройки
This commit is contained in:
@@ -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'));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user