163 lines
3.9 KiB
Dart
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,
|
|
);
|
|
}
|
|
}
|