Fix import paths and test issues
- Fixed test file import paths to point to correct Bloc file locations - Fixed Bloc file import paths for models (../../../models/models.dart) - Added explicit type annotations to resolve null safety warnings - Fixed null safety issues in wishlist_bloc_test.dart - All 70 tests now passing
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'settings_event.dart';
|
||||
import 'settings_state.dart';
|
||||
|
||||
class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
|
||||
SettingsBloc() : super(SettingsState.initial()) {
|
||||
on<LoadSettings>(_onLoadSettings);
|
||||
on<UpdateTheme>(_onUpdateTheme);
|
||||
on<UpdateLanguage>(_onUpdateLanguage);
|
||||
on<ToggleNotifications>(_onToggleNotifications);
|
||||
on<ClearData>(_onClearData);
|
||||
}
|
||||
|
||||
void _onLoadSettings(LoadSettings event, Emitter<SettingsState> emit) {
|
||||
emit(state.copyWith(
|
||||
isDarkMode: false,
|
||||
language: 'English',
|
||||
notificationsEnabled: true,
|
||||
isLoading: false,
|
||||
));
|
||||
}
|
||||
|
||||
void _onUpdateTheme(UpdateTheme event, Emitter<SettingsState> emit) {
|
||||
emit(state.copyWith(isDarkMode: event.isDarkMode));
|
||||
}
|
||||
|
||||
void _onUpdateLanguage(UpdateLanguage event, Emitter<SettingsState> emit) {
|
||||
emit(state.copyWith(language: event.language));
|
||||
}
|
||||
|
||||
void _onToggleNotifications(
|
||||
ToggleNotifications event, Emitter<SettingsState> emit) {
|
||||
emit(state.copyWith(notificationsEnabled: !state.notificationsEnabled));
|
||||
}
|
||||
|
||||
void _onClearData(ClearData event, Emitter<SettingsState> emit) {
|
||||
emit(state.copyWith(dataCleared: true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
abstract class SettingsEvent {
|
||||
const SettingsEvent();
|
||||
}
|
||||
|
||||
class LoadSettings extends SettingsEvent {
|
||||
const LoadSettings();
|
||||
}
|
||||
|
||||
class UpdateTheme extends SettingsEvent {
|
||||
final bool isDarkMode;
|
||||
const UpdateTheme(this.isDarkMode);
|
||||
}
|
||||
|
||||
class UpdateLanguage extends SettingsEvent {
|
||||
final String language;
|
||||
const UpdateLanguage(this.language);
|
||||
}
|
||||
|
||||
class ToggleNotifications extends SettingsEvent {
|
||||
const ToggleNotifications();
|
||||
}
|
||||
|
||||
class ClearData extends SettingsEvent {
|
||||
const ClearData();
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
class SettingsState extends Equatable {
|
||||
final bool isDarkMode;
|
||||
final String language;
|
||||
final bool notificationsEnabled;
|
||||
final bool dataCleared;
|
||||
final bool isLoading;
|
||||
final String? errorMessage;
|
||||
|
||||
const SettingsState({
|
||||
this.isDarkMode = false,
|
||||
this.language = 'English',
|
||||
this.notificationsEnabled = true,
|
||||
this.dataCleared = false,
|
||||
this.isLoading = false,
|
||||
this.errorMessage,
|
||||
});
|
||||
|
||||
factory SettingsState.initial() {
|
||||
return const SettingsState(
|
||||
isLoading: true,
|
||||
);
|
||||
}
|
||||
|
||||
SettingsState copyWith({
|
||||
bool? isDarkMode,
|
||||
String? language,
|
||||
bool? notificationsEnabled,
|
||||
bool? dataCleared,
|
||||
bool? isLoading,
|
||||
String? errorMessage,
|
||||
}) {
|
||||
return SettingsState(
|
||||
isDarkMode: isDarkMode ?? this.isDarkMode,
|
||||
language: language ?? this.language,
|
||||
notificationsEnabled: notificationsEnabled ?? this.notificationsEnabled,
|
||||
dataCleared: dataCleared ?? this.dataCleared,
|
||||
isLoading: isLoading ?? this.isLoading,
|
||||
errorMessage: errorMessage ?? this.errorMessage,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
isDarkMode,
|
||||
language,
|
||||
notificationsEnabled,
|
||||
dataCleared,
|
||||
isLoading,
|
||||
errorMessage,
|
||||
];
|
||||
}
|
||||
39
bookshelf_flutter/lib/features/settings/settings_screen.dart
Normal file
39
bookshelf_flutter/lib/features/settings/settings_screen.dart
Normal file
@@ -0,0 +1,39 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class SettingsScreen extends StatelessWidget {
|
||||
const SettingsScreen({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: const Color(0xFF112116),
|
||||
body: Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(40),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const Text(
|
||||
'Настройки',
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Персонализируйте ваше приложение.',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: const Color(0xFF93C8A5),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user