/// 앨범 컨트롤러 (MVCS의 Controller 레이어) /// /// 비즈니스 로직과 상태 관리를 담당합니다. /// View는 이 Controller를 통해 데이터에 접근합니다. library; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../models/album.dart'; import '../services/albums_service.dart'; /// 앨범 상태 class AlbumState { final List albums; final bool isLoading; final String? error; const AlbumState({ this.albums = const [], this.isLoading = true, this.error, }); /// 상태 복사 (불변성 유지) AlbumState copyWith({ List? albums, bool? isLoading, String? error, }) { return AlbumState( albums: albums ?? this.albums, isLoading: isLoading ?? this.isLoading, error: error, ); } } /// 앨범 컨트롤러 class AlbumController extends Notifier { @override AlbumState build() { // 초기 데이터 로드 Future.microtask(() => loadAlbums()); return const AlbumState(); } /// 앨범 목록 로드 Future loadAlbums() async { state = state.copyWith(isLoading: true, error: null); try { final albums = await getAlbums(); state = state.copyWith( albums: albums, isLoading: false, ); } catch (e) { state = state.copyWith( isLoading: false, error: e.toString(), ); } } /// 앨범 새로고침 Future refresh() async { await loadAlbums(); } } /// 앨범 Provider final albumProvider = NotifierProvider( AlbumController.new, );