23/03/28(flutter)

조영문·2023년 3월 28일
0

flutter

목록 보기
7/9

git

https://github.com/youngmoon97/flutter_example

yaml파일에 통신 추가

//dependencies 밑에
  http:
  flutter_hooks:
  provider:
  go_router:

통신

  1. 문자열이 날아옴
  2. 문자열 파싱(내가 필요한 타입으로 변경)
  3. jsonDecode
    -> dynamic
    (모든 타입으로 받을 수도 변경할 수도 있음)
    => 즉, 개발자 니가 알아서 파싱해
  4. 리스트로 캐스팅(형변환)
  5. DTO 객체 생성할 때 json데이터를 넣어줌
    (DTO를 편하게 쓰기 위해 factory 사용)

flutter 문법

future

자바스크립트 Promise에 대응되며, Future와 Promise는 모두 싱글스레드 환경에서 비동기 처리를 위해 존재한다.
동기적으로 처리할 경우 발생하는 낭비를 막고자 비동기를 이용해서 처리한다.

  • JS의 Promise는 특정 동작의 수행이 완료되면 다음 동작을 하겠다는 약속
  • Dart의 Future는 지금은 없지만 미래에 요청한
    데이터 혹은 에러가 담길 그릇

async / await

Dart의 비동기 처리를 위한 것으로 Future를 조금 더 용이하게 다루기 위한 키워드
1. await 키워드를 사용한 함수는 무조건 async함수이어야 한다.
2. async 함수는 무조건 Future를 반환해야 한다.
<동작방법>
1) await를 만나면 함수를 잠시 멈추고 함수를 호출한 곳에 Future를 return한다.
2) await가 붙은 동작이 완료되기 전까지 함수를 더 이상 진행하지 않는다.
3) return을 통해 1번에서 주었던 Future에서 return값이 나오게 한다.

Future<List<PostDTOTable>?> getDTOList() async{
    String url = "https://jsonplaceholder.typicode.com/posts";

    http.Response response = await http.get(Uri.parse(url));

      if(response.statusCode==200){ //http 상태 코드. 200은 정상 진행
       return PostDTOTable.fromJsonList(jsonDecode(response.body));
      }else{
        return null;
      }
    }
  }

싱글톤(Singleton pattern)

애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴
즉, 싱글톤 패턴은 '하나'의 인스턴스만 생성하여 사용하는 디자인 패턴이다. 메모리 낭비를 막기 위함이다.

//post_repository.dart
import 'dart:convert';

import 'package:flutter_http_1/post_dto.dart';
import 'package:http/http.dart' as http;

class PostRepository{
  //싱글톤 - 해당 타입의 객체가 프로그램에서 단 한개만 존재
  //스태틱 변수 선언
  static PostRepository? _instance;
  //첨에는 null이니까 ? 붙임. 지금은 인스턴스가 아니라 오브젝트 상태임

  //public 생성자 제거(public 생성자가 있으면 여러개 만들수 있어서 막아야됨)
  //dart에서 private는 맨 앞에 언더바(_)를 붙인다.
  PostRepository._canAnyName(){
    // count++;
    // print(count);
  } //생성자 이름은 아무거나 만들어도 상관없음 앞에다가 언더바 붙이기

  // static int count = 0;

  //변수 ?? 대체값
  //?? 뒤에는 변수가 null일 경우 대체값으로 들어가는(리턴되는) 내용
  //String str = [null일수도 있는 String]; 이면 에러나는데 String str = [null일수도 있는 String] ?? "값없음";은 가능
  //String str = "값없음";
  //계속 null이라서 부를때마다 새 객체가 호출됨
  //--------------------------------------------------------------------
  //변수 ??= 대입값
  //변수가 null일 경우 변수에 대입값을 넣고 리턴한다.
  //String str = [null일수도 있는 String] ??= "값이 없음";
  //String str = ["값이 없음"라는 값이 들어간 null일수도 있는 String];
  //위 단계에서 값이 들어가기 때문에 다음번 호출할때는 null 아님(새 객체는 한번만 생기고 다음부터는 원래 객체 불러져서 싱글톤 동작)

  //싱글톤 객체 getter
  static PostRepository get instance => _instance ??= PostRepository._canAnyName();

factory

생성자를 통해서 객체를 만들려고 하는데 처리가 번거로울 경우 어떠한 타입을 받아서 DTO 클래스 내부에서 객체 생성
/ 리턴 해주기 위함
factory / get 모양은 화살표 함수랑 비슷하지만 기능, 역할은 모두 다르다.

post_dto.dart

factory PostDTOTable.fromJson(dynamic json) => PostDTOTable(
       userId: json["userId"],
       id: json["id"],
       title: json["title"],
     );

list_page.dart

return PostDTOTable.fromJson(data);

0개의 댓글