import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:tunas/repositories/metadata/metadata_repository.dart'; import 'package:tunas/repositories/metadata/models/settings.dart'; part 'settings_event.dart'; part 'settings_state.dart'; class SettingsBloc extends Bloc { final MetadataRepository _metadataRepository; SettingsBloc({required MetadataRepository metadataRepository}) : _metadataRepository = metadataRepository, super(const SettingsState()) { on(_onSettingsLoad); on(_onSetThemeMode); _metadataRepository .getSettingsStream() .listen((settings) => add(SettingsLoad(settings))); } FutureOr _onSettingsLoad(SettingsLoad event, Emitter emit) { emit(state.copyWith( themeMode: event.settings.themeMode, )); } FutureOr _onSetThemeMode(SetThemeMode event, Emitter emit) { _metadataRepository.saveSettings(Settings(themeMode: event.themeMode)); emit(state.copyWith( themeMode: event.themeMode, )); } }