This commit is contained in:
Phuoc Nguyen
2025-10-10 16:38:07 +07:00
parent e5b247d622
commit b94c158004
177 changed files with 25080 additions and 152 deletions

View File

@@ -0,0 +1,68 @@
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import '../../../../core/constants/app_constants.dart';
/// App settings domain entity
class AppSettings extends Equatable {
final ThemeMode themeMode;
final String language;
final String currency;
final double taxRate;
final String storeName;
final bool enableSync;
final DateTime? lastSyncAt;
const AppSettings({
required this.themeMode,
required this.language,
required this.currency,
required this.taxRate,
required this.storeName,
required this.enableSync,
this.lastSyncAt,
});
AppSettings copyWith({
ThemeMode? themeMode,
String? language,
String? currency,
double? taxRate,
String? storeName,
bool? enableSync,
DateTime? lastSyncAt,
}) {
return AppSettings(
themeMode: themeMode ?? this.themeMode,
language: language ?? this.language,
currency: currency ?? this.currency,
taxRate: taxRate ?? this.taxRate,
storeName: storeName ?? this.storeName,
enableSync: enableSync ?? this.enableSync,
lastSyncAt: lastSyncAt ?? this.lastSyncAt,
);
}
/// Create default settings
factory AppSettings.defaultSettings() {
return const AppSettings(
themeMode: ThemeMode.system,
language: AppConstants.defaultLanguage,
currency: AppConstants.defaultCurrency,
taxRate: AppConstants.defaultTaxRate,
storeName: AppConstants.appName,
enableSync: true,
lastSyncAt: null,
);
}
@override
List<Object?> get props => [
themeMode,
language,
currency,
taxRate,
storeName,
enableSync,
lastSyncAt,
];
}

View File

@@ -0,0 +1,12 @@
import 'package:dartz/dartz.dart';
import '../../../../core/errors/failures.dart';
import '../entities/app_settings.dart';
/// Settings repository interface
abstract class SettingsRepository {
/// Get app settings
Future<Either<Failure, AppSettings>> getSettings();
/// Update app settings
Future<Either<Failure, void>> updateSettings(AppSettings settings);
}

View File

@@ -0,0 +1,15 @@
import 'package:dartz/dartz.dart';
import '../../../../core/errors/failures.dart';
import '../entities/app_settings.dart';
import '../repositories/settings_repository.dart';
/// Use case to get app settings
class GetSettings {
final SettingsRepository repository;
GetSettings(this.repository);
Future<Either<Failure, AppSettings>> call() async {
return await repository.getSettings();
}
}

View File

@@ -0,0 +1,15 @@
import 'package:dartz/dartz.dart';
import '../../../../core/errors/failures.dart';
import '../entities/app_settings.dart';
import '../repositories/settings_repository.dart';
/// Use case to update app settings
class UpdateSettings {
final SettingsRepository repository;
UpdateSettings(this.repository);
Future<Either<Failure, void>> call(AppSettings settings) async {
return await repository.updateSettings(settings);
}
}