flutter - 提供者图像选择器
问题描述
从库中选择图像时,提供程序出现问题,它没有出现在 UI 中。
我尝试改用 Text ,它确实工作得很好。我认为问题出在futureBuilder之类的
class ImageController extends ChangeNotifier {
Future<File> _image;
pickImageFromGallery(ImageSource source) {
_image = ImagePicker.pickImage(source: source);
NotificationListener();
}
Widget imageFromGallery() {
return FutureBuilder<File>(
future: _image,
builder: (BuildContext context, AsyncSnapshot<File> snapshot) {
if (snapshot.connectionState == ConnectionState.done &&
null != snapshot.data) {
Utility.saveImageToPreferences(
Utility.base64String(snapshot.data.readAsBytesSync()));
return
Image.file(
snapshot.data,
);
} else if (null != snapshot.error) {
return const Text(
'Error Picking Image',
textAlign: TextAlign.center,
);
} else {
return const Text(
'No Image Selected',
textAlign: TextAlign.center,
);
}
},
);
}
}
这就是我从另一个widgit显示它的方式
Consumer<ImageController>(
builder: (context, image,child){
return Provider.of<ImageController>(context).imageFromGallery();
},
),
解决方案
消费者已经检索到ImageController
. 是使用构建器返回小部件的Consumer
一种更好的编写方式。Provider.of
Consumer<ImageController>(
builder: (context, imageController, child){
return imageController.imageFromGallery();
},
),
推荐阅读
- c - CPU 使用率 C Packed struct vs Unsigned Long Long 操作
- vb.net - 从 MySQL 创建的数据表中将日期添加到 datagridview 作为 dd-MM-yyyy
- request - 在 PDP 端搜索 xacml 策略的最佳实践?
- c# - 构造函数中具有参数的 autfac 注入服务
- docker - 如何在带有单声道的 Docker 容器中安装 MS Office?
- c# - 访问字典
- python - 具有总和编辑轴限制的堆叠条形图 - python
- laravel - 使用 Laravel/VueJS 向 CKEditor 5 添加字体选项
- spring - 如何在 JobExecutionListener 中自动装配服务?
- swift - 为什么我的 swift 应用程序在 AVAsset 中“泄漏”内存