ViewModel 테스트 - 테스트할 때 발생하는 순서 문제 트러블슈팅
·
Flutter
클린아키텍처를 사용하는 영화 정보 앱 구현 중, HomeViewModel에는 4가지 메서드와 그에 따른 상태를 담았다. 이 뷰모델을 테스트할 때는, 기존에 배운 방법을 활용했다. 기존의 방법(흐름)[사전 설정]1. 테스트용 Mock 클래스 생성(실제 Usecase를 대체하는 가짜 클래스)2. main 함수 내부에서 ProviderContainer 선언3. setUp 함수 내부에서 UsecaseProvider를 Mock객체로 오버라이드4. setUp함수 내부에서 providerContainer 를 초기화, 오버라이드는 3에서 만든 가짜 usecase로 설정 [실제 테스트]1. when문 조건: providerContainer에서 usecaseProvider를 읽어와 execute를 실행함2. thenA..
[Flutter] Mocktail 패키지로 api 메서드 테스트하기
·
Flutter
기존에 Mocktail 패키지를 사용해 가짜 데이터로 메서드를 테스트하는 방식은 알고 있었지만, api를 사용하는 메서드의 경우 서버 통신을 어떻게 대체해야 하나 하는 고민이 있었다. 결론적으로 api통신 메서드의 경우에도 방법은 같다. 서버와 통신해서 실제 데이터를 가져오는 부분을 생략하고, 가짜 데이터를 넣어 해당 데이터를 잘 처리할 수 있는지 테스트해 준다. 테스트할 코드. 가짜 데이터 생성을 위해 dio를 외부 생성자로 받아 주는 클래스 구조를 만들었다. fetchNowPlayingMovies 메서드는 tmdb에게 현재 상영중인 영화 데이터를 요청하고, 그 데이터로 List?를 반환한다. 이 메서드를 테스트할 때는,get 요청이 발생하면 가짜 데이터를 Response.data로 취급하도록 하는..
[Flutter] dotenv로 api키 안전하게 관리하기
·
Flutter
.env파일을 사용하여 api키 또는 토큰을 안전하게 숨기고, 매번 키를 직접 입력하는 하드코딩 대신 간편하게 변수로 관리할 수 있다. 먼저 flutter_dotenv 패키지를 프로젝트에 추가한다.https://pub.dev/packages/flutter_dotenv flutter_dotenv | Flutter packageEasily configure any flutter application with global variables using a `.env` file.pub.dev[설치 명령어]flutter pub add flutter_dotenv [사용]1. .env 파일을 프로젝트 루트에 생성한다. 2. .env 파일을 pubspec.yaml의 assets: 루트에 추가한다.assets: - .e..
[Flutter] ListView.separated 주석 해석
·
Flutter
scroll_view.dart의 ListView.separated /// Creates a fixed-length scrollable linear array of list "items" separated /// by list item "separators". /// /// This constructor is appropriate for list views with a large number of /// item and separator children because the builders are only called for /// the children that are actually visible. /// /// The `itemBuilder` callback will be called..
[Flutter] 화면 크기 구하는 코드
·
Flutter
MediaQuery.of(context).size.height //화면 높이 MediaQuery.of(context).size.width // 화면 너비
[Flutter] 플러터의 기본적인 암시적 애니메이션 위젯
·
Flutter
암시적 애니메이션개발자가 직접 애니메이션의 세부 동작을 구현하지 않아도, 위젯의 속성이 변경되면 자동으로 애니메이션 효과가 적용되는 애니메이션첫 번째 위젯import 'package:flutter/material.dart';class AnimatedAlignExample extends StatefulWidget { const AnimatedAlignExample({super.key}); @override State createState() => _AnimatedAlignExampleState();}class _AnimatedAlignExampleState extends State { bool selected = false; @override Widget build(BuildContext con..
[Flutter] StreamBuilder로 firebase 로그인 상태관리하기
·
Flutter
Streambuiler비동기로 데이터를 가져올 때 사용하는 builder. 데이터의 변화를 실시간으로 감시하기 때문에 네트워트 통신으로 데이터베이스를 사용할 때 유용함. 아래는 StreamBuilder로 Firebase authentication 기반 어플의 로그인 상태를 관리해주는 코드이다.main함수로, 어플을 처음 빌드하는 부분이다.요소StreamBuilder - Firebase Auth의 로그인/로그아웃 변화를 실시간으로 감지snapshot.data - 현재 로그인된 User? 객체 StreamBuilder는 사용하는 snapshot 의 성질에 따라서 여러가지 상태를 감시할 수 있는 기능을 가진다. 지금 사용하는 stream은 authStateChanges, 즉 auth의 상태를 감지하고, ..
[Flutter] 매개변수 없는 함수, 매개변수 있는 함수, 익명 함수 정리
·
Flutter
매개변수 없는 함수 - 파라미터를 받지 않고 실행되는 함수 예시void sayHello() { print('Hello');} 매개변수 있는 함수 - 외부에서 파라미터를 받아 실행되는 함수 예시void greet(String name) { print('Hello, $name');} 익명 함수 - 이름 없는 함수 - 일회용으로 사용하거나, 간단한 로직을 전달할 때 주로 사용 예시(String name) { print('안녕하세요, $name');} 코드를 작성하다 보면 함수를 다른 함수나 위젯의 파라미터로 사용하는 경우가 있다. 이 때, 넣을 수 있는 함수의 타입을 정해야 안정성 있게 쓸 수 있기 때문에 매개변수 없는 함수, 매개변수 있는 함수를 유연성 있게 넣는 것이 불가능하다.이 때 사용할..
[Flutter] TextFormField의 AutovalidateMode 옵션
·
Flutter
TextFormField란?텍스트를 입력하고 변수로 저장하여 사용할 수 있는 위젯. 유효성 검사 옵션을 기본적으로 제공하여 편리하다. 텍스트폼필드에는 AutovalidateMode 라는 옵션이 있는데, 옵션값은 각각 다음과 같은 설정을 한다. disabled(기본값)- formKey.currentState!.validate() 가 호출될 때만 유효성 검사함always- 항상 validator가 작동함.onUserInteraction- 사용자가 해당 필드에 한 번이라도 상호작용을 하면 validator가 작동함. 로그인을 예로 들면, - '로그인' 누를 때만 검사하고 싶을 때 : disabled - '앱 시작부터, 항상' 검사하고 싶을 때 : always - '사용자가 인터랙션 한 창만' ..
[Flutter] REST API와 HTTP 응답코드
·
Flutter
REST API란?웹에서 자원을 처리하는 방식.클라이언트가 서버에 요청을 보내면, 서버는 요청에 맞는 자원을 응답주로 URL, HTTP 메서드(Get 등) REST API에서 HTTP 요청하는 방법 Flutter에서 http 패키지를 사용해 REST API 요청 가능.예시final response = await http.get(Uri.parse('URL주소'));GET: 데이터 요청POST: 데이터 생성PUT: 데이터 전체 수정PATCH: 데이터 일부 수정DELETE: 데이터 삭제요청을 보낼 땐 주로 Uri.parse()로 주소를 파싱하고, 메서드에 따라 적절한 함수를 사용. HTTP 응답이란?서버가 클라이언트의 요청에 대해 보내는 결과 메시지.요청이 잘 처리됐는지, 문제가 있었는지 알려줌. 주요 응답..