import 'package:class_riverpod_mvvm/providers/provider/post_respisitory_provider.dart';import 'package:class_riverpod_mvvm/view_models/post_list_view_model.dart';import 'package:flutter_riverpod/flutter_riverpod.dart';import '../../models/post.dart';/// PostListViewModel 을 관리하는 프로바이더 생성 입니다.final postListViewModelProvider = StateNotifierProvider> ((ref) { final _postRepositoryImpl = ref.read(po..
Flutter
// 리버팟 중에 notifier 계열이 상태 관리를 담당해주는 클래스이다.import 'package:class_riverpod_mvvm/models/post.dart';import 'package:class_riverpod_mvvm/repository/post_repository.dart';import 'package:flutter_riverpod/flutter_riverpod.dart';// StateNotifier// 1. 멤버 변수로 T state 변수를 가지고 있다.// 2. 캡슐화에 핵심이다.class PostListViewModel extends StateNotifier> { // 통신 요청을 통해서 데이터를 가져오는 비즈니스 로직을 담당 시킬꺼다. final PostRepository..
ref는 다른 Provider에 쉽게 접근할 수 있는 역할을 합니다.ref는 Provider의 라이프사이클을 관리합니다.ref.read(): 다른 Provider의 값을 읽을 때 사용.ref.watch(): 다른 Provider의 상태를 구독하고, 상태가 변경되면 자동으로 반응.ref.listen(): 상태가 변경될 때 특정 로직을 실행할 때 사용.// PostRepositoryImpl 인스턴스를 제공하는 Riverpod Provider 계열 입니다.// 컨테이너에 넣는 코드import 'package:class_riverpod_mvvm/providers/provider/dio_provider.dart';import 'package:class_riverpod_mvvm/repository/post_repo..
주요 목적은?Repository는 API, 데이터베이스, 로컬 파일, 캐시(데이터 소스) 등에서 데이터를 동일한 인터페이스를 통해 접근할 수 있도록 해줍니다. 즉, 특정 데이터 소스에 종속되지 않고 일관된 방식으로 데이터를 사용할 수 있게 설계할 수 있습니다.의존성 역전 원칙(Dependency Inversion Principle)을 실현 - DIP상위 레벨의 비즈니스 로직(서비스 계층)이 하위 레벨의 데이터 접근 세부사항(API, 데이터베이스 등)에 직접적으로 의존하지 않고 Repository 인터페이스에 의존하게 됩니다.단일 책임 원칙(SRP)Repository는 데이터를 가져오거나 저장하는 하나의 책임만 가집니다. 명확한 역할과 책임을 가짐. repository/post_repository.dar..
API에서 받아올 데이터의 구조를 정의하고, 이를 Dart 객체로 변환하는 작업을 수행하자.Post 클래스를 정의하고, 이 클래스에서 JSON 데이터를 객체로 변환하는 메서드(fromJson)와 객체를 JSON으로 변환하는 메서드(toJson)를 구현을 해보자. import 'package:equatable/equatable.dart';/// Post 데이터를 표현하는 모델 클래스입니다./// 서버로부터 받은 JSON 데이터를 Dart 객체로 변환하거나,/// Dart 객체를 JSON으로 변환할 때 사용됩니다./// Equatable을 사용하여 값 기반 비교를 지원합니다.class Post extends Equatable { final int? userId; final int? id; final S..
REST API 호출: Dio는 GET, POST, PUT, DELETE 등 다양한 HTTP 요청을 지원합니다.비동기 네트워크 처리: 비동기적으로 네트워크 요청을 처리하여 애플리케이션의 응답성을 유지합니다.에러 처리: HTTP 상태 코드에 따라 쉽게 에러 처리를 할 수 있습니다.lib/providers/provider/dio_provider.dart 파일 생성import 'package:dio/dio.dart';import 'package:flutter_riverpod/flutter_riverpod.dart';/// Http 통신을 위한 Dio 인스턴스를 굳이 매번 생성할 필요가 없다/// 그래서 싱글톤 인스턴으를 생성해서 애플리케이션 전역에서 재사용 하기로 한다.// 전역에서 재사용 가능한 Dio 싱글..

이번 프로젝트에 목적은 Flutter를 사용해서 MVVM 패턴과 riverpod 프레임워크를 학습하는데 있습니다.Provider 계열Provider: 객체의 의존성 주입을 관리하는 데 사용됩니다. 주로 서비스 클래스나 리포지토리 같은 비상태적인 객체를 제공하는 역할을 합니다. 상태 변경이 필요 없는 경우에 적합합니다.StateNotifierProvider: 상태 관리를 위해 StateNotifier를 제공하는 데 사용됩니다. 상태의 변경을 관리하고, 그에 따라 UI를 업데이트하는 역할을 합니다.notifier 계열StateNotifier: 상태 변경을 관리하는 객체입니다. 내부적으로 상태를 유지하고, 상태가 변경될 때 이를 구독하는 UI에 알립니다. 주로 복잡한 상태 로직을 처리하거나 상태 변화가 빈번한..

Riverpod 이란?Riverpod은 Flutter 애플리케이션에서 상태 관리와 의존성 주입을 효율적으로 처리하기 위한 강력한 라이브러리입니다. 기존의 Provider 패키지의 단점을 개선하고, 추가적인 기능과 안전성을 제공합니다. Riverpod의 주요 특징컴파일 타임 안전성: Riverpod은 컴파일 시점에 많은 오류를 잡아내어 런타임 에러를 최소화합니다.Widget 트리에 의존하지 않음: Provider와 달리, Riverpod은 Widget 트리에 의존하지 않으므로 애플리케이션 어디에서든 상태에 접근하고 관리할 수 있습니다.상태의 불변성: Riverpod은 불변 상태를 지향하여 상태 관리의 예측 가능성과 안정성을 높입니다. 필요에 따라 가변 상태도 관리할 수 있습니다.의존성 주입의 용이성: Pr..

Monolithic (모노리스) 구조의 특징더보기💡 하나의 코드 파일에 UI, 비즈니스 로직, 프레젠테이션 로직을 모두 넣는 형식을 흔히 Monolithic Architecture 또는 간단히 Monolith라고 부릅니다. 먼저 MVVM 패턴 없이 간단한 구조로 코드를 작성해보자. 모든 로직과 상태 관리를 하나의 파일에 통합하여, UI와 데이터 처리가 한 클래스에서 이루어지는 방식으로 코드를 작성할 수 있다. 이 방식은 MVVM과 같은 디자인 패턴이 없어도 간단한 앱에서는 빠르게 개발할 수 있는 장점이 있다. TODO import 'package:flutter/material.dart';void main() => runApp(TodoApp());class TodoApp extends Stateles..
dio install | Dart packageA powerful HTTP networking package, supports Interceptors, Aborting and canceling a request, Custom adapters, Transformers, etc.pub.devdependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.6 dio: ^5.7.0 import 'package:dio/dio.dart';imp..