[flutter] 플러터에서 path_provider를 이용하여 디렉토리 목록 가져오기

플러터(Flutter) 앱에서 파일 시스템에 접근해야 할 때, path_provider 패키지는 매우 유용합니다. 이 패키지를 사용하여 디렉토리 목록을 가져오는 방법을 알아보겠습니다.

1. path_provider 패키지 추가하기

먼저, pubspec.yaml 파일에 path_provider 패키지를 추가해야 합니다. 아래와 같이 dependencies 섹션에 패키지를 추가하고, flutter pub get 명령어를 실행하여 패키지를 설치합니다.

dependencies:
  flutter:
  sdk: flutter
  path_provider: ^2.2.3

2. 디렉토리 목록 가져오기

path_provider 패키지를 사용하여 디렉토리 목록을 가져오려면, 다음과 같은 단계를 따르면 됩니다.

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'File System Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<Directory> directories = [];

  @override
  void initState() {
    super.initState();
    getDirectories();
  }

  Future<void> getDirectories() async {
    Directory appDirectory = await getApplicationDocumentsDirectory();
    List<FileSystemEntity> entities = appDirectory.listSync();
    List<Directory> dirs =
        entities.where((entity) => entity is Directory).toList();

    setState(() {
      directories = dirs;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Directory List'),
      ),
      body: ListView.builder(
        itemCount: directories.length,
        itemBuilder: (BuildContext context, int index) {
          Directory directory = directories[index];
          return ListTile(
            title: Text(directory.path),
          );
        },
      ),
    );
  }
}

이 예제 코드는 애플리케이션의 문서 디렉토리에서 디렉토리 목록을 가져와 리스트 형태로 화면에 표시합니다.

getDirectories() 메소드는 getApplicationDocumentsDirectory() 함수를 사용하여 애플리케이션의 문서 디렉토리를 얻습니다. 그리고 해당 디렉토리의 하위 항목들을 가져와 필터링하여 디렉토리 객체의 리스트를 생성합니다. 이후 상태를 업데이트하고 UI에 결과를 반영하기 위해 setState()를 호출합니다.

결론

위의 예제를 따라하면 플러터에서 path_provider를 사용하여 디렉토리 목록을 가져올 수 있습니다. 이를 통해 파일 시스템에 접근하여 앱의 기능을 더욱 확장시킬 수 있습니다.