Flutter:无法从 ChangeNotifier 获取文件
Flutter: Can't get File from ChangeNotifier
我正在尝试学习 flutter 中的提供程序。但我面临一个问题。我想从 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();
}
}
这里是主屏幕,我想在其中获取 _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();
})
],
),
),
);
}
}
它向我显示 - getter '_image' 没有为类型 'ImagePicker' 定义。
尝试导入定义“_image”的库,将名称更正为现有 getter 的名称,或定义一个 getter 或名为“_image”的字段。
请帮我解决这个错误。并解释发生了什么。
哦,我解决了将 _image 更改为 image 的问题。
谢谢@ikerfah
所以正如评论中所讨论的,任何变量下划线前缀都意味着这个变量是私有的。所以你有两个解决方案:
- 从
_image
中删除下划线,变量将可以从 class 外部访问。
- 定义 getter return
_image
值。
将 File _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();
}}
我正在尝试学习 flutter 中的提供程序。但我面临一个问题。我想从 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();
}
}
这里是主屏幕,我想在其中获取 _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();
})
],
),
),
);
}
}
它向我显示 - getter '_image' 没有为类型 'ImagePicker' 定义。 尝试导入定义“_image”的库,将名称更正为现有 getter 的名称,或定义一个 getter 或名为“_image”的字段。
请帮我解决这个错误。并解释发生了什么。
哦,我解决了将 _image 更改为 image 的问题。 谢谢@ikerfah
所以正如评论中所讨论的,任何变量下划线前缀都意味着这个变量是私有的。所以你有两个解决方案:
- 从
_image
中删除下划线,变量将可以从 class 外部访问。 - 定义 getter return
_image
值。
将 File _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();
}}