[Flutter] 모바일 앱 개발 : Flutter 시작하기 #4 - First Flutter App (3)
안녕하세요. @anpigon 입니다.
이전 글 "모바일 앱 개발 : Flutter 시작하기 #3"에서 이어집니다. Flutter 튜토리얼 파트2의 1~5번까지의 과정을 따라하면서 학습하였습니다. 이번에는 하트 아이콘을 추가하고 단어를 즐겨찾기에 추가/제거하는 기능을 구현합니다.
이번에 구현한 완성된 앱의 동작 화면입니다.
목록에 하트 아이콘 추가하기
목록의 각 행에 하트 아이콘을 추가한다. 그리고 하트 아이콘을 누르면 즐겨찾기에 저장한다.
RandomWordsState 클래스에 _saved
Set을 추가한다. _saved
에는 사용자가 선택한 단어를 저장할 것이다. 참고로 Set에는 중복된 값이 허용되지 않는다.
class RandomWordsState extends State<RandomWords> {
final List<WordPair> _suggestions = <WordPair>[];
final Set<WordPair> _saved = new Set<WordPair>(); // 추가된 코드
final TextStyle _biggerFont = const TextStyle(fontSize: 18.0);
...
}
_buildRow()
함수에 alreadySaved
변수를 추가한다. alreadySaved는 해당 단어가 즐겨찾기에 추가되어 있는지 여부를 확인한다.
Widget _buildRow(WordPair pair) {
final bool alreadySaved = _saved.contains(pair); // 추가된 코드
...
}
이제 ListTile 객체에 하트 아이콘을 추가하여 즐겨찾기 기능을 구현해보자. 하트 아이콘은 ListTile의 trailing 속성을 사용하여 추가한다. trailing 속성은 일반적으로 제목 뒤에 아이콘 위젯을 표시 할때 사용된다. RandomWordsState 클래스의 _buildRow()
함수를 아래와 같이 수정한다.
Widget _buildRow(WordPair pair) {
final bool alreadySaved = _saved.contains(pair);
return new ListTile(
title: new Text(
pair.asPascalCase,
style: _biggerFont,
),
trailing: new Icon( // 여기서부터 추가된 코드 ...
alreadySaved ? Icons.favorite : Icons.favorite_border,
color: alreadySaved ? Colors.red : null,
), // ... 여기까지
);
}
안드로이드 스튜디오는 왼쪽 패널에서 아이콘 모양과 색상을 바로 확인할 수 있다.
이제 앱을 새로고침하면 목록에 하트 아이콘이 보인다.
아이폰 | 안드로이드 |
---|---|
![]() | ![]() |
즐겨찾기에 단어 저장하기
이번에는 목록에서 단어를 선택하면 즐겨찾기에 추가되도록 구현해보자. 이미 단어가 즐겨찾기에 추가된 경우에는 즐겨찾기에서 제거되도록 한다. 그리고 state가 변경되었음을 프레임워크에 알려주기 위해 setState()
함수를 호출하였다. 참고로 setState()
함수를 호출하면 State 객체의 build() 함수 호출이 트리거되어 UI가 업데이트된다.
아래와 같이 _buildRow
함수에 onTap 속성을 추가한다.
Widget _buildRow(WordPair pair) {
final alreadySaved = _saved.contains(pair);
return new ListTile(
title: new Text(
pair.asPascalCase,
style: _biggerFont,
),
trailing: new Icon(
alreadySaved ? Icons.favorite : Icons.favorite_border,
color: alreadySaved ? Colors.red : null,
),
onTap: () { // 여기서부터 추가된 코드 ...
setState(() {
if (alreadySaved) {
_saved.remove(pair);
} else {
_saved.add(pair);
}
});
}, // ... 여기까지
);
}
앱을 새로고침한다. 이제 원하는 단어를 선택하면 즐겨찾기에 추가 할 수 있다.
아이폰 | 안드로이드 |
---|---|
![]() | ![]() |
만약 앱이 제대로 작동하지 않는다면 lib/main.dart 코드를 참고하세요.
여기까지 읽어주셔서 감사합니다.
이전 글
- 모바일 앱 개발 : Flutter 시작하기 #1 - Get started
- 모바일 앱 개발 : Flutter 시작하기 #2 - First Flutter App (1)
- 모바일 앱 개발 : Flutter 시작하기 #3 - First Flutter App (2)
Sponsored ( Powered by dclick )
[트립스팀]할로윈을 즐기고 싶다면 에버랜드로!!(10/14-15)

이 글은 스팀 기반 광고 플랫폼
dclick 에 의해 작성 되었습니다.
@anpigon님 곰돌이 자다 깨서 보팅 왔어요. 그럼 전 다시 꿈나라로~ @gomdory 곰도뤼~
자는 동안에 곰돌이가 왔다 갔구나. 보팅 받고 가야지~ ㅋ
따라해보고 싶어요 어렵지 않을까요? 쌩초보 입문인데...🤧
쌩초보도 저만 따라하면 코딩 고수가 될 수 있습니다.👍
우어어어어어
내일은 캠핑가니까... 다음주 부터 따라 시작해야 겠습니다 ㅋㅋㅋㅋ
캠핑 잘 다녀오세요~ㅎㅎㅎ 다음주에는 kr-dev에도 [꾸준함이 답이다] 시리즈 올라오나요?
내일 대만 가는데 다녀오면 한번 쭈욱 따라해보고 싶네요~
대만 잘다녀오세요. 그리고 플러터 같이 공부해요~ㅋ
blockchainstudio님의 곰돌이 스파임대 회수를 부탁드립니다.
Hi @anpigon!
Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 2.450 which ranks you at #16851 across all Steem accounts.
Your rank has improved 37 places in the last three days (old rank 16888).
In our last Algorithmic Curation Round, consisting of 236 contributions, your post is ranked at #198.
Evaluation of your UA score:
Feel free to join our @steem-ua Discord server