如何解决Flutter:无法从ChangeNotifier获取文件
我正在努力学习提供者。但是我面临一个问题。我想从 ChangeNotifier 获得File _image
,但它向我显示错误。
这里是ChangeNotifierProvider
class ImagePicker extends ChangeNotifier {
File _image;
final picker = ImagePicker();
Future getImage({ImageSource source}) async {
final pickedFile = await picker.getImage(source: ImageSource.gallery);
if (pickedFile != null) {
_image = File(pickedFile.path);
} else {
print('No image selected.');
}
notifyListeners();
}
}
这是HomeScreen,我要获取该_image文件。
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Hello"),),body: Container(
child: Column(
children: [
Text("Select a image"),Image.file(Provider.of<ImagePicker>(context)._image),IconButton(
icon: Icon(Icons.camera),onPressed: () {
Provider.of<ImagePicker>(context).getImage();
})
],);
}
}
向我显示-未为类型“ ImagePicker”定义吸气剂“ _image”。 尝试导入定义“ _image”的库,将名称更正为现有吸气剂的名称,或者定义一个名为“ _image”的吸气剂或字段。
请帮助我修复此错误。并解释发生了什么。
解决方法
哦,我解决了将_image更改为image的问题。 谢谢@ikerfah
,因此,如注释中所述,下划线前缀的任何变量表示此变量是私有的。因此,您有两种解决方案:
- 从
_image
删除下划线,可以从类外部访问该变量。 - 定义返回
_image
值的吸气剂。
将_image变量更改为File image,因为_image表示是私有变量。 像这样:
class ImagePicker extends ChangeNotifier {
File image;
final picker = ImagePicker();
Future getImage({ImageSource source}) async {
final pickedFile = await picker.getImage(source: ImageSource.gallery);
if (pickedFile != null) {
this.image = File(pickedFile.path);
} else {
print('No image selected.');
}
notifyListeners();
}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。