如何解决从图库中选取的 Flutter 显示图像
我只是想选择一个图像并将其显示在我的应用程序中。为此,我正在使用 Flutter Image Picker。我添加了所有依赖项,可以选择图像,但无法显示...
这是我试过的:
class _AddMemoryPageState extends State<AddMemoryPage> {
final picker = ImagePicker();
late Future<PickedFile?> pickedFile;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.secondary,body: SafeArea(
child: Column(
children: [
Row(
children: [
Padding(
padding: EdgeInsets.only(
top: 15,left: 25,),child: IconButtonWithExpandedTouchTarget(
onTapped: () {
Navigator.pop(context);
},svgPath: 'assets/icons/down.svg',],Row(
mainAxisAlignment: MainAxisAlignment.center,children: [
IconButtonWithExpandedTouchTarget(
onTapped: () async {
pickedFile = picker
.getImage(
source: ImageSource.camera,)
.whenComplete(() => {setState(() {})});
},svgPath: 'assets/icons/camera.svg',SizedBox(
width: scaleWidth(50),IconButtonWithExpandedTouchTarget(
onTapped: () async {
pickedFile = picker
.getImage(
source: ImageSource.gallery,svgPath: 'assets/icons/gallery.svg',FutureBuilder(
future: pickedFile,builder: (context,data) {
if (data.hasData) {
return Container(
height: 200.0,child: Image.file(
data.data as File,fit: BoxFit.contain,height: 200.0,color: Colors.blue,);
}
return Container(
height: 200.0,);
},);
}
}
但是这是行不通的:
LateInitializationError:字段“pickedFile”尚未初始化。
我在这里错过了什么?处理这个问题的正确方法是什么?我找不到任何关于此的最新教程/文档。如果您需要更多信息,请告诉我!
解决方法
您基本上忘记在 File 中转换 de PickerFile 并初始化变量pickerFile late Future<PickedFile?> pickedFile = Future.value(null);
。
要转换文件中的 PickerFile,您只需要执行以下操作:
File(data.data!.path)
我对你的代码做了一些修改,现在可以显示图像了:
final picker = ImagePicker();
late Future<PickedFile?> pickedFile = Future.value(null);
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blueGrey,body: SafeArea(
child: Column(
children: [
Row(
children: [
Padding(
padding: EdgeInsets.only(
top: 15,left: 25,),child: IconButton(
onPressed: () {
Navigator.pop(context);
},icon: Icon(Icons.download_rounded),],Row(
mainAxisAlignment: MainAxisAlignment.center,children: [
IconButton(
onPressed: () async {
pickedFile = picker.getImage(source: ImageSource.camera).whenComplete(() => {setState(() {})});
},icon:Icon(Icons.add)
),SizedBox(
width: 100,IconButton(
onPressed: () async {
pickedFile = picker
.getImage(
source: ImageSource.gallery,)
.whenComplete(() => {setState(() {})});
},icon:Icon(Icons.photo_camera_back),FutureBuilder<PickedFile?>(
future: pickedFile,builder: (context,snap) {
if (snap.hasData) {
return Container(
child: Image.file(
File(snap.data!.path),fit: BoxFit.contain,color: Colors.blue,);
}
return Container(
height: 200.0,);
},);
}
,
您可以尝试在 setState 中初始化 'pickedFile' 吗?并且
PickedFile 类型不是文件类型,因此将其转换为“Image.file(data.data.path)”,如 image_picker 文档 final pickedFile = await _picker.getImage(...); final File file = File(pickedFile.path);
中所述。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。