Flutter使用image_picker时XFile调用copy方法提示未定义如何解决
错误原因
image_picker v0.8.0及以上版本中,pickImage方法返回的是XFile类型对象,该类型属于image_picker库封装的跨平台文件类型,没有内置copy方法。只有dart:io库提供的原生File类型才支持copy方法。
修复方案
你代码中已经实现了XFile转File的逻辑,只需调整最后一行拷贝逻辑的调用对象即可,同时补充空安全判断避免空异常,修改后的完整代码如下:
import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:path/path.dart' as path; import 'package:path_provider/path_provider.dart' as syspaths; import 'dart:io'; class ImageInput extends StatefulWidget { @override _ImageInputState createState() => _ImageInputState(); } class _ImageInputState extends State<ImageInput> { File? _storedImage; Future<void> _takePicture() async { final picker = ImagePicker(); final XFile? imageFile = await picker.pickImage( source: ImageSource.camera, maxWidth: 600, ); // 补充空判断,用户取消拍照时直接返回 if (imageFile == null) return; final convertedFile = File(imageFile.path); setState(() { _storedImage = convertedFile; }); final appDir = await syspaths.getApplicationDocumentsDirectory(); final fileName = path.basename(imageFile.path); // 用转换后的File对象调用copy方法 final savedImage = await convertedFile.copy('${appDir.path}/$fileName'); } }
补充说明
如果不想提前转File,也可以使用XFile自带的readAsBytes方法读取文件流,再手动写入到目标路径,效果和copy完全一致。
内容的提问来源于stack exchange,提问作者devfoz
相关产品推荐
相关产品推荐

