我需要从图库中获取所有图像,而不使用image_picker或flutter中的其他包。我尝试使用image_picker.但事实证明,它不能使用.以及如何接收图像后显示所选图像的预览?
wwwo4jvm1#
您可以查看image_picker的底层工作方式,并检查其本机实现,以确定可以使用的本机方法。https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker关于如何在Flutter应用程序中运行本机代码,请参阅此页面(您也可以在不使用软件包的情况下运行本机代码):https://docs.flutter.dev/platform-integration/platform-channels问题是,为什么你不能使用软件包?它们应该很容易通过pub.dev包含,或者甚至作为pubspec.yaml中的本地依赖项(如果前者不起作用)。要显示预览,我知道image_picker会将文件复制到应用程序的临时目录(您可以使用getTemporaryDirectory()和path_provider获取),之后您可以在应用程序中显示Image.file作为预览。
image_picker
pubspec.yaml
getTemporaryDirectory()
Image.file
8ehkhllq2#
您可以在MediaStore中查询图像文件。如果您有READ_MEDIA_ICODE权限,您将获得设备上的所有文件。
wqlqzqxt3#
是的,你可以做到这一点。看看下面的代码段。1.首先,你应该使变量为File类型。
File
File? _imageFile;
字符串2.然后你应该做一个方法来选择image.like下面,
Future<void> _selectImageFromGallery() async { final picker = ImagePicker(); final pickedImage = await picker.pickImage(source: ImageSource.gallery); if (pickedImage != null) { setState(() { _imageFile = File(pickedImage.path); }); } }
型3.现在你可以访问像波纹管代码的图像。
Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Select Image from Gallery'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ _imageFile != null ? Image.file( _imageFile!, width: 200, height: 200, ) : Text('No image selected'), SizedBox(height: 20), ElevatedButton( onPressed: _selectImageFromGallery, child: Text('Select Image'), ), ], ), ), ); }
型
完整代码部分
class UploadImage extends StatefulWidget { const UploadImage({super.key}); @override State<UploadImage> createState() => _UploadImageState(); } class _UploadImageState extends State<UploadImage> { File? _imageFile; Future<void> _selectImageFromGallery() async { final picker = ImagePicker(); final pickedImage = await picker.pickImage(source: ImageSource.gallery); if (pickedImage != null) { setState(() { _imageFile = File(pickedImage.path); }); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Select Image from Gallery'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ _imageFile != null ? Image.file( _imageFile!, width: 200, height: 200, ) : Text('No image selected'), SizedBox(height: 20), ElevatedButton( onPressed: _selectImageFromGallery, child: Text('Select Image'), ), ], ), ), ); } }
1.在使用此方法之前,您应该添加一些软件包,
file_picker: ^5.5.0
型你可以用这个link得到它现在你可以像这样导入'package:file_picker/file_picker.dart';
'package:file_picker/file_picker.dart';
import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; class UploadImage extends StatefulWidget { const UploadImage({super.key}); @override State<UploadImage> createState() => _UploadImageState(); } class _UploadImageState extends State<UploadImage> { File? file; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Upload Image'), ), body: SingleChildScrollView( child: Center( child: Column( children: [ file != null ? Image.file(file!) : Image.asset('assets/images/defult.png'), TextButton( onPressed: () { pickFile(); }, child: const Text('Pick a file'), ), ], ), ), ), ); } pickFile() async { FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.image); if (result != null) { setState(() { file = File(result.files.single.path ?? ""); }); } }
型这样做,你现在可以解决你的问题。
3条答案
按热度按时间wwwo4jvm1#
您可以查看
image_picker
的底层工作方式,并检查其本机实现,以确定可以使用的本机方法。https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker
关于如何在Flutter应用程序中运行本机代码,请参阅此页面(您也可以在不使用软件包的情况下运行本机代码):https://docs.flutter.dev/platform-integration/platform-channels
问题是,为什么你不能使用软件包?它们应该很容易通过pub.dev包含,或者甚至作为
pubspec.yaml
中的本地依赖项(如果前者不起作用)。要显示预览,我知道
image_picker
会将文件复制到应用程序的临时目录(您可以使用getTemporaryDirectory()
和path_provider获取),之后您可以在应用程序中显示Image.file
作为预览。8ehkhllq2#
您可以在MediaStore中查询图像文件。
如果您有READ_MEDIA_ICODE权限,您将获得设备上的所有文件。
wqlqzqxt3#
是的,你可以做到这一点。看看下面的代码段。
1.首先,你应该使变量为
File
类型。字符串
2.然后你应该做一个方法来选择image.like下面,
型
3.现在你可以访问像波纹管代码的图像。
型
完整代码部分
型
1.在使用此方法之前,您应该添加一些软件包,
型
你可以用这个link得到它
现在你可以像这样导入
'package:file_picker/file_picker.dart';
型
这样做,你现在可以解决你的问题。