[flutter] Riverpod를 사용하여 앱의 사진 공유 기능을 관리하는 방법은 어떻게 되나요?

Riverpod는 Flutter 앱의 상태 관리를 간편하게 해주는 라이브러리입니다. 앱의 사진 공유 기능은 많은 상태를 관리해야하는데, Riverpod를 사용하면 효율적으로 상태를 관리할 수 있습니다.

먼저, Riverpod를 프로젝트에 추가해야합니다. pubspec.yaml 파일에 다음과 같이 추가합니다:

dependencies:
  flutter:
    sdk: flutter
  riverpod: ^1.0.0

그런 다음 main.dart 파일에서 FlutterRiverProvider를 사용하여 Riverpod를 초기화합니다:

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

void main() {
  runApp(ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

이제 앱에서 사용할 사진 상태를 정의해야합니다. 예를 들어, photos.dart라는 파일을 만들고 다음과 같이 작성할 수 있습니다:

import 'package:flutter_riverpod/flutter_riverpod.dart';

final photosProvider = StateNotifierProvider((ref) => PhotosNotifier());

class PhotosNotifier extends StateNotifier<List<String>> {
  PhotosNotifier() : super([]);

  void addPhoto(String photo) {
    state = [...state, photo];
  }

  void removePhoto(int index) {
    state = [...state]..removeAt(index);
  }
}

위 코드에서 PhotosNotifierStateNotifier를 상속하여 앱의 사진 상태를 관리합니다. addPhotoremovePhoto 메소드를 사용하여 사진을 추가하거나 제거할 수 있습니다.

이제 HomeScreen 위젯에서 photosProvider를 사용하여 상태를 관리할 수 있습니다:

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

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('사진 공유'),
      ),
      body: Column(
        children: [
          ElevatedButton(
            onPressed: () {
              final photosNotifier = context.read(photosProvider.notifier);
              photosNotifier.addPhoto('https://example.com/image.jpg');
            },
            child: Text('사진 추가'),
          ),
          Consumer(
            builder: (context, watch, child) {
              final photos = watch(photosProvider);

              return Expanded(
                child: ListView.builder(
                  itemCount: photos.length,
                  itemBuilder: (context, index) {
                    final photo = photos[index];

                    return ListTile(
                      title: Image.network(photo),
                      trailing: IconButton(
                        icon: Icon(Icons.delete),
                        onPressed: () {
                          final photosNotifier =
                              context.read(photosProvider.notifier);
                          photosNotifier.removePhoto(index);
                        },
                      ),
                    );
                  },
                ),
              );
            },
          ),
        ],
      ),
    );
  }
}

위 코드에서 ElevatedButton을 눌러서 사진을 추가할 수 있고, Consumer를 사용하여 사진 목록을 표시합니다. 목록에서는 IconButton을 사용하여 사진을 제거할 수 있습니다.

이제 Riverpod를 사용하여 앱의 사진 공유 기능을 효율적으로 관리할 수 있습니다. 추가적인 기능이나 세부적인 동작은 Riverpod의 문서를 참조하시기 바랍니다.

참고 자료: