Drift는 Flutter와 Dart에서 SQLite 데이터베이스를 쉽게 다룰 수 있게 해주는 ORM(Object-Relational Mapping) 라이브러리입니다. SQL 문법을 간단히 사용하면서 Dart 코드 내에서 데이터베이스를 구성하고, 쿼리를 작성하고, 타입
Dependancy Injection의존성을 특정 변수를 한 곳에 선언하고 그 값을 어디서나 사용하도록 주입합니다.타입을 넣으면 저장해 놓은 데이터를 가져올 수 있습니다. get_it 사용시 Column을 받아와야 하기에 drift의 Column 기능은 숨깁니다. im
confirmDismiss : (삭제를 확인해라) True : Dismiss되면 일정을 삭제하고 알려줍니다.onDismissed : 삭제를 하고 나서, onDismissed가 실행됩니다.setState()를 추가하더라도 삭제가 이미 되었기 때문에 아래 오류가 발생합니다
사용자가 화면을 아래로 당기면 RefreshIndicator의 onRefresh가 호출됩니다.이때 ref.read(widget.provider.notifier).paginate(forceRefetch: true);통해 데이터를 강제로 다시 로드하며, paginate 함
Retrofit은 REST API 통신을 쉽게 처리할 수 있도록 해주는 HTTP 클라이언트 라이브러리입니다.아래 코드는 Provider와 Retrofit, 그리고 Dio를 활용해 HTTP 요청을 간단히 구성하는 방식입니다.Retrofit이 메소드 호출 시 내부적으로 H
각 일정의 Id를 토대로 저장된 데이터를 불러오는 기능을 추가해보겠습니다.일정 업데이트 할 때 필요초기값 initialValue: initialValue,
schedule table에 Category Table을 추가하려고 합니다.먼저 CategoryTable을 만들고, ScheduleTable에 추가합니다.Table 생성시 앱을 삭제후 처음부터 다시 실행해야 합니다.CategoryTable 추가 후 dart run bu
SingleChildScrollView : 한 번에 모든 값인 100번까지 모두 렌더링됩니다. 리소스가 많이 필요하면 SingleChildScrollView 퍼포먼스는 좋지 않습니다. SingleChildScrollView physics와 퍼포먼스를 높이는 방법을 더
유저가 Item 위치를 스크롤하여 변경할 때 DB의 순서를 함께 수정할 수 있습니다.3초 만큼 RefreshIndicator가 보여집니다.이후 서버 요청 코드를 추가할 수 있습니다.
Dio는 HTTP 요청을 비동기적으로 보내고 JSON 데이터를 쉽게 처리할 수 있도록 도와주는 라이브러리입니다.Isar는 Flutter용 NoSQL 데이터베이스로, 비동기 필터링과 트랜잭션을 지원하여 데이터의 안정적인 저장 및 조회를 제공합니다.fetchData 및 f
지금까지 Drawer의 간단한 설정을 알아봤습니다.추가로 SliverAppBar 설정을 적용합니다.AppBar 영역의 이미지가 스크롤로 사라지더라도 지역이름이 appbar에 표시됩니다.생성자에 isExpanded 값을 받습니다.bool isExpanded = true;
Int 와 Double 은 호환이 되지 않기 때문에 API가 Double이라면 Model을 만들 때 임시로 num 을 사용하여 위도와 경도를 입력할 수 있습니다.
fetchAlbum() 함수는 다음 두 가지 중 하나를 수행합니다.http 호출이 성공하면 앨범을 반환합니다.http 호출이 실패하면 예외를 throw합니다.따라서 이 두 가지 조건을 테스트하고 싶습니다. MockClient 클래스를 사용하여 성공 테스트에 대한 "Ok
Equatable은 Dart에서 객체의 값 비교를 쉽게 처리할 수 있도록 도와주는 패키지입니다.기본적으로, Dart에서는 객체를 비교할 때 메모리 주소(참조)를 기준으로 비교합니다. 그러나 Equatable을 사용하면 객체의 속성 값을 기준으로 비교할 수 있습니다.값
1. Freezed : class HomeUiEvent 2. HomeViewModel StreamController 생성 에러 message를 _eventController에 전달 HomeViewModel 전체코드 3. HomeScreen initState 에
1. 상태관리 home_state.dart 상태가 많아지는 걸 대비할 수 있도록 Freezed를 사용하여 상태관리 클래스로 만들었습니다. 불변 객체로, copy를 제공합니다. (state.copyWith) 이로써, 수정이 제한적인 안전한 코드를 작성할 수 있습니다.
Dart 언어와 SQLite를 활용하여 데이터베이스를 먼저 만들었습니다. w3shools.com/sql/default.asp 해당 사이트에서 SQL 학습을 추천드립니다. SQLite의 데이터 타입 스토리지 클래스(storage class)라는 5개의 기본 그룹으로
메모를 저장하는 형태의 어플을 통해 입력값을 저장하는 기능을 추가해보겠습니다. Freezed showSnackBar StreamController Navigator.pop AddEditNoteUiEvent AddEditNoteViewModel eventControl
Kakao login, google_sign_in_ios 라이브러리 사용이 오류는 GTMSessionFetcher/Core 의존성 버전 충돌로 인해 발생한 문제입니다. google_sign_in_ios와 firebase 라이브러리 간의 버전 불일치가 원인입니다. 이를
sort는 기본 오름차순으로, -a 로 내림차순으로 설정할 수 있습니다. ViewModel.loadNotes() Use Cases 위 코드의 ViewModel의 정렬 기능을, Use Case로 정리하겠습니다. 정렬 기능들을 enum으로 정의하면 오류가 있을 수 있기
Flutter로 노트 앱을 개발할 때, 정렬 기능이 제대로 작동하는지 확인하는 것은 중요한 부분입니다. Mockito를 활용하여 정렬 로직을 테스트하는 과정을 코드와 함께 설명하겠습니다. 관련 키워드 Flutter Unit Test Mockito Clean Archit
Hero 위젯이 동일한 tag 값을 가진 두 개 이상의 Hero 위젯을 한 화면(또는 서브트리)에서 사용하려고 할 때 발생합니다. Hero 위젯은 tag를 통해 애니메이션 대상 요소를 식별하므로, 각 tag는 고유해야 합니다.각 Hero 위젯에 고유한 tag 값을 설정


NoteScreen 관련 파일의 리팩토링 및 구조 개선하는 작업을 하였습니다.먼저 파일구조를 설명드리겠습니다.노트 연도를 관리하는 화면을 나타냅니다. 날짜와 관련된 상태를 독립적으로 관리하기 위해 currentDateProviderYear라는 StateProvider를
iOS에서 카카오 로그인, 공유, 채널 기능을 사용하려면 ios/Runner/Info.plist 아래 설정을 추가해야 합니다.✅ 설명1\. CFBundleIdentifier → iOS 번들 ID (Firebase 등록한 ID와 일치해야 함)2\. LSApplicatio
오류 메시지를 보면 앱이 GoogleSignIn을 위한 URL Scheme을 지원하지 않아서 발생하는 문제입니다.해결하려면 Info.plist에 올바른 URL Scheme을 추가해야 합니다.Xcode에서 ios/Runner/Info.plist를 엽니다.아래 내용을 추가