2024/11/19 13

Flutter 설치

Flutter - Build apps for any screenFlutter transforms the entire app development process. Build, test, and deploy beautiful mobile, web, desktop, and embedded apps from a single codebase.flutter.dev주의 사항!!Flutter 설치 경로상에 한글 있으면 안됨 C:\Program Files\ 밑에는 설치 금지OneDrive 폴더 밑에 설치 금지 (탐색기에서 주소창 클릭시 OneDrive라고 적혀있으면 안됩니다.)환경 변수 설정설치 확인명령 프롬프트에서 flutter --version 명령어 입력

설치 메뉴얼 2024.11.19

[Flutter] (MVVM 활용) PostDetailViewModel 만들기(상세보기 화면 데이터 관리) - 9

PostListPage - onTab() 추가import 'package:class_mvvm/models/post.dart';import 'package:class_mvvm/providers/state_noti_provider/post_list_view_model_provider.dart';import 'package:class_mvvm/view/post/post_detail_page.dart';import 'package:flutter/material.dart';import 'package:flutter_riverpod/flutter_riverpod.dart';// MVVM -> View 는 뷰 모델 인스턴스만 바라보면 된다.// ConsumerWidget은 Provider 생태를 구독하여, 상태가 변..

Flutter/MVVM 활용 2024.11.19

[Flutter] (MVVM 활용) PostListPage 화면을 만들어 보자 그런데 뷰 모델은 어떻게 가지고 올까? - 8

main.dartimport 'package:class_mvvm/view/post/post_list_page.dart';import 'package:flutter/material.dart';import 'package:flutter_riverpod/flutter_riverpod.dart';// 우리 앱에서 사용하는 모든 Provider 를 하나의 컨테이너(ProviderContainer) 로 묶어 관리 합니다.void main() { runApp( const ProviderScope( child: MaterialApp( home: NovaBlog(), ), ), );}class NovaBlog extends StatelessWidget { const Nova..

Flutter/MVVM 활용 2024.11.19

[Flutter] (MVMM 활용) viewModel 을 관리하는 Provider 계열을 만들어 보자 - 7

lib/state_noti_provider/post_list_view_model_provider.dart 파일 생성import 'package:class_mvvm/models/post.dart';import 'package:class_mvvm/providers/provider/post_repository_provider.dart';import 'package:class_mvvm/view_models/post_list_view_model.dart';import 'package:flutter_riverpod/flutter_riverpod.dart';// PostListViewModel 을 관리하는 프로바이더 생성입니다.final postListViewModelProvider = StateNotifierPro..

Flutter/MVVM 활용 2024.11.19

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

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>{ // 통신 요청을 통해서 데이터를 가져오는 비즈니스 로직을 담당 시킬꺼다. final PostRepository _postReposito..

Flutter/MVVM 활용 2024.11.19

[Flutter] (MVVM 활용) PostRespository를 중앙에서(컨테이너) 관리하는 Provider 계열을 만들어 보자. - 5

ref는 다른 Provider에 쉽게 접근할 수 있는 역할을 합니다.ref는 Provider의 라이프사이클을 관리합니다.ref.read(): 다른 Provider의 값을 읽을 때 사용.ref.watch(): 다른 Provider의 상태를 구독하고, 상태가 변경되면 자동으로 반응.ref.listen(): 상태가 변경될 때 특정 로직을 실행할 때 사용.lib/providers/provider/post_repository_provider.dart 파일 생성// PostRepositoryImpl 인스턴스를 제공하는 Riverpod Provider 계열입니다.// 컨테이너에 넣는 코드import 'package:class_mvvm/providers/provider/dio_provider.dart';import '..

Flutter/MVVM 활용 2024.11.19

[Flutter] (MVVM 활용) 데이터 접근 계층인 PostRepository 만들어 봅시다. - 4

Repository라는 이름을 붙이는 이유는 데이터 접근 계층을 나타내기 위해서입니다.  주요 목적은? Repository는 API, 데이터베이스, 로컬 파일, 캐시(데이터 소스) 등에서 데이터를 동일한 인터페이스를 통해 접근할 수 있도록 해줍니다. 즉, 특정 데이터 소스에 종속되지 않고 일관된 방식으로 데이터를 사용할 수 있게 설계할 수 있습니다.  의존성 역전 원칙(Dependency Inversion Principle)을 실현 - DIP 상위 레벨의 비즈니스 로직(서비스 계층)이 하위 레벨의 데이터 접근 세부사항(API, 데이터베이스 등)에 직접적으로 의존하지 않고 Repository 인터페이스에 의존하게 됩니다.단일 책임 원칙(SRP)Repository는 데이터를 가져오거나 저장하는 하나의 책임만..

Flutter/MVVM 활용 2024.11.19

[Flutter] (MVVM 활용) API에서 사용할 데이터 구조를 정의하기 위해 Post 클래스를 만들어 봅시다.(모델링 작업) - 3

API에서 받아올 데이터의 구조를 정의하고, 이를 Dart 객체로 변환하는 작업을 수행하자. Post 클래스를 정의하고, 이 클래스에서 JSON 데이터를 객체로 변환하는 메서드(fromJson)와 객체를 JSON으로 변환하는 메서드(toJson)를 구현을 해보자.  lib/models/Post.dart 파일 생성import 'package:equatable/equatable.dart';// Post 데이터를 표현하는 모델 클래스입니다.// 서버로부터 받은 JSON 데이터를 Dart 객체로 변환하거나,// Dart 객체를 JSON으로 변환할 때 사용됩니다.// Equatable을 사용하여 값 기반 비교를 지원합니다.class Post extends Equatable { final int? userId; ..

Flutter/MVVM 활용 2024.11.19

extends와 implements 차이점

클래스와 인터페이스의 상속 및 구현을 정의할 때 사용하는 키워드입니다. extends: 클래스 상속 (부모 상속)부모 클래스(상위 클래스)의 속성과 메서드를  자식 클래스(하위 클래스)가 물려받을 때 사용합니다. 단일 상속만 가능하며, 한 번에 하나의 클래스만 상속받을 수 있습니다.상속받은 클래스는 부모 클래스의 메서드나 변수를 재정의(Override)할 수 있습니다. implements: 인터페이스 구현 클래스가 다른 클래스나 인터페이스에 정의된 메서드와 속성을 반드시 구현하도록 강제할 때 사용합니다.다중 구현이 가능하며, 하나 이상의 클래스를 동시에 implements할 수 있습니다.implements를 사용하면 상속이 아니라 인터페이스의 모든 메서드와 속성을 새로 정의해야 합니다.

공부 노트 2024.11.19

[Flutter] (MVVM 활용) Http 통신 클라이언트 Dio 객체를 만들어 보자 - 2

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 활용 2024.11.19