runable
This commit is contained in:
162
lib/features/settings/data/models/app_settings_model.dart
Normal file
162
lib/features/settings/data/models/app_settings_model.dart
Normal file
@@ -0,0 +1,162 @@
|
||||
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,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user