ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 12일
    교육/9주완성!프로젝트캠프-플러터 2023. 10. 22. 11:49
    728x90

    67강. 생활 Widget

    Widgets

    • stack
      • 위젯을 쌓고 싶을 때 사용, Positioned 위젯과 함께 사용
    • Divider
      • 구분선을 넣고 싶을 때 사용
    • AnimatedOpacity
      • (불투명도 애니메이션)Opacity 값을 바꿔주면 사이값을 자동으로 애니메이션 효과 적용
    • AnimatedContainer
      • 캐치되는 속성값을 감지하는 애니메이션
    • AspectRatio
      • 자식 위젯의 사이즈 비율을 정확히 맞춰야 할 때(보통 비디오를 넣어야할 때 4:3, 정사각형을 보여줄 때 1:1)
    • Wrap
      • Row는 화면에 벗어나면 안되지만, Wrap은 다음 줄로 넘어가도록 하게 함

    Packages

    • url_launcher
      • 전화걸기, 메세지보내기, 특정 URL웹으로 이동, (카카오톡 채널로 이동)
    • cahed_network_image
      • 이미지를 캐싱할 수 있도록 함
    • intl
      • 화폐표시, 시간 표시

    68강. shared_preferences

    데이터를 어디에 둘 것인가?(로컬 vs 서버)

    앱 내에서 데이터를 잠깐 저장해야할 때가 있음, 어플은 꺼지면 내용이 초기화됨

    앱 내에서 데이터를 저장할 수 있는 경우 저장해주는 것이 좋음(앱 내에서도 사용될 중요하지 않은 가벼운 데이터)

    어떠한 데이터들이 앱 내에 저장되어야할까?

    로컬기반 어플, 자동로그인, 장바구니, 동영상 시청기록

    앱을 종료해도 불러와서 사용할 수 있는 데이터

    앱 내에 저장하는 데이터, 흔히 앱 데이터 라고 하며  언제든 저장하고 불러와서 사용 가능

    기본 순서는 아래와 같음

    1. 앱 데이터 접근 "객체" 초기화
    2. 내용 저장
    3. 내용 불러오기

    앱 내 데이터를 구현하는 패키지를 이용하면 구현 가능

    69강. 키오스크 앱 업그레이드 - 2

    생략

    70강. class

    객체지향의 꽃

    class는 제작서(레시피), 건물로 치면 설계도

    내가 만들고 싶은 게 무엇인지 정의

    클래스(제작서)를 통해 생성된 결과물이 객체(Object) or 인스턴스(instance)라고 불림

    하나의 클래스로 여러 개의 결과물을 만들 수 있음

    71강. constructor

    클래스는 크게 3개로 나뉨

    • 멤버변수
      • (클래스)객체 내에서 사용할 수 있는 변수들
    • 멤버함수
      • (클래스)객체 내에서 사용할 수 있는 함수들
    • 생성자
      • 객체를 생성할 수 있는 생성함수

    클래스 생성자(Constructor)

    객체를 생성해주는 핵심 함수이며, 생성자 함수라고 불리움

    생성자가 없으면 객체를 생성해서 변수에 넣어주지 못함

    클래스명을 넣고 필수 멤버 변수를 괄호 안에 다 넣어주면 됨

    //방식1.이름없는 생성자(Unnamed constructor)
    class User{
        //멤버 변수
        final name;
        
        //생성자 함수
        User(this.name);
    }
    
    void main(){
        var user1=User("teddy");
        var user2=User("Zzang-yeah");
    }
    
    //방식2.이름있는 생성자(Named constructor)
    class User{
        //멤버 변수
        String name;
        
        //생성자 함수
        User.withName(String inputName) :
            name=inputName;
    }
    
    void main(){
        var user1=User.withName("teddy");
        var user2=User.withName("Zzang-yeah");
    }

    속성값도 명확히 나타내고 싶다면?

    =>선택 매개변수

    curly bracket({})로 감싼다

    class User{
        //멤버 변수
        String name;
        
        //생성자 함수
        User.withName({required this.name});
    }
    
    void main(){
        var user1=User.withName(name:"teddy");
        var user2=User.withName(name:"Zzang-yeah");
    }

    이 때, 주의할 점은 name은 선택 매개변수이기때문에 무조건 값이 들어와야한다는 의미인 required키워드를 사용

    why?name에는 String이 들어와야하는데 "선택"을 안 하고 매개변수를 입력하지 않으면 곧 NULL이기 때문

    플러터에서 required의 값이 의미하는 바가 아래와 같음 

    Dart : 소중한 매개변수들을 선택해서 넣겠다고?그러면 필수 키워드라도 붙여주셈 null값은 노인정

    생성자의 역할

    객체를 생성할 수 있음

    객체를 생성할 때 class에 정의해둔 레시피대로 만들어야 하기 때문에, 변수를 다 채워야함

    • this.의 뜻은 나중에 변수명이 들어갈 공간이라고 생각
    • var friend1=Human(...);라고 코드를 작성했을 떄, this.가 곧 friend1이 되기 위해 this라는 키워드가 붙음
    class Human{
        //멤버 변수
        String name;
        double height;
        int cash;
        int age;
        Human? girlfriend;
        Human? boyfriend;
        List<human>? friends;
        
        //생성자 함수
        Human(this.name, this.heigth, this.cash, this.age, this.girlfriend, this.friends);
    }

    72강. Dart: Method, Flutter에서의 활용

    멤버 함수(메소드)

    이 클래스로 만든 객체들이 사용할 수 있는 능력들(함수들)

    eat(String foodName){
        print("파오후파오후 $foodName주세요 현기증 난단말이예요");
        weight+=1;
    }
    
    workout(int hours){
        print("하기싫다 하지만 돈벌어야지,,,$hours만 빡집중해야지");
        weigth-=0.1;
    }
    
    getMoney(int amount){
        cash+=amount;
    }
    
    spendMoney(int amount){
        cash-=amount;
    }

    클래스 멤버 함수(메소드)

    class Human {
        //멤버 변수
        String name;
        double weight;
        int cash;
        int age;
        Human? girlfriend;
        List<Human>? friends;
        
        //생성자 함수
        Human(this.name, this.weight, this.cash, this.age, this.girlfriend, this.friends);
        
        //멤버 함수(메서드)
        eat(String foodName){
            print("파오후파오후 $foodName주세요 현기증 난단말이예요");
            weight+=1;
        }
    
        workout(int hours){
            print("하기싫다 하지만 돈벌어야지,,,$hours만 빡집중해야지");
            weigth-=0.1;
        }
    
        getMoney(int amount){
            cash+=amount;
        }
    
        spendMoney(int amount){
            cash-=amount;
        }
    }
    class User{
        String userId;
        String profileImage;
        String nickname;
        DateTime vreated;
        DateTime updated;
        DateTime visited;
        List<User> followers;
        List<User> followings;
        List<User> blocked;
        List<Feed> feeds;
        
        User(this.userId, this.profileImage, this.nickname, this.created, this.updated, this.visited, this.followers, this.followings, this.blocked, this.feeds);
        
        Future<bool> addFollwer(User follower) async {
            var res=await dio.get("팔로워 넣기 url", {"userId":follwer.userId});
            if (res.status == 200){
                followers.add(follower);
                return true;
            }
        }
    }

    Flutter 73강. fromMap, toMap

    생성자를 통한 객체 생성

    //클래스 정의
    class Word{
        String word;
        String meaning;
        String example;
    }
    
    //생성자 추가
    Word){required this.word, required this.meaning, required this.example})
    
    //객체 생성
    void main(){
        var word = Word(word:"Apple",meaning:"사과",example:"애플로고")
    }

    매번 이렇게 넣어주긴 힘듦

    네트워크의 데이터는 JSON타입

    Dart에는 JSON타입과 비슷한 MAP데이터타입이 있음

    내가 입력하지 않고도 Map자체를 전달하면 객체를 생성해주면??

    Map<String, dynamic> word={
        "word":"Apple",
        "meaning":"사과",
        "example":"애플덕후인 것을 보니 사과농사를 잘 짓겠구나",
    };
    //생성자 하나 더 추가(이름있는 생성자, fromMap)
    Word.fromMap(Map<String, dynamic> map):
        word=map["word"],
        meaning=map["meaning"],
        example=map["example"];
    //fromMap을 통한 객체 생성
    void main() {
        Map<String, dynamic> word={
            "word":"Apple",
            "meaning":"사과",
            "example":"애플제품이 많은 걸 보니 사과농사를 짓고 있구나",
        };
    }

    반대로 toMap은

    서버에다가 해당 객체내용을 보내야할 때 주로 사용(백엔드 스펙에 따라 다름)

    Map을 배출해주는(toMap) 멤버 함수 추가

    Map<String, dynamic> toMap() =>{
        "word":word, 
        "meaning":meaning,
        "example":example,
    };

    Flutter 74강. toString,override

    Flutter는 모든 게 다 위젯이다

    Dart에서는 모든 것이 Object로 다뤄진다

    @override:기존의 (부모)기능을 새로 재정의한다

     

    본 후기는 유데미-스나이퍼팩토리 9주 완성 프로젝트캠프 학습 일지 후기로 작성 되었습니다.

    '교육 > 9주완성!프로젝트캠프-플러터' 카테고리의 다른 글

    14일  (0) 2023.10.22
    13일  (0) 2023.10.22
    10일  (0) 2023.10.15
    9일  (0) 2023.10.05
    2주차 과제  (0) 2023.09.29

    댓글

Designed by Tistory.