[flutter] 리버포드를 이용한 플러터 앱의 파일 다운로드 기능 구현

리버포드(Riverpod)를 사용하여 플러터(Flutter) 앱에서 파일 다운로드 기능을 구현하는 방법을 알아보겠습니다.

1. 플러터 앱에 리버포드 의존성 추가

먼저, pubspec.yaml 파일에 다음과 같이 리버포드 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  riverpod: ^1.0.3

의존성을 추가한 후에는 터미널에서 다음 명령을 실행하여 패키지를 업데이트합니다.

flutter pub get

2. 파일 다운로드 기능을 위한 Provider 설정

리버포드를 사용하여 파일 다운로드 기능을 관리하기 위해, 파일 관련 상태 및 동작을 정의하는 Provider를 설정합니다.

import 'package:flutter_riverpod/flutter_riverpod.dart';

final fileUrlProvider = StateProvider<String>((ref) {
  return ''; // 파일의 URL을 초기값으로 설정
});

final downloadProgressProvider = StateProvider<double>((ref) {
  return 0.0; // 파일 다운로드 진행률을 0.0으로 초기값으로 설정
});

final downloadFileProvider = FutureProvider.autoDispose<void>((ref) async {
  // 파일 다운로드 동작을 처리하는 비동기 함수 정의
  final url = ref.watch(fileUrlProvider).state;
  // 파일을 HTTP 등을 통해 다운로드하고, 다운로드 진행률을 업데이트함
});

위의 코드에서 fileUrlProvider는 다운로드할 파일의 URL을 저장하고, downloadProgressProvider는 다운로드 진행률을 저장합니다. downloadFileProvider는 파일을 다운로드하는 비동기 함수를 정의합니다.

3. UI 구성 및 Provider 사용

다음으로, 파일 다운로드 기능을 제공하는 화면을 구성하고, 위에서 설정한 Provider를 사용하여 파일 다운로드 기능을 구현합니다.

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

class DownloadScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('파일 다운로드'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                context.read(downloadFileProvider);
              },
              child: Text('다운로드 시작'),
            ),
            Consumer(
              builder: (context, watch, child) {
                final progress = watch(downloadProgressProvider).state;
                return Text('다운로드 진행률: ${(progress * 100).toStringAsFixed(2)}%');
              },
            ),
          ],
        ),
      ),
    );
  }
}

위의 코드에서는 downloadFileProvider를 호출하여 파일 다운로드를 시작하고, downloadProgressProvider를 사용하여 다운로드 진행률을 화면에 표시합니다.

이제, 리버포드를 사용하여 플러터 앱에 파일 다운로드 기능을 구현하는 방법에 대해 알아보았습니다.

참고 자료