I'm getting an error trying to create a BlocBuilder in my app: "'ImagePickerCubit' doesn't conform to the bound 'BlocBase' of the type parameter 'B'. Try using a type that is or is a subclass of 'BlocBase'."
I'm implementing it according to documentation so I don't know what may caused this error.
Here is code of cubit, state and widgets:
ImagePickerCubit:
part 'image_picker_state.dart';
class ImagePickerCubit extends Cubit {
final ImagePickerRepository _imagePickerRepository;
ImagePickerCubit(this._imagePickerRepository)
: super(ImagePickerInitialize());
Future<void> takePhotoFromGallery() async {
XFile? image;
try {
image = await _imagePickerRepository.takePhotoFromGallery();
emit(ImagePickerSuccess(image));
} catch (e) {
emit(ImagePickerFailure('Error while picking image: ${e.toString()}'));
log('Error while picking image from gallery: ${e.toString()}');
}
}
Future<void> takePhotoFromCamera() async {
XFile? image;
try {
image = await _imagePickerRepository.takePhotoFromCamera();
emit(ImagePickerSuccess(image));
} catch (e) {
emit(ImagePickerFailure('Error while picking image: ${e.toString()}'));
log('Error while picking image from camera: ${e.toString()}');
}
}
}
ImagePickerState:
part of 'image_picker_cubit.dart';
class ImagePickerState extends Equatable {
@override
List<Object?> get props => [];
}
class ImagePickerInitialize extends ImagePickerState {}
class ImagePickerSuccess extends ImagePickerState {
final XFile? image;
ImagePickerSuccess(this.image);
@override
List<Object?> get props => [image];
}
class ImagePickerFailure extends ImagePickerState {
final String errorMessage;
ImagePickerFailure(this.errorMessage);
@override
List<Object?> get props => [errorMessage];
}
Widget:
class HomePageBuilder extends StatefulWidget {
const HomePageBuilder({
Key? key,
}) : super(key: key);
@override
State<HomePageBuilder> createState() => _HomePageBuilderState();
}
class _HomePageBuilderState extends State<HomePageBuilder> {
XFile? _image;
@override
Widget build(BuildContext context) {
ImagePickerCubit cubit =
ImagePickerCubit(RepositoryProvider.of<ImagePickerRepository>(context));
return Column(
children: <Widget>[
Expanded(
child: CircleAvatar(
radius: 75,
child: BlocBuilder<ImagePickerCubit, ImagePickerState>( //PROBLEM IS HERE
bloc: cubit,
builder: (BuildContext context,ImagePickerState state) {
if(state is ImagePickerInitialize){
return Container(
decoration: BoxDecoration(
color: Colors.grey[200],
borderRadius: BorderRadius.circular(70)),
width: 135,
height: 135,
child: Icon(
Icons.camera_alt,
color: Colors.grey[800],
),
);
}
if(state is ImagePickerSuccess){
_image = state.image;
return ClipRRect(
borderRadius: BorderRadius.circular(70),
child: Image.file(
File(_image!.path),
),
);
}
if(state is ImagePickerFailure){
return Text(state.errorMessage);
}
return const SizedBox();
},
),
),
),
Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
ListTile(
leading: const Icon(Icons.photo_library),
title: const Text('Pick photo from gallery'),
onTap: () {
Navigator.pop(context);
cubit.takePhotoFromGallery();
},
),
ListTile(
leading: const Icon(Icons.photo_camera),
title: const Text('Take photo from camera'),
onTap: () {
Navigator.pop(context);
cubit.takePhotoFromCamera();
},
),
],
),
],
);
}
}
Thanks in advance for help!