92 lines
2.7 KiB
Dart
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);
|
|
}
|
|
}
|