dev/flutter

[Flutter] 5. 기능 추가

캄춰 2023. 11. 23. 14:41
728x90
반응형

2023.11.23 - [dev/flutter] - [Flutter] 4. 위젯 수정

 

[Flutter] 4. 위젯 수정

2023.11.23 - [dev/flutter] - [Flutter] 3. 버튼 만들기 [Flutter] 3. 버튼 만들기 2023.11.23 - [dev/flutter] - [Flutter] 2. 초기 프로젝트 실행 [Flutter] 2. 초기 프로젝트 실행 2023.11.23 - [dev/flutter] - [Flutter] 1. 초기 세팅 [F

cavedwellers.co.kr

 

가이드 링크 : https://codelabs.developers.google.com/codelabs/flutter-codelab-first?hl=ko#5

 

 

가이드에서는 'Next'옆에 또다른 버튼 기능을 넣으려 한다.

해당 기능 코드는 다음과 같다

// 비즈니스 로직
class MyAppState extends ChangeNotifier {
  var current = WordPair.random();

  void getNext() {
    current = WordPair.random();
    notifyListeners();
  }

  // add the code
  var favorites = <WordPair>[];   // 배열인가?

  void toggleFavorite() {
    if (favorites.contains(current)) {
      favorites.remove(current);
    } else {
      favorites.add(current);
    }

    notifyListeners();
  }
}

: toggleFavorite()함수를 사용하면 favorites배열에 포함되어 있지 않으면 추가하고,

: 있다면 삭제하는 로직이다.

: 버튼 기능의 목표인 좋아요를 하였다가 취소하는 방식이라고 이해하면 된다.

 

 

Next버튼 옆에 두기 위해서 Row로 Wrap해준다.

: MainAxisSize는 max=모든 공간 차지 / min=wrap_content 크기 만큼만 조절되는 것

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var appState = context.watch<MyAppState>();
    var pair = appState.current;

    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // Text('A random AWESOME idea:'),
            // Text(appState.current.asLowerCase),
            BigCard(pair: pair),
            SizedBox(height:10),
        
            // Add Button
            Row(
              mainAxisSize: MainAxisSize.min,
              children: [
                ElevatedButton(
                  onPressed: () {
                   appState.getNext();
                  }, 
                  child: Text('Next')
                ),
              ],
            )
          ],
        ),
      ),
    );
  }
}

 

 

 

내가 직접 짠 좋아요 버튼...

                ElevatedButton(
                  onPressed: () {
                    appState.toggleFavorite();
                  }, 
                  child: Text("Like")
                  ),

: 뭔가 대강 느낌은 알겠지만...

: 플루터란 아두이노에 대한 자신감과는 다른 느낌의 영역이다.

 

layout_margin은 어떻게 주는 것일까..?

: SizeBox(width: 10) 이걸로 중간에 margin을 주는구나?

 

아이콘 버튼은 'ElevatedButton.Icon()'을 사용하고,

: onPressed

: icon: Icon(icon)   // IconData icon;

: label: Text('like')    // 이렇게 설정

    // Heart Icon
    IconData icon;
    if (appState.favorites.contains(pair)) {
      icon = Icons.favorite;
    } else {
      icon = Icons.favorite_border;
    }
    
    
            Row(
              mainAxisSize: MainAxisSize.min,
              children: [
                /*ElevatedButton(
                  onPressed: () {
                    appState.toggleFavorite();
                  }, 
                  child: Text("Like")
                  ), */
                ElevatedButton.icon (
                  onPressed: () {
                    appState.toggleFavorite();
                  },
                  icon: Icon(icon),
                  label: Text('like'),
                ),

                SizedBox(width: 10,), // margin역할을 너가 하는구나

                ElevatedButton(
                  onPressed: () {
                   appState.getNext();
                  }, 
                  child: Text('Next')
                 ),
              ],
            )

 

 

참... 나중에 내가 애용하는 언어가 되면 좋겠지만,

지금은 정말 별로인 언어 같구나~

728x90
반응형

'dev > flutter' 카테고리의 다른 글

[Flutter] ElevatedButton 배경 색상 넣기  (0) 2023.12.08
[Flutter] 위젯 정리  (0) 2023.12.07
[Flutter] 4. 위젯 수정  (0) 2023.11.23
[Flutter] 3. 버튼 만들기  (0) 2023.11.23
[Flutter] 2. 초기 프로젝트 실행  (0) 2023.11.23