runable
This commit is contained in:
155
.archive/settings_local_datasource_hive.dart
Normal file
155
.archive/settings_local_datasource_hive.dart
Normal file
@@ -0,0 +1,155 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hive_ce/hive.dart';
|
||||
import 'package:retail/core/database/hive_database.dart';
|
||||
import 'package:retail/features/settings/data/models/app_settings_model.dart';
|
||||
import 'package:retail/features/settings/data/datasources/settings_local_datasource.dart';
|
||||
import 'package:retail/features/settings/domain/entities/app_settings.dart';
|
||||
|
||||
/// Hive implementation of SettingsLocalDataSource
|
||||
class SettingsLocalDataSourceHive implements SettingsLocalDataSource {
|
||||
final HiveDatabase _database;
|
||||
static const String _settingsKey = 'app_settings';
|
||||
|
||||
SettingsLocalDataSourceHive(this._database);
|
||||
|
||||
Box<AppSettingsModel> get _box => _database.settingsBox;
|
||||
|
||||
/// Convert AppSettingsModel to AppSettings entity
|
||||
AppSettings _toEntity(AppSettingsModel model) {
|
||||
return AppSettings(
|
||||
themeMode: model.themeMode,
|
||||
language: model.language,
|
||||
currency: model.currency,
|
||||
taxRate: model.taxRate,
|
||||
storeName: model.storeName,
|
||||
enableSync: model.enableSync,
|
||||
lastSyncAt: model.lastSyncAt,
|
||||
);
|
||||
}
|
||||
|
||||
/// Convert AppSettings entity to AppSettingsModel
|
||||
AppSettingsModel _toModel(AppSettings entity) {
|
||||
return AppSettingsModel.fromThemeMode(
|
||||
themeMode: entity.themeMode,
|
||||
language: entity.language,
|
||||
currency: entity.currency,
|
||||
taxRate: entity.taxRate,
|
||||
storeName: entity.storeName,
|
||||
enableSync: entity.enableSync,
|
||||
lastSyncAt: entity.lastSyncAt,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<AppSettings> getSettings() async {
|
||||
try {
|
||||
final model = _box.get(_settingsKey);
|
||||
if (model != null) {
|
||||
return _toEntity(model);
|
||||
}
|
||||
// Return default settings if not found
|
||||
return AppSettings.defaultSettings();
|
||||
} catch (e) {
|
||||
throw Exception('Failed to get settings: $e');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> saveSettings(AppSettings settings) async {
|
||||
try {
|
||||
final model = _toModel(settings);
|
||||
await _box.put(_settingsKey, model);
|
||||
} catch (e) {
|
||||
throw Exception('Failed to save settings: $e');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateThemeMode(ThemeMode mode) async {
|
||||
try {
|
||||
final currentSettings = await getSettings();
|
||||
final updated = currentSettings.copyWith(themeMode: mode);
|
||||
await saveSettings(updated);
|
||||
} catch (e) {
|
||||
throw Exception('Failed to update theme mode: $e');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateLanguage(String language) async {
|
||||
try {
|
||||
final currentSettings = await getSettings();
|
||||
final updated = currentSettings.copyWith(language: language);
|
||||
await saveSettings(updated);
|
||||
} catch (e) {
|
||||
throw Exception('Failed to update language: $e');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateLastSyncTime(DateTime time) async {
|
||||
try {
|
||||
final currentSettings = await getSettings();
|
||||
final updated = currentSettings.copyWith(lastSyncAt: time);
|
||||
await saveSettings(updated);
|
||||
} catch (e) {
|
||||
throw Exception('Failed to update last sync time: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// Additional Hive-specific methods
|
||||
|
||||
/// Update currency
|
||||
Future<void> updateCurrency(String currency) async {
|
||||
try {
|
||||
final currentSettings = await getSettings();
|
||||
final updated = currentSettings.copyWith(currency: currency);
|
||||
await saveSettings(updated);
|
||||
} catch (e) {
|
||||
throw Exception('Failed to update currency: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// Update tax rate
|
||||
Future<void> updateTaxRate(double taxRate) async {
|
||||
try {
|
||||
final currentSettings = await getSettings();
|
||||
final updated = currentSettings.copyWith(taxRate: taxRate);
|
||||
await saveSettings(updated);
|
||||
} catch (e) {
|
||||
throw Exception('Failed to update tax rate: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// Update store name
|
||||
Future<void> updateStoreName(String storeName) async {
|
||||
try {
|
||||
final currentSettings = await getSettings();
|
||||
final updated = currentSettings.copyWith(storeName: storeName);
|
||||
await saveSettings(updated);
|
||||
} catch (e) {
|
||||
throw Exception('Failed to update store name: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// Toggle sync
|
||||
Future<void> toggleSync(bool enable) async {
|
||||
try {
|
||||
final currentSettings = await getSettings();
|
||||
final updated = currentSettings.copyWith(enableSync: enable);
|
||||
await saveSettings(updated);
|
||||
} catch (e) {
|
||||
throw Exception('Failed to toggle sync: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// Reset to default settings
|
||||
Future<void> resetSettings() async {
|
||||
try {
|
||||
final defaultSettings = AppSettings.defaultSettings();
|
||||
await saveSettings(defaultSettings);
|
||||
} catch (e) {
|
||||
throw Exception('Failed to reset settings: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user