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:
Yuriy Panov
2026-02-04 15:28:59 +06:00
parent 310463e89a
commit 2f97873095
46 changed files with 270 additions and 260 deletions

View File

@@ -0,0 +1,40 @@
import 'package:flutter_bloc/flutter_bloc.dart';
import 'scanner_event.dart';
import 'scanner_state.dart';
class ScannerBloc extends Bloc<ScannerEvent, ScannerState> {
ScannerBloc() : super(ScannerState.initial()) {
on<StartScanning>(_onStartScanning);
on<StopScanning>(_onStopScanning);
on<BookDetected>(_onBookDetected);
on<ClearDetectedBook>(_onClearDetectedBook);
}
void _onStartScanning(StartScanning event, Emitter<ScannerState> emit) {
emit(state.copyWith(
isScanning: true,
isProcessing: false,
errorMessage: null,
));
}
void _onStopScanning(StopScanning event, Emitter<ScannerState> emit) {
emit(state.copyWith(isScanning: false));
}
void _onBookDetected(BookDetected event, Emitter<ScannerState> emit) {
emit(state.copyWith(
detectedBookData: event.bookData,
isProcessing: true,
isScanning: false,
));
}
void _onClearDetectedBook(ClearDetectedBook event, Emitter<ScannerState> emit) {
emit(state.copyWith(
isScanning: false,
clearDetectedBookData: true,
isProcessing: false,
));
}
}

View File

@@ -0,0 +1,20 @@
abstract class ScannerEvent {
const ScannerEvent();
}
class StartScanning extends ScannerEvent {
const StartScanning();
}
class StopScanning extends ScannerEvent {
const StopScanning();
}
class BookDetected extends ScannerEvent {
final Map<String, dynamic> bookData;
const BookDetected(this.bookData);
}
class ClearDetectedBook extends ScannerEvent {
const ClearDetectedBook();
}

View File

@@ -0,0 +1,42 @@
import 'package:equatable/equatable.dart';
class ScannerState extends Equatable {
final bool isScanning;
final bool isProcessing;
final Map<String, dynamic>? detectedBookData;
final String? errorMessage;
const ScannerState({
this.isScanning = false,
this.isProcessing = false,
this.detectedBookData,
this.errorMessage,
});
factory ScannerState.initial() {
return const ScannerState();
}
ScannerState copyWith({
bool? isScanning,
bool? isProcessing,
Map<String, dynamic>? detectedBookData,
String? errorMessage,
bool clearDetectedBookData = false,
}) {
return ScannerState(
isScanning: isScanning ?? this.isScanning,
isProcessing: isProcessing ?? this.isProcessing,
detectedBookData: clearDetectedBookData ? null : (detectedBookData ?? this.detectedBookData),
errorMessage: errorMessage ?? this.errorMessage,
);
}
@override
List<Object?> get props => [
isScanning,
isProcessing,
detectedBookData,
errorMessage,
];
}