使用flutter开发一个U盘文件管理APP,只解析图片文件

时间:2024-05-10 10:01:18

        今天教大家用flutter撸一个U盘文件管理APP,需求是这样的:

        当我在Android设备上插入U盘后,我能在APP中打开U盘的文件目录,并且能进入对应目录的下一级目录,如果下级目录下有图片文件,我就对这个图片文件进行解析,并展示出来。

        需求了解后,先上个效果图:

                                                    

          效果图看完后,我讲解一下实现思路,首先我们先通过As观察一下,U盘插入设备后,U盘的路径在哪里?请看下图:

  

按照上图的指示,我们知道了U盘具体的路径在哪里了,这个路径很重要,因为U盘的名字是不定的,但是基本上路径不会变化,那么我们就有了一个思路——如果我每次打开应用的时候,我先去遍历Storage文件目录,如果除了emulated和self文件外,还有别的文件,是不是意味着这个别的文件就是我们的U盘文件?然后我们按照这个思路,写了一个通过路径去遍历文件目录的工具类,如下:


import 'dart:io';

import 'package:flutter/cupertino.dart';

class UsbFileManagerUtils{

  //读取SDK中图片、视频文件的路径(异步读取)
  static getDirectoryPath(rootName) async {
    // print('读取SD卡');
    //'sdcard/Android/data'没有权限读取 排除它
    List<String> list = [];
    try {
      var systemTempDir = Directory(rootName);
      Stream<FileSystemEntity> dirsFileList =
      systemTempDir.list(recursive: false, followLinks: false);

      //一级目录,排除sdcard/Android
      await for (FileSystemEntity entity in dirsFileList) {
        final path = entity.path;
        list.add(path);
      }
    } catch (e) {
      debugPrint('e===$e');
      return list;
    }
    return list;
  }

}

记得添加对应的权限,为了方便大家不会出错,大家可以跟着我的指示图去操作

这些添加好了后,我们就可以写具体实现逻辑了,首先是首页,就一个按钮,点击后进入我们的文件管理系统界面,代码如下:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:homjay_test/UsbFileManagerP