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

所以正如评论中所讨论的,任何变量下划线前缀都意味着这个变量是私有的。所以你有两个解决方案:

  1. _image 中删除下划线,变量将可以从 class 外部访问。
  2. 定义 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();
}}