[flutter] 플러터에서 bloc 패턴을 사용하여 파일 I/O 처리하기

플러터(Flutter) 앱을 개발하다보면 파일 I/O 기능이 필요한 경우가 많습니다. 이러한 경우에는 bloc 패턴을 활용하여 깔끔하고 확장 가능한 코드를 작성할 수 있습니다. 이번 블로그 포스트에서는 플러터에서 bloc 패턴을 사용하여 파일 I/O를 어떻게 처리하는지 알아보겠습니다.

파일 I/O 처리를 위한 Bloc 패턴 소개

Bloc 패턴은 비즈니스 로직과 UI를 분리하여 코드를 확장 가능하고 유지 보수하기 쉽도록 도와주는 디자인 패턴입니다. 파일 I/O와 같은 비동기 작업을 처리할 때 bloc 패턴을 통해 데이터 흐름을 관리할 수 있습니다.

Bloc 및 Repository 클래스 생성

우선, 파일 I/O 작업을 처리할 때 사용할 Bloc 클래스를 만들어야 합니다. 이 Bloc 클래스는 파일을 읽고 쓰는 등의 비즈니스 로직을 담당합니다. 또한, 실제 파일 I/O 작업을 수행하는 Repository 클래스도 함께 만들어야 합니다.

class FileBloc {
  final fileRepository = FileRepository();

  // 파일 읽기 작업을 호출하는 메서드
  Future<String> readFile(String path) {
    return fileRepository.readFile(path);
  }

  // 파일 쓰기 작업을 호출하는 메서드
  Future<void> writeFile(String path, String content) {
    return fileRepository.writeFile(path, content);
  }
}

class FileRepository {
  // 파일을 읽어오는 메서드
  Future<String> readFile(String path) async {
    // 파일 읽기 로직 작성
  }

  // 파일에 쓰는 메서드
  Future<void> writeFile(String path, String content) async {
    // 파일 쓰기 로직 작성
  }
}

Bloc Provider 설정

Bloc 클래스를 위젯 트리에 주입하기 위해 Bloc Provider를 설정해야 합니다. Bloc Provider는 Bloc 인스턴스를 제공하여 위젯 트리의 어디서든 접근할 수 있도록 합니다.

void main() {
  runApp(
    BlocProvider(
      create: (context) => FileBloc(),
      child: MyApp(),
    ),
  );
}

파일 I/O 처리하기

이제 위에서 작성한 FileBloc 클래스를 사용하여 파일 I/O 작업을 수행할 수 있습니다. 파일을 읽거나 쓸 때마다 FileBloc의 메서드를 호출하여 비즈니스 로직을 처리합니다.

class MyFileScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final fileBloc = BlocProvider.of<FileBloc>(context);

    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            RaisedButton(
              onPressed: () {
                fileBloc.readFile('example.txt').then((content) {
                  // 읽어온 파일 내용 처리
                });
              },
              child: Text('파일 읽기'),
            ),
            RaisedButton(
              onPressed: () {
                fileBloc.writeFile('example.txt', '파일에 쓸 내용').then((_) {
                  // 파일 쓰기 완료 후 처리
                });
              },
              child: Text('파일 쓰기'),
            ),
          ],
        ),
      ),
    );
  }
}

결론

플러터 앱에서 파일 I/O 작업을 처리할 때는 bloc 패턴을 활용하면 깔끔하고 확장 가능한 코드를 작성할 수 있습니다. 위에서 살펴본 예제를 참고하여 파일 I/O 작업을 처리하는데 도움이 되길 바랍니다.

참고 자료