플러터에서 json_serializable 패키지를 사용하면, 객체를 json으로 변환하거나, json을 객체로 쉽게 만들 수 있다. 먼저 pubspec.yaml에 다음의 정보를 추가하자. dependencies: json_annotation: ^4.8.0 dev_dependencies: build_runner: ^2.3.3 json_serializable: ^6.6.0 json_serializable을 적용할 클래스에 다음 작업을 해야 한다. 1. part .g.dart 추가하기 2. 클래스에 @JsonSerializable를 추가하기 3. fromJson 명명된 생성자 추가하기 : 생성자는 _$FromJson() 함수를 사용한다. 4. toJson 메서드 추가하기 : 메서드는 _$ToJson() 함수..
플러터에서 사용하는 다트 언어에는 예외 클래스와 에러 클래스가 존재한다. 각 클래스의 차이점에 대해서 알아보자. 예외 클래스 예외 클래스는 오류에 대한 정보를 사용자에게 전달하기 위해 사용된다. 그리고 오류를 프로그램으로 처리할 수 있도록 한다. 이 예외는 catch로 잡히기를 기대하며, 유용한 데이터를 포함해야 한다. 예외 클래스인 Exceioption은 Exception("메시지")처럼 간단히 예외를 만들 수 있지만 라이브러리 코드에서는 사용을 금지한다. 왜냐하면 사용자들이 정확한 타입을 잡을 수 없기 때문이다. 이 클래스의 인스턴스는 테스트나 개발 중에 사용하자. 프로덕션 코드에서는 Excpetion의 하위 클래스를 정의해서 정확한 예외 정보를 전달하도록 해야 한다. 에러 클래스 에러 클래스는 프로..
https://medium.com/@theboringdeveloper/common-bottom-navigation-bar-flutter-e3693305d2d Common bottom navigation bar — Flutter Welcome to this tutorial to create a Common bottom navigation bar in Flutter. medium.com 해결하고 싶은 문제점 플러터에서 BottomNavigationBar를 사용하고 있는데, 내비게이션으로 화면 이동시 BottomNavigationBar가 사라진다. 그래서 화면을 이동해도 BottomNavigationBar를 계속 사용할 수 있는 방법에 대해서 구글링하였다. 이 문제를 해결하기 위해서는 플러터에서 route가 ..
플러터에서 다음 코드에서 에러가 발생했다. Scaffold( appBar: AppBar(title: const Text("Home Page")), body: const Center( child: TextField( onChanged: (str) { print(str); }, ) ), ); 에러는 익명 함수에 표시되어 있다. 처음에는 익명 함수에 전혀 관련이 없는 에러 내용(유효하지 않은 상수 값)이라서 이유를 알 수가 없었다. 자세히 살펴보니 익명 함수를 가지는 Center가 const로 선언되어 있다. 그래서 익명함수는 상수가 될 수 없어서 이런 에러가 발생한 것을 알 수 있었다. 이런 에러가 발생하면 const를 제거해보자.
플러터는 다트 언어를 사용한다. 다트의 객체에 동등성에 대해서 알아보자. 예제 코드 Person 클래스를 구현하였다. 그리고 동일한 속성을 가지는 두 객체를 생성한 후 == 연산자로 동등성을 확인하였더니 false가 나왔다. class Person { String name; int age; Person(this.name, this.age); } void main() { var a = Person('John', 26); var b = Person('John', 26); print(a == b); // false } 다트의 == 연산자 다트에서 == 연산자는 두 객체의 동등성을 비교하는 데 사용된다. == 연산자의 작동 방식은 객체의 주소(메모리 위치)를 기반으로 한다.즉, 두 객체가 정확히 같은 인스턴스인..
플러터에서 AdMob 광고를 추가하는 방법에 대해서 알아보자. 1. google_mobile_ads 패키지 추가하기 AdMob 광고를 추가하기 위해서 패키지를 이용해야 한다. pub.dev에서 admob으로 검색하면 다양한 패키지가 나오는데, 나는 google_mobile_ads 패키지를 이용하려고 한다. 프로젝트의 pubspec.yaml 파일에 google_mobile_ads를 추가하고 pub get을 실행한다. 2. AdMob에서 광고를 추가할 앱을 만들고, 광고 단위 만들기 AdMob에 회원가입을 한 후 광고를 추가할 앱을 추가한다. 그리고 해당 앱을 위한 광고 단위를 만든다. 광고 단위를 만들면 앱ID와 광고 ID를 확인할 수 있다. ID는 "ca-app-pub-XXXXXX"와 같은 형식을 가진다..
플러터에서 특정 조건에 따라 위젯을 나타내고 싶은 경우가 있다. 이때 일반적으로 사용하는 if() {} 문을 사용하니 if (_bannerAd != null) { SizedBox( height: 50, child: AdWidget(ad: _bannerAd!), ), }, error: The element type 'Set' can't be assigned to the list type 'Widget'. (list_element_type_not_assignable at [prayer_notebook] lib/ad_test.dart:76) 에러 내용은 Widget 타입이어야 하는데, Set가 되어서 발생한 에러라고 한다. 음? Set라고? 나는 분명 그냥 SizedBox인데?라고생각했는데 그 이유는 If()..