FileFetcherSnippet

このコードはファイルを特定のディレクトリから取得するものである。

import 'dart:io';
 
class FileFetcher{
  Future<List<String>> get nameList async => await _getNameList();
  Future<List<String>> get pathList async => await _getPathList();
 
  final _trimFileStr = FileStrTrimer();
 
  final String androidDirName = "/storage/emulated/0/Download/";
 
  FileFetcher(){
    _initFileFetcher();
  }
 
  Future<List> _initFileFetcher() async {
    return await _fetchFileFromDownloadDir();
  }
 
  Future<List<String>> _getNameList() async {
    final list = await _initFileFetcher();
    return _trimFileStr.convertFileNameToNameString(list);
  }
 
  Future<List<String>> _getPathList() async {
    final list = await _initFileFetcher();
    return _trimFileStr.convertFileNameToPathString(list);
  }
 
  ///このメソッドは外部ストレージのオブジェクトを取得するメソッドです。
  Future<Directory> _fetchExternalDir() async {
    Directory? directory = Directory("");
 
    if(Platform.isWindows){
      //todo
      directory = Directory("");
    }
    else if(Platform.isAndroid){
      directory = Directory(androidDirName);
    }
    else if(Platform.isIOS){
      //todo
    }
    else{
      //ファイル処理が失敗した際の処理
      //例:showWarnDialog
    }
 
    return directory;
  }
 
  ///このメソッドは外部ストレージのdownloadディレクトリ内のファイルを取得するメソッドです。
  Future<List<FileSystemEntity>> _fetchFileFromDownloadDir() async {
    Directory dir = await _fetchExternalDir();
 
    List<FileSystemEntity> result = dir.listSync();
 
    return result;
  }
}
 
class FileStrTrimer{
  List<String> convertFileNameToNameString(List listArg){
    List<String> strList = convertFileNameToString(listArg);
    List<String> result = [];
 
    for(var i = 0; i < strList.length; i++){
      result.add(
        strList[i]
          .replaceAll("File: '/storage/emulated/0/Download/", "")
          .replaceAll("Directory: '/storage/emulated/0/Download/", "")
          .replaceAll("'", "")
      );
    }
 
    return result;
  }
 
  List<String> convertFileNameToString(List listArg){
    List<String> result = [];
 
    for(var i = 0; i < listArg.length; i++){
      if(listArg[i].toString().contains(".trashed-") || listArg[i].toString().contains("Nearby Share")) continue;
      result.add(listArg[i].toString());
    }
 
    return result;
  }
 
  List<String> convertFileNameToPathString(List listArg){
    List<String> strList = convertFileNameToString(listArg);
    List<String> result = [];
 
    for(var i = 0; i < strList.length; i++){
      result.add(
        strList[i]
          .replaceAll("File: '", "")
          .replaceAll("Directory: '", "")
          .replaceAll("'", "")
      );
    }
 
    return result;
  }
}