플러터에서 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()..
플러터에서 드롭다운(Dropdown) 위젯을 사용하는데 아래와 같은 에러가 발생했다. DropdownButton( value: selectedGroup, items: groupList.map((group) { return DropdownMenuItem( value: group, child: Text(group.name)); }).toList(), ), ======== Exception caught by widgets library ======================================================= The following assertion was thrown building NewPrayer(dirty, state: _NewPrayerState#7b00b): There s..
플러터는 다트 언어로 개발한다. 개발 시 얕은 복사와 깊은 복사를 잘 알아야 원치 않는 부작용을 방지할 수 있다. 불변 타입과 가변 타입 다음 코드에서 intOrigin과 myIntOrigin.value은 무슨 값이 출력될까? class MyInt { int value = 0; MyInt(this.value); } void main() { int intOrigin = 0; int intCopied = intOrigin; intCopied = 1; MyInt myIntOrigin = MyInt(0); MyInt myIntCopied = myIntOrigin; myIntCopied.value = 1; print('intOrigin: $intOrigin'); print('intCopied: $intCopied..
Provider를 사용하여 등록된 상태에 접근하는 방법은 다양합니다. 가장 일반적으로 사용되는 방법들에 대해서 알아봅시다. Provider.of(context) Provider.of(context)를 사용하면 등록된 T 타입의 객체 또는 상태에 접근할 수 있습니다. 이 방법은 가장 간단하고 직접적인 방법이며, 위젯 트리에서 가장 가까운 상위 Provider를 찾습니다. 기본적으로 리스닝 동작이 활성화되어 있으며, ChangeNotifierProvider의 상태 데이터 변경되거나 setState()로 상태 데이터가 변경되면, 해당 위젯이 리빌드 됩니다. 예시: var myData = Provider.of(context); context.read(): context.read()를 사용하여 등록된 T 타입의 ..
플러터를 안드로이드 스튜디오로 만들고 있다. 그러던 중 TODO 아이템을 이용하면, 나중에 추가할 코드 내용을 쉽게 찾을 수 있어서 사용해보았다. IconButton( onPressed: () { // TODO: 수정 기능 추가하기 }, icon: const Icon(Icons.edit), ), 하지만 TODO 아이템이 포함되어 있는 상태에서 안드로이드 스튜디오의 내장된 Git으로 Commit을 시도하니 Checks failed: 2 TODO와 같은 에러가 발생했다. 에러를 해결하기 위해선 TODO 아이템으로 표시한 작업을 완료해거나, TODO 아이템을 무시하도록 설정할 수 있다. 나는 TODO 아이템을 무시하도록 설정하겠다. 1. 안드로이드 스튜디오의 File > Setting을 선택한다. (운영체제에..
안드로이드 스튜디오에서 git을 이용해서 플러터 프로젝트를 버전관리하고 있었다. 수정 내용을 commit하니 아래와 같은 에러가 발생했다. Error:(1, 27) Cannot resolve symbol 'Properties' Error:(11, 15) Cannot resolve symbol 'GradleException' 1. File > Project Structure를 선택한 후 아래 이미지처럼 Moudle SDK에서 프로젝트에 사용할 SDK를 선택한다. 2. 그리고 SDK API가 29이상이면 GrandleException가 FileNotFoundException으로 대체된다. 따라서 SDK API가 29이상이라면 해당 코드를 수정해야 한다.