토이 프로젝트를 시작한지 한달이 좀 넘었다.

라이버리의 버프를 받으며 이것저것 붙혀가며 앱을 구현하고 있지만

여럿 라이브러리를 적용해보고 또 나에게 맞게 코드를 커스텀 해보기도 하며

점점 완성시키고 있다.

한 70%? 정도 구현 됐다고 생각한다.

내년 2월까지는 꼭 앱 스토어에 출시까지 해보고싶다.

 

더불어 12월 중순부터는 GDG 송도 플러터 사이드프로젝트에 참여하게 되었다.
혼자 프로젝트를 진행할떄 정말 답답했는데 정말 잘됐다.

큰 성장이 기대된다.

 

 

토이프로젝트를 시작한지 벌써 몇주가 지났다.

생각만큼 진도가 나가진않아 답답할 뿐이다.

물어볼 사람도 없고 구글링에 한계가 있는거 같다.

마음맞는 사람을 만나 같이 팀을 꾸려서 완성시키고싶다.

지금까지 구현한 앱의 동작이다.

구현할게 산더미인데

우선적으로 내 머릴 제일 아프게하는것은

future/await이다.

해당 기능에 대해 대략적은 로직은 이해갔지만

막상 내 코드에 적용시키면 안된다....ㅜㅜ

구글링에 한계가 있다....

우선 다른것 부터 구현 중이긴 하다.

프로젝트를 시작하니

뭔가 재미가 많이 붙었다.

어떤식으로 구현할지 고민해보게 되고..

구현을 하면 많은 문제점들을 직면하고 또 해결하고..

시간은 많이 들지만 그래도 재미있다.

 

코드 하나하나 모두 이해하며 짜면 좋은데

아직은 그냥 이렇게 하는건가보다 하고 클론코딩?

더 나아가 내 프로젝트에 맞게 약간 응용하는 정도이다.

 

지난번 Splash 화면을 구현한뒤

BottomNavigationBar와 Theme.Mode, Get.bottomSheet

그리고 카운터를 구현했다.

카운터의 경우 아직 완벽하지는 않다. 좀 더 보완하여 올리도록 할것이다.

앱 동작을 보자

 

 

 

Get이 정말 좋은게 간단하게 다크모드와 라이트모드를 스위치할 수 있다.

Get.isDarkMode = 현재 다크모드인가?

True => ThemeMode.light  // 참이면 라이트모드로 변경

False => ThemeMode.dark // 거짓이면 다크모드로 변경

참 간단하다...

 

BottomNavigationBar도 간단하게 구현이 가능하다.

구성 페이지들을 Index로 만들어준뒤 BottomNavigationBar 내에서 지정해주기만 하면된다.

해당 소스는 비공개이다.. 유튜브나 구글에 찾아보면 쉽게 구현가능할것이다.

 

Get.bottomSheet 또한 쉽다..

근데 이 부분을 온보딩페이지로 구성할지 해당 시트로 구성할지 고민이지만....

ontap 안에 넣어주기만하면된다.

 

이처럼 별거 아닌 기능만 구현했는데 벌써 완성이 된거같은 김칫국을 마시지만

한편으로는 막막한 생각이 든다....

 

이전 시간과 비슷하게 ListView.builder를 만들어보자...

 

이번에는 라이브러리 LikeButton을 사용할것이다.

https://pub.dev/packages/like_button

 

like_button | Flutter Package

Like Button is a flutter library that allows you to create a button with animation effects similar to Twitter's heart when you like something.

pub.dev

새로운 프로젝트에 해당 라이브러리를 설치해주자

또 이번에도 이미지를 사용하오니

아래 링크에서 Image 파일을 다운로드 받아 assets 해주자(유튜브 코딩세프님의 자료)

https://github.com/icodingchef/list_page_lecture

 

우선 첫화면으로 뿌려줄 홈을 STF위젯으로 만들어준다.


Animal 클래스를 하나 만들고 생성자 또한 만들어주자.

이름, 위치, 이미지경로 를 갖고있다.

다음 이제 String타입의 이름, 위치, 이미지경로 리스트를 생성해준다.

 static List<String> animalName = [
    'Bear',
    'Camel',
    'Deer',
    'Fox',
    'Kangaroo',
    'Koala',
    'Lion',
    'Tiger'
  ];

  static List<String> animalLocation = [
    'forest and mountain',
    'dessert',
    'forest',
    'snow mountain',
    'Australia',
    'Australia',
    'Africa',
    'Korea'
  ];

  static List<String> animalImagePath = [
    'assets/bear.png',
    'assets/camel.png',
    'assets/deer.png',
    'assets/fox.png',
    'assets/kangaroo.png',
    'assets/koala.png',
    'assets/lion.png',
    'assets/tiger.png'
  ];
Animal 생성자에 리스트 값들을 넣어주기 위해 List.generate 해준다.
animalName의 길이만큼 인덱스를 넘긴다.
body 부분이다.
ListView.builder - Card - ListTile
onTap은 뒷 부분에서 구현하도록 한다.
leading은 맨 왼쪽에 오는 이미지부분이며
title은 animalName
subtitle은 animallocation 을 의미한다.
Navigator을 이용해 해당 페이지로 넘어가게 하자.

 

위와같이 기본 틀 코드를 작성해준뒤 이제 메인페이지에서 데이터를 받아보자

왼쪽과 같이 인자값을 받기위해 작성해주면 오른쪽과 같이 받은 데이터를 뿌려줄수있다.

이제 LikeButton을 구현해보자.

맨 위에 import를 시켜준뒤

 

작성해주면 기본값이 false, 0으로 설정되어
회색과 0으로 표기되고
눌러주면 true로 되며 1로 카운트 된다.

 

Getx를 배우고 있는데 노트북이 너무 버거워한다...

조만간 맥북으로 바꾸는것을 목표로 하고 잠시동안

가벼운 프로젝트만 돌리려고한다.

 

이번에는 앱 첫시작에 꼭 들어가는 Onboarding Page를 만들어보려고한다.

앱의 사용설명서 같은것이다.

역시나 외부 라이브러리를 이용할 예정이다.

라이브러리를 설치하는것은 여럿 안내를 했으니 스킵하도록 하겠다.

 

설치가 다됬으면 페이지에 쓰일 이미지를 준비해주자

이미지또한 yaml 파일에서 assets 시켜주자.

 

간단한 트리를 말하자면

OnboardingPage -> main page

이며 역으로 다시 이동도 가능하다.

 

코드와 같이 앱을 실행하면 온보딩 페이지가 뿌려지게

STL 위젯을 만들어준다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OnBoardingPage이다.

위 라이브러리를 설치하게되면

IntroductionScreen();

을 불러올 수 있다.

 

 

 

 

 

기본적인 틀이다.

pages는 페이지의 리스트이다.

각 페이지를 구현하는 코드는 PageViewModel이며

한개당 하나의 페이지를 그린다.

나는 위젯의 관리를 위해 body 대신 bodywidget을 사용했다.

사진에는 안나와있지만

image: 도 들어가야한다.

 

 

 

 

 

 

decoration 부분은 여럿페이지에 한번에 적용될것이니 따로 분리시켜줬다.

위와같이 PageViewModel 코드를 여러개 작성하면 그만큼 페이지가 나타날것이다.

구성이 완료되었다면.

이 처럼 데코레이션 코드를 작성해주자.

 

 

 

 

 

 

 

 

 

 

 

모든 페이지를 봤다면. 이제 앱의 메인페이지로 진입할때 사용된다. 마지막 페이지에서 보여진다.
다음 페이지로 넘어가기 위한 버튼에 대한 설정이다. 마지막을 제외한 페이지에서 보여진다.
모든 페이지를 보지않고 Skip하는 경우가 많다. 나 역시 그렇다. 이럴때 사용되며 누르면 마지막 페이지로 넘어간다.
페이지 구분 점에 대한 설정 코드들이다. 하나하나 만저보면 어떤 기능인지 감이 올것이다.

추가로...

해당 코드는 페이지 넘김 에니메이션 효과들이다. 

 

 

마지막으로 Main Page에 대한 코드이다.

코드중 pushReplacement를 push 대신 사용한 이유는 죄측상단에 뒤로가기버튼을 안생기게 하기 위함이다.

 

 

안드로이드 스튜디오 하나만 돌려도 cpu 100% 메모리 100%를 차지한다...

이거 참 큰일이다.

핫리로드를 자주쓰지만 자주 메모리땜에 에뮬이 꺼진다...

이럴때마다 에뮬을 다시키고 디버깅을 다시 해줘야하는데

너무 오래걸린다.

프로젝트가 점점 무거워질수록 더욱 이러는거같다.

얼른 맥북하나 장만해야겠다.

오늘 만든 앱이다.

코딩세프 유튜브를 보면된다.

나는 여기에 Amount 와 Count 를 초기화 하는 기능과

getDialog 기능을 추가로 구현했다.

내가 구현한 두가지 기능만 설명 하도록 하겠다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

먼저 CartController 클래스 부분이다.

유튜브에선 addToItem 부분까지만 나와있지만

초기화 시켜주는 것을 구현했다.

 

구현방식은 cartItems는 리스트이기에 .clear()을 통해 리스트를 초기화 했다.

그러면 해당 리스트는 비어있는 상태가 되어 Amount 와 length 모두 0으로 될것이다.

호출 코드이다.

 

 

 

 

 

 

 

 

Get.defaultDialog를 사용하면 되며

기본적으로 title 과 middleText 부분만 작성하면 된다.

+ Recent posts