
플러터에서 특정 조건에 따라 위젯을 나타내고 싶은 경우가 있다. 이때 일반적으로 사용하는 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이상이라면 해당 코드를 수정해야 한다.

플러터의 상태 관리 패키지인 Provider에서 제공하는 ChangeNotifierProvider와 Navgator로 화면 이동한 후에 상태 변화를 확인하기 위해 예제 코드를 만들어 보았다. 다음 이미지처럼 FirstPage에서 SecondPage로 이동하고, SecondPage에서 상태를 변화시켜도 FirstPage에 구독한 상태가 잘 변경되는 것을 확인할 수 있다. FirstPage와 SecondPage가 StatelessWidget인 것을 주목하자. ChangeNotifierProvider로 상태가 공유되기 때문에 상태 변화시 자동으로 위젯이 리빌드 되기 때문에 StatefulWidget처럼 작동하게 된다. import 'package:flutter/material.dart'; import 'pac..

플러터의 State 클래스에서 코드를 작성하다 보면 위젯에 사용할 변수들을 build 메서드 내부에 지역 변수로 선언하는 경우가 종종 있었다. 다음은 PageView에 사용할 PageController를 build 메서드 내부에 지역변수로 선언된 예제이다. class _PrayerDetailState extends State { // ... @override Widget build(BuildContext context) { final controller = PageController(initialPage: selectedPage); return PageView( controller: controller, // ... ); } } build 메서드는 위젯의 렌더링을 담당하는 메서드로 만드는 것이 좋다. b..