[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 작업을 처리하는데 도움이 되길 바랍니다.