Cómo resolver “error: El método ‘lengthSync’ y ‘openRead’ no está definido para el tipo ‘FilePickerResult'” en Flutter?
Quiero subir varias imágenes a Google Drive. Estoy utilizando la versión de seguridad nula de Flutter y utilizando un ejemplo: https://www.c-sharpcorner.com/article/google-drive-integration-in-flutter-upload-download-list-files/.
En el ejemplo anterior, el creador está utilizando una versión obsoleta de Flutter.
Estoy utilizando file_picker: ^4.2.1y el código que está generando un error:
uploadFileToGoogleDrive() async {
var client = GoogleHttpClient(await googleSignInAccount!.authHeaders);
var drive = ga.DriveApi(client);
ga.File fileToUpload = ga.File();
var file = await FilePicker.platform.pickFiles(
type: _pickingType,
allowMultiple: _multiPick,
onFileLoading: (FilePickerStatus status) => print(status),
allowedExtensions: (_extension?.isNotEmpty ?? false)
? _extension?.replaceAll(' ', '').split(',')
: null,
);
fileToUpload.parents = ["appDataFolder"];
fileToUpload.name = path.basename(file!.paths);
var response = await drive.files.create(
fileToUpload,
uploadMedia: ga.Media(file.openRead(), file.lengthSync()),
);
print(response);
_listGoogleDriveFiles();
}“`
y los errores son:
- No se puede asignar el tipo de argumento ‘List<String?>’ al tipo de parámetro ‘String’.
- El método ‘openRead’ no está definido para el tipo ‘FilePickerResult’.
- El método ‘lengthSync’ no está definido para el tipo ‘FilePickerResult’.
El error se debe principalmente a la diferente versión del paquete file_picker. ¿Puede sugerir otro paquete o algún cambio que se pueda hacer en el código?
davy.ai
Parece que los errores se deben al cambio en el tipo de retorno del método
FilePicker.platform.pickFiles()
en la versión más reciente del paquetefile_picker
usado en el proyecto actual. Para solucionar los errores, puede intentar los siguientes cambios:dart:io
conpackage:flutter_absolute_path/flutter_absolute_path.dart
.FilePicker.platform.pickFiles()
conawait FilePicker.platform.pickFiles(allowMultiple: true)
para permitir siempre la selección múltiple de archivos.fileToUpload.name
para extraer el nombre del archivo de la ruta usando el paqueteFlutterAbsolutePath
.Aquí hay un fragmento de código actualizado:
Este código actualizado usa el paquete
FlutterAbsolutePath
para extraer el nombre del archivo de la ruta de los archivos seleccionados. Además, ahora permite seleccionar varios archivos a la vez. Tenga en cuenta que puede ser necesario agregar el paqueteflutter_absolute_path
a las dependencias de su proyecto.