Files
BudgetApp/lib/logic/settings/settings_cubit.dart
T
2025-07-16 23:37:12 +03:00

92 lines
2.7 KiB
Dart

import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart';
import '../../data/repositories/interfaces/isettings_repository.dart';
import '../../models/app_settings.dart';
part 'settings_state.dart';
class SettingsCubit extends Cubit<SettingsState> {
final ISettingsRepository _settingsRepository;
SettingsCubit(this._settingsRepository) : super(SettingsInitial());
Future<void> loadSettings() async {
emit(SettingsLoading());
try {
final settings = await _settingsRepository.getSettings();
emit(SettingsLoaded(
isDarkMode: settings.isDarkMode,
languageCode: settings.languageCode,
defaultCurrency: settings.defaultCurrency,
autoCreateTransactionsFromSms: settings.autoCreateTransactionsFromSms,
));
} catch (e) {
emit(SettingsError(e.toString()));
}
}
Future<void> toggleDarkMode(bool value) async {
if (state is SettingsLoaded) {
try {
final currentState = state as SettingsLoaded;
final newState = currentState.copyWith(isDarkMode: value);
emit(newState);
await _saveSettings(newState);
} catch (e) {
emit(SettingsError(e.toString()));
}
}
}
Future<void> changeLanguage(String languageCode) async {
if (state is SettingsLoaded) {
try {
final currentState = state as SettingsLoaded;
final newState = currentState.copyWith(languageCode: languageCode);
emit(newState);
await _saveSettings(newState);
} catch (e) {
emit(SettingsError(e.toString()));
}
}
}
Future<void> changeCurrency(String currency) async {
if (state is SettingsLoaded) {
try {
final currentState = state as SettingsLoaded;
final newState = currentState.copyWith(defaultCurrency: currency);
emit(newState);
await _saveSettings(newState);
} catch (e) {
emit(SettingsError(e.toString()));
}
}
}
Future<void> toggleAutoCreateTransactions(bool value) async {
if (state is SettingsLoaded) {
try {
final currentState = state as SettingsLoaded;
final newState = currentState.copyWith(autoCreateTransactionsFromSms: value);
emit(newState);
await _saveSettings(newState);
} catch (e) {
emit(SettingsError(e.toString()));
}
}
}
Future<void> _saveSettings(SettingsLoaded settings) async {
final appSettings = AppSettings(
isDarkMode: settings.isDarkMode,
languageCode: settings.languageCode,
defaultCurrency: settings.defaultCurrency,
autoCreateTransactionsFromSms: settings.autoCreateTransactionsFromSms,
);
await _settingsRepository.saveSettings(appSettings);
}
}