我正在开发一个应用程序,我的应用程序的用户必须将图像上传到Firebase Storage,为此,图像必须为File格式。
部分图像来自网络,也就是说,它们是通过Image.network()
方法获得的。另一部分来自手机图库,通过ImagePicker
软件包获得。
即使来自不同的来源,所有图像都被分组在List<Image>
中。现在,我需要将此图像列表上传到存储,但为此我需要将它们转换为文件,我不知道如何做到这一点,有人能帮忙吗?
首先你应该将图像从网络url保存到文件中,最好像这个
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
Future<File> _fileFromImageUrl() async {
final response = await http.get('https://example.com/abc.jpg');
final documentDirectory = await getApplicationDocumentsDirectory();
final file = File(join(documentDirectory.path, 'imagetest.png'));
file.writeAsBytesSync(response.bodyBytes);
return file;
}
之后,将其添加到您的图像列表中,并从图像选择器中获取图像。https://pub.dev/packages/image_picker
import 'package:image_picker/image_picker.dart';
final ImagePicker _picker = ImagePicker();
final XFile? image = await _picker.pickImage(source:ImageSource.gallery);
您可以按照以下方式下载图像并保存文件。
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
Future<File> _fileFromImageUrl() async {
final response = await http.get('https://example.com/xyz.jpg');
final documentDirectory = await getApplicationDocumentsDirectory();
final file = File(join(documentDirectory.path, 'imagetest.png'));
file.writeAsBytesSync(response.bodyBytes);
return file;
}