Files
retail/lib/features/settings/data/models/app_settings_model.dart
Phuoc Nguyen b94c158004 runable
2025-10-10 16:38:07 +07:00

163 lines
3.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:hive_ce/hive.dart';
import '../../domain/entities/app_settings.dart';
import '../../../../core/constants/storage_constants.dart';
import '../../../../core/constants/app_constants.dart';
part 'app_settings_model.g.dart';
@HiveType(typeId: StorageConstants.appSettingsTypeId)
class AppSettingsModel extends HiveObject {
@HiveField(0)
final String themeModeString;
@HiveField(1)
final String language;
@HiveField(2)
final String currency;
@HiveField(3)
final double taxRate;
@HiveField(4)
final String storeName;
@HiveField(5)
final bool enableSync;
@HiveField(6)
final DateTime? lastSyncAt;
AppSettingsModel({
required this.themeModeString,
required this.language,
required this.currency,
required this.taxRate,
required this.storeName,
required this.enableSync,
this.lastSyncAt,
});
/// Convert to domain entity
AppSettings toEntity() {
ThemeMode themeMode;
switch (themeModeString) {
case 'light':
themeMode = ThemeMode.light;
break;
case 'dark':
themeMode = ThemeMode.dark;
break;
default:
themeMode = ThemeMode.system;
}
return AppSettings(
themeMode: themeMode,
language: language,
currency: currency,
taxRate: taxRate,
storeName: storeName,
enableSync: enableSync,
lastSyncAt: lastSyncAt,
);
}
/// Create from domain entity
factory AppSettingsModel.fromEntity(AppSettings settings) {
String themeModeString;
switch (settings.themeMode) {
case ThemeMode.light:
themeModeString = 'light';
break;
case ThemeMode.dark:
themeModeString = 'dark';
break;
default:
themeModeString = 'system';
}
return AppSettingsModel(
themeModeString: themeModeString,
language: settings.language,
currency: settings.currency,
taxRate: settings.taxRate,
storeName: settings.storeName,
enableSync: settings.enableSync,
lastSyncAt: settings.lastSyncAt,
);
}
/// Create default settings
factory AppSettingsModel.defaultSettings() {
return AppSettingsModel(
themeModeString: 'system',
language: AppConstants.defaultLanguage,
currency: AppConstants.defaultCurrency,
taxRate: AppConstants.defaultTaxRate,
storeName: AppConstants.appName,
enableSync: true,
lastSyncAt: null,
);
}
/// Create from ThemeMode
factory AppSettingsModel.fromThemeMode(ThemeMode mode) {
String themeModeString;
switch (mode) {
case ThemeMode.light:
themeModeString = 'light';
break;
case ThemeMode.dark:
themeModeString = 'dark';
break;
default:
themeModeString = 'system';
}
return AppSettingsModel(
themeModeString: themeModeString,
language: AppConstants.defaultLanguage,
currency: AppConstants.defaultCurrency,
taxRate: AppConstants.defaultTaxRate,
storeName: AppConstants.appName,
enableSync: true,
lastSyncAt: null,
);
}
/// Get ThemeMode from string
ThemeMode get themeMode {
switch (themeModeString) {
case 'light':
return ThemeMode.light;
case 'dark':
return ThemeMode.dark;
default:
return ThemeMode.system;
}
}
/// Create a copy with updated fields
AppSettingsModel copyWith({
String? themeModeString,
String? language,
String? currency,
double? taxRate,
String? storeName,
bool? enableSync,
DateTime? lastSyncAt,
}) {
return AppSettingsModel(
themeModeString: themeModeString ?? this.themeModeString,
language: language ?? this.language,
currency: currency ?? this.currency,
taxRate: taxRate ?? this.taxRate,
storeName: storeName ?? this.storeName,
enableSync: enableSync ?? this.enableSync,
lastSyncAt: lastSyncAt ?? this.lastSyncAt,
);
}
}