flutter - “ImagePickerCubit”不符合绑定的“BlocBase”' 类型参数 'B'
问题描述
我在尝试在我的应用程序中创建 BlocBuilder 时遇到错误:“'ImagePickerCubit' 不符合类型参数 'B' 的绑定 'BlocBase'。尝试使用是或是 'BlocBase 子类的类型’。”
我正在根据文档实现它,所以我不知道是什么导致了这个错误。
这是cubit,状态和小部件的代码:
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()}');
}
}
}
图像选择器状态:
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];
}
小部件:
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();
},
),
],
),
],
);
}
}
提前感谢您的帮助!
解决方案
只需将通用参数添加到您的 Cubit 中,例如:
class ImagePickerCubit extends Cubit<ImagePickerState> {
...
推荐阅读
- java - 如何在 XMLGregorianCalendar 中设置带区域的时间戳
- javascript - 为什么在迭代时创建条件检查变量是否为-1?
- java - java.lang.IllegalStateException:尝试在没有模型的组件上设置模型对象!将 IModel 传递给构造函数或
- javascript - 比较许多 javascript 值
- python - 如何使用标准
- excel - 如何比较同一工作簿但不同工作表中的两个命名范围?
- php - 从前端表单中选择新帖子的类别?
- javascript - 如何将现有函数添加到新的 createElement 元素
- html - 检查是否滚动窗口或通过jquery单击
- ios - Xcode Swift 在“应用程序目标”与“框架目标”中导入代码——有什么区别?