Flutter: selecciona y abre archivos desde el almacenamiento

A veces, en una aplicación, necesitamos elegir y abrir un archivo del almacenamiento del teléfono; en este artículo, lograremos lo mismo usando los paquetes file_picker y open_file flutter.

1. Crea una aplicación:

Cree una nueva aplicación flutter ejecutando el siguiente comando en su terminal:

flutter create your_app_name

Ahora abra su proyecto flutter en cualquier IDE como Android-Studio o VS-Code.

2. Cree una interfaz de usuario básica:

Ahora elimine todo el código repetitivo de lib/main.dart y agregue código para su interfaz de usuario. Para demostración, tengo un Botón de material centrado.

Dart

import 'package:flutter/material.dart';
  
void main() {
  runApp(MyApp());
}
  
class MyApp extends StatelessWidget {
    
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        backgroundColor: Colors.green[100],
        body: Center(
          child: MaterialButton(
            onPressed: () {},
            child: Text(
              'Pick and open file',
              style: TextStyle(color: Colors.white),
            ),
            color: Colors.green,
          ),
        ),
      ),
    );
  }
}

Producción:

3. Ahora agregue los paquetes:

Ejecute el siguiente comando en la terminal para agregar el paquete file_picker :

flutter pub add file_picker

y para agregar el paquete open_file , ejecute este comando:

flutter pub add open_file

4. Importar los paquetes:

Para usar los paquetes file_picker y open_file , impórtelos agregando la siguiente línea en su lib/main.dart :

Dart

import 'package:file_picker/file_picker.dart';
import 'package:open_file/open_file.dart';

5. Cree una función para seleccionar archivos del almacenamiento:

Dart

void _pickFile() async {
    // opens storage to pick files and the picked file or files
    // are assigned into result and if no file is chosen result is null.
    // you can also toggle "allowMultiple" true or false depending on your need
    final result = await FilePicker.platform.pickFiles(allowMultiple: false);
  
    // if no file is picked
    if (result == null) return;
  
    // we will log the name, size and path of the
    // first picked file (if multiple are selected)
    print(result.files.first.name);
    print(result.files.first.size);
    print(result.files.first.path);
  }

En la función _pickFile , estamos usando el objeto FilePicker del paquete pick_files para seleccionar el archivo y luego esperamos y los datos de tipo FilePickerResult que se devuelven se guardan en la variable de resultado y, si no se selecciona ningún archivo, a la variable de resultado se le asigna un valor nulo . valor. También puede alternar allowMultiple verdadero o falso dependiendo de si desea elegir archivos únicos o múltiples. Después de eso, si el resultado es nulo o no se selecciona ningún archivo, finalizamos la función. Si se seleccionan los archivos, simplemente registramos el nombre , el tamaño y la ruta del primer archivo.

Luego, para poner las cosas en marcha, llamamos a la función _pickFIle en la devolución de llamada onPressed del botón de material. Después de todo, nuestro lib/main.dart se ve así:

Dart

import 'package:file_picker/file_picker.dart';
import 'package:open_file/open_file.dart';
import 'package:flutter/material.dart';
  
void main() {
  runApp(MyApp());
}
  
class MyApp extends StatelessWidget {
  void _pickFile() async {
      
    // opens storage to pick files and the picked file or files
    // are assigned into result and if no file is chosen result is null.
    // you can also toggle "allowMultiple" true or false depending on your need
    final result = await FilePicker.platform.pickFiles(allowMultiple: false);
  
    // if no file is picked
    if (result == null) return;
  
    // we will log the name, size and path of the
    // first picked file (if multiple are selected)
    print(result.files.first.name);
    print(result.files.first.size);
    print(result.files.first.path);
  }
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        backgroundColor: Colors.green[100],
        body: Center(
          child: MaterialButton(
            onPressed: () {
              _pickFile();
            },
            child: Text(
              'Pick and open file',
              style: TextStyle(color: Colors.white),
            ),
            color: Colors.green,
          ),
        ),
      ),
    );
  }
}

Producción:

6. Cree una función para abrir el archivo seleccionado:

Ahora que tenemos la funcionalidad para seleccionar archivos del almacenamiento, pasemos a abrir los archivos seleccionados en aplicaciones nativas. Para ello creamos una función llamada _openFile que toma un parámetro de tipo PlatformFile y abre ese archivo:

Dart

void _openFile(PlatformFile file) {
    OpenFile.open(file.path);
  }

Ahora, en la función _pickFile en lugar de registrar el nombre del archivo elegido, llamemos a la función _openFile y pasemos el primer archivo del objeto de resultado .

Dart

void _pickFile() async {
    // opens storage to pick files and the picked file or files
    // are assigned into result and if no file is chosen result is null.
    // you can also toggle "allowMultiple" true or false depending on your need
    final result = await FilePicker.platform.pickFiles(allowMultiple: true);
  
    // if no file is picked
    if (result == null) return;
  
    // we get the file from result object
    final file = result.files.first;
  
    _openFile(file);
  }

Ahora, después de todo esto, nuestro lib/main.dart se ve así:

Dart

import 'package:file_picker/file_picker.dart';
import 'package:open_file/open_file.dart';
import 'package:flutter/material.dart';
  
void main() {
  runApp(MyApp());
}
  
class MyApp extends StatelessWidget {
  void _pickFile() async {
      
    // opens storage to pick files and the picked file or files
    // are assigned into result and if no file is chosen result is null.
    // you can also toggle "allowMultiple" true or false depending on your need
    final result = await FilePicker.platform.pickFiles(allowMultiple: true);
  
    // if no file is picked
    if (result == null) return;
  
    // we get the file from result object
    final file = result.files.first;
  
    _openFile(file);
  }
  
  void _openFile(PlatformFile file) {
    OpenFile.open(file.path);
  }
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        backgroundColor: Colors.green[100],
        body: Center(
          child: MaterialButton(
            onPressed: () {
              _pickFile();
            },
            child: Text(
              'Pick and open file',
              style: TextStyle(color: Colors.white),
            ),
            color: Colors.green,
          ),
        ),
      ),
    );
  }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por curiousyuvi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *