Flutter를 위한 높은 커스터마이징 가능성과 기능이 풍부한 캘린더 위젯이다. 특징광범위하면서도 사용하기 쉬운 API커스터마이징 가능한 스타일의 기본 UI무제한 UI 디자인을 위한 커스텀 선택 빌더로케일 지원범위 선택 지원다중 선택 지원동적 이벤트 및 휴일수직 자동 크기 조정 - 내용에 맞게 조정하거나 뷰포트를 채우기여러 캘린더 형식 (월, 2주, 주)수평 스와이프 경계 (첫날, 마지막 날) 설치pubspec.yaml에 다음 줄을 추가하세요:dependencies: table_calendar: ^3.1.2 기본 설정TableCalendar는 firstDay, lastDay 및 focusedDay를 제공해야 합니다:firstDay: 캘린더에서 사용할 수 있는 첫 번째 날. 이 날 이전의 날에는 접근할..

앱을 실행시키니 다음과 같은 에러가 발생했다.Launching lib/main.dart on sdk gphone64 arm64 in debug mode...Running Gradle task 'assembleDebug'...✓ Built build/app/outputs/flutter-apk/app-debug.apkInstalling build/app/outputs/flutter-apk/app-debug.apk...Error: ADB exited with exit code 1Performing Streamed Installadb: failed to install /Users/name/StudioProjects/app_name/build/app/outputs/flutter-apk/app-debug.apk: ..
이전에 만들었던 플러터 앱을 실행하니 다음과 같은 경고문이 나타났다.Running Gradle task 'assembleDebug'...You are applying Flutter's app_plugin_loader Gradle plugin imperatively using the apply script method, which is deprecated and will be removed in a future release. Migrate to applying Gradle plugins with the declarative plugins block: https://flutter.dev/go/flutter-gradle-plugin-applyYou are applying Flutter's main Gradl..
셋은 객체 컬렉션으로, 각 객체는 한 번만 포함될 수 있습니다. 즉, 각 요소 유형의 객체는 집합에 포함되어 있거나 포함되지 않은 것으로 간주됩니다. Set 구현체는 일부 요소들을 구분할 수 없다고 간주할 수 있습니다. 이러한 요소들은 집합에서의 모든 작업에서 동일한 것으로 취급됩니다.기본 Set 구현체인 LinkedHashSet은 `Object.==` 및 `Object.hashCode`에 따라 객체가 동일하다고 간주합니다. 집합의 요소를 반복(iterate)하는 순서는 무작위이거나 특정 방식으로 정렬될 수 있습니다. 예시:- HashSet은 무작위로 정렬되며, 반복 순서가 지정되지 않습니다.- LinkedHashSet은 요소의 삽입 순서대로 반복합니다.- SplayTreeSet과 같은 정렬된 집합은 요..
길이를 가진 객체들의 인덱스 가능 컬렉션입니다.이 클래스의 서브클래스들은 다양한 종류의 리스트를 구현합니다. 가장 흔한 리스트 종류는 다음과 같습니다:고정 길이 리스트 (Fixed-length list)리스트의 길이를 변경할 수 있는 작업을 시도하면 오류가 발생합니다.가변 길이 리스트 (Growable list)이 클래스에서 정의된 API를 완전하게 구현합니다.기본 가변 길이 리스트(대괄호 []로 생성)는 내부 버퍼를 유지하며, 필요할 때 그 버퍼를 확장합니다. 이는 일련의 add 작업이 각각 상수 시간에 실행되도록 보장합니다. 길이를 직접 설정하는 것은 새로운 길이에 비례하는 시간이 걸릴 수 있으며, 내부 용량을 변경하여 다음 add 작업에서 버퍼 용량을 즉시 증가시켜야 할 수도 있습니다. 다른 리스트..
컬렉션이란?컬렉션은 객체 그룹을 나타내는 객체이며, 객체 그룹의 각각의 객체를 요소라고 부른다. 컬렉션은 비어 있을 수도 있고, 여러 요소를 포함할 수도 있다. 가장 일반적인 컬렉션 타입은 다음과 같다.- 리스트 : 인덱스를 통해 요소를 읽는 데 사용- 셋 : 중복 없이 요소를 포함하는 데 사용- 맵 : 키를 사용하여 요소를 읽는 데 사용 Iterable이란?Iterable은 순차적으로 접근할 수 있는 요소의 컬렉션이다. 다트에서 Iterable은 추상 클래스이므로 직접 인스턴스화할 수 없다. 하지만 리스트와 셋을 생성하여 새로운 Iterable을 만들 수 있다. 리스트와 셋은 모두 Iterable이므로, Iterable 클래스와 동일한 메서드와 속성을 가진다. 맵은 해시 테이블을 사용하여 키를 ..

널 안전성은 다트 2.0에서 도입된 가장 큰 변화이다. 다트가 처음 출시되었을 때는 널 안전성은 긴 소개를 필요로 하는 희귀한 기능이었다. 하지만 오늘날 Kotlin, Swift, Rust 등 다양한 언어들이 이 문제에 대해 각자의 해답을 제시하고 있다. 다음은 널 안전성을 사용하는 않는 경우의 코드이다.// 널 안전성을 사용하지 않은 경우:bool isEmpty(String string) => string.length == 0;void main() { isEmpty(null);} 이 다트 프로그램을 널 안전성을 사용하지 않고 실행하면 .length 호출 시 NoSuchMethodError 에러가 발생한다. 널 값은 Null 클래스의 인스턴스이며, Null에는 length라는 게터가 없다. 개발자달은 ..
다트는 엄격한 널 안전성(sound null safety)을 강제한다. 널 안전성은 널(null)로 설정된 변수를 의도치 않게 접근하는 것에 비롯되는 오류를 방지한다. 예를 들어, 메서드가 정수를 기대하지만 널을 받는 경우, 앱이 런타임 오류를 일으킬 수 있다. 이러한 타입의 오류는 널 역참조 오류(null dereference error)라고 하며, 디버깅하기 어렵다. 엄격한 널 안전성에서는 모든 변수에 값이 필요하다. 이는 다트가 모든 변수를 널이 될 수 없다고 간주한다는 의미이다. 선언된 타입의 값만 할당할 수 있다. 기본 타입 변수에는 절대 널 값을 할당할 수 없다. 변수 타입이 널 값을 가질 수 있음을 명시하려면 타임 주석 뒤에 ?를 추가하자. (예: int? i) 이러한 널-가능 타입은 널 또..