0

我正在尝试在颤振中学习提供者。但我面临一个问题。我想File _imageChangeNotifier获取,但它显示错误。

这是 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 文件的 HomeScreen。

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”的库,将名称更正为现有 getter 的名称,或定义名为“_image”的 getter 或字段。

请帮助我解决此错误。并解释发生了什么。

4

3 回答 3

1

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

  1. 删除下划线,_image变量将可以从类外部访问。
  2. 定义返回_image值的 getter。
于 2020-11-03T14:06:53.710 回答
1

将 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();
}}
于 2020-11-03T14:10:08.573 回答
0

哦,我解决了这个将 _image 更改为 image 的问题。谢谢@ikerfah

于 2020-11-03T14:05:00.427 回答