flutter 폴더에서 File List 가져오기. 안드로이드.

* 안드로이드에서 파일 목록을 가져오는 방법.

  - 안드로이드의 파일 관련 권한과 Storage Access Framework (SAF) 때문에 기본 API가 동작하지 않습니다. 그래서 아래 라이브러리를 사용 했습니다.
  - 안드로이드 13(sdk 33)에서는 Uri 형태로 폴더를 넘기고 파일을 받아야 접근이 됩니다. 
Uri 예) content://com.android.externalstorage.documents/tree/primary


https://pub.dev/packages/shared_storage


 
// 폴더 선택 방법.
final Uri? dirUri = await openDocumentTree();

// 파일 리스트 함수 사용.
  var audioList = await getFileList(dirUri, ".(mp3|wav)");

  Future<List<DocumentFile>> getFileList(String audioPath, String regex) async {
    const List<DocumentFileColumn> columns = <DocumentFileColumn>[
      DocumentFileColumn.displayName,
      DocumentFileColumn.id,
      DocumentFileColumn.mimeType,
    ];

    final List<DocumentFile> files = [];
    final Uri audioPathUri = Uri.parse(audioPath);
    final Stream<DocumentFile> onFileLoaded = listFiles(audioPathUri, columns: columns);

    final regExp = RegExp(regex, caseSensitive: false);
    var completer = Completer<List<DocumentFile>>();

    onFileLoaded.listen((file) {
      if (false == file.isFile) {
        return;
      }
      if (null != file.name && file.name!.isNotEmpty && regExp.hasMatch(file.name!)) {
        files.add(file);
      }
    }, onDone: () => completer.complete(files));

    return completer.future;
  }


댓글

이 블로그의 인기 게시물

파이썬 vscode에서 자동 코드 정렬. Formatter.

Unity3D git 저장소에 올릴때 필요없는 파일 제외하기. gitignore

플러터(flutter) 개발 참고 사이트들.