[Flutter] (MVVM 활용) 화면의 데이터(상태)를 관리하는 PostListViewModel 을 먼저 만들어 보자. - 6

2024. 11. 19. 17:07·Flutter/MVVM 활용
lib/view_models/post_list_view_model.dart 파일 생성
import 'package:class_mvvm/models/post.dart';
import 'package:class_mvvm/repository/post_repository.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

// StateNotifier
// 1. 멤버 변수로 T state 변수를 가지고 있다.
// 2. 캡슐화에 핵심이다.
class PostListViewModel extends StateNotifier<List<Post>>{

  // 통신 요청을 통해서 데이터를 가져오는 비즈니스 로직을 담당 시킬꺼다.
  final PostRepository _postRepository;
  // T state --> List<Post> <---
  // 맨 처음 부모클래스 StateNotifiter 를 가지고 있는 PostListViewModel에 상태는
  // 당연히 빈 값을 들고 있다.
  PostListViewModel(this._postRepository) : super([]);

  // 비즈니스 로직
  Future<void> fetchPosts() async{
    // List<Post> = []
    try{
      final posts = await _postRepository.fetchPosts();
      // List<Post>
      state = posts;
    }catch(e){
      // List<Post>
      state = [];
    }
  }

  // 삭제하는 비즈니스 로직을 만들어 보자.
  Future<void> deletePost(int id) async{
    try{
      await _postRepository.deletePost(id);
      // 리스트 10개 중에 1개를 삭제 했음 --> List<Post> 값 상태가 변경이 되었다.
      // state --> [ Post(), Post(), Post() ];
      // 상태가 변경이 되면 새로운 리스트 객체를 state 변수에 넣어 주어야
      // 아 상태가 변경이 되었구나 확인해서 화면을 자동으로 갱신해 준다.
      // state --> [ Post(), Post(), Post() ];
      state = state.where((post) => post.id != id).toList(); // 새로운 리스트 객체가 생성
      print('삭제 완료');
    }catch(e){
      print('삭제 실패 : $e');
    }
  }


}
  • 리버팟에 상태를 관리하는 클래스는 notifier 계열입니다. StateNotifier는 상태 관리를 위해 사용되는 리버팟의 notifier 계열 중 하나입니다. StateNotifier는 상태를 변경하고, 변경 사항을 알리는 역할을 하기 때문에 상태 관리를 위한 대표적인 notifier입니다.
  • MVVM 패턴에서는 ViewModel이 뷰의 상태를 관리하고, 뷰와 비즈니스 로직을 연결해줍니다
  • StateNotifier를 사용함으로써 상태 관리의 흐름을 간소화하고 상태 변경을 자동으로 UI에 반영할 수 있습니다. 이를 통해 직접 상태를 갱신하고 변경 사항을 뷰에 반영하는 작업을 줄일 수 있기 때문에 상태 관리의 자동화
  • 이 프로젝트에서는 ViewModel 클래스에 상태 관리용으로 StateNotifier를 사용할 예정입니다.

'Flutter > MVVM 활용' 카테고리의 다른 글

[Flutter] (MVVM 활용) PostListPage 화면을 만들어 보자 그런데 뷰 모델은 어떻게 가지고 올까? - 8  (0) 2024.11.19
[Flutter] (MVMM 활용) viewModel 을 관리하는 Provider 계열을 만들어 보자 - 7  (0) 2024.11.19
[Flutter] (MVVM 활용) PostRespository를 중앙에서(컨테이너) 관리하는 Provider 계열을 만들어 보자. - 5  (0) 2024.11.19
[Flutter] (MVVM 활용) 데이터 접근 계층인 PostRepository 만들어 봅시다. - 4  (0) 2024.11.19
[Flutter] (MVVM 활용) API에서 사용할 데이터 구조를 정의하기 위해 Post 클래스를 만들어 봅시다.(모델링 작업) - 3  (0) 2024.11.19
'Flutter/MVVM 활용' 카테고리의 다른 글
  • [Flutter] (MVVM 활용) PostListPage 화면을 만들어 보자 그런데 뷰 모델은 어떻게 가지고 올까? - 8
  • [Flutter] (MVMM 활용) viewModel 을 관리하는 Provider 계열을 만들어 보자 - 7
  • [Flutter] (MVVM 활용) PostRespository를 중앙에서(컨테이너) 관리하는 Provider 계열을 만들어 보자. - 5
  • [Flutter] (MVVM 활용) 데이터 접근 계층인 PostRepository 만들어 봅시다. - 4
미로910
미로910
개발자를 꿈꾸는 민경이의 기록 블로그
  • 미로910
    개발 note
    미로910
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 설치 메뉴얼
      • HTML
      • JAVA
        • Java 기초
        • Java 응용
        • 자료구조
        • HTTP
        • JSP 프로그래밍
      • MySQL
        • MySQL 기본
        • 1일 1쿼리
      • CSS
      • Spring boot
      • JS
        • 게시판 만들기
      • Git
      • Flutter
        • MVVM 활용
        • 심화 버전
        • 1일 1 Flutter
      • 디자인 패턴의 활용
      • error note
      • My Project
        • [졸작] LLM 기반 특허 유사도 분석 시스템
        • 도서 관리 프로그램 (final project)
        • amigo
        • 친구 매칭 프로그램(FMP)
      • Python
      • 딥러닝
      • 네트워크
      • 공부 노트
        • 연구회
        • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 전체보기
    • -----------------------
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Flutter
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
미로910
[Flutter] (MVVM 활용) 화면의 데이터(상태)를 관리하는 PostListViewModel 을 먼저 만들어 보자. - 6
상단으로

티스토리툴바