Search

#019 #모두의 블로그 2

spring-blog-riverpod-server
kdit-2024

fetchPostList 생성

통신해서 받은 것을 통으로 만들면 된다.

import 'package:flutter_blog/data/models/user.dart'; import 'package:intl/intl.dart'; class Post { int id; String title; String content; DateTime createdAt; DateTime updatedAt; User user; Post({ required this.id, required this.title, required this.content, required this.user, required this.createdAt, required this.updatedAt, }); Post.fromJson(Map<String, dynamic> json) : id = json["id"], title = json["title"], content = json["content"], user = User.fromJson(json["user"]), createdAt = json["createdAt"], updatedAt = json["updatedAt"]; }
Java
복사
import 'package:intl/intl.dart'; class User { final int id; final String username; final String email; final String imgUrl; final DateTime? createdAt; final DateTime? updatedAt; User({ required this.id, required this.username, required this.email, required this.imgUrl, required this.createdAt, required this.updatedAt, }); // 응답 받은 데이터를 json 처럼 생긴 Map => Dart 오브젝트로 변환하는 함수 User.fromJson(Map<String, dynamic> json) : id = json["id"], username = json["username"], email = json["email"], imgUrl = json["imgUrl"], createdAt = json["created"], updatedAt = json["created"]; }
Java
복사

Paging 객

StateNofierProvider → ViewModel

viewmodel을 쓰는 페이지 바로 옆에 둬라.

창고 이름 컨벤션

페이지이름 모델

중괄호는 map타입, 나머지는 dynamic타입

Post가 한 건도 없는 경우엔 이렇게

통신코드

서버가 항상 일관된 데이터를 줘야된다. 서버측에서 생길수 있는 에러는 다 잡아서 줘야된다.

@ExceptionHandler(Exception.class) public ResponseEntity<?> unknownServerError(Exception e){ log.error(e.getMessage()); ApiUtil.ApiResult<?> apiResult = ApiUtil.error("unknown server error", HttpStatus.INTERNAL_SERVER_ERROR); return new ResponseEntity<>(apiResult, HttpStatus.INTERNAL_SERVER_ERROR); }
Java
복사
에러가 나도 항상 같은 형태가 나와야 되기때문에, 모든 에러를 잡는 이코드가 있어야 된다. 에러로그를 File로 저장해야된다. Files.writes해야된다.
그렇게 프론트는 이형태가 올것이라는 것을 믿고 코드를 짜야된다.

메인에서 테스트 할 때는 비동기로 처리해야된다.

인터프리터 언어랑 컴파일언어가 다르기 때문에 인터프리터에서는 실행시켜봐야지 어떤 타입인지 알 수가 있다.

파싱 코드

런타임에 타입이 정해지기 떄문에, 인터프리터 언어는 명시적으로 타입을 정해주어야 코드를 짤 수가 있다.

DateTime 타입 때문에 터질 수도 있다. 프론트에서 파싱을 해야한다.

intl라이브러리로 파싱할 수 있다. DateFormat 클래스 사

1. 응답 데이터 2. 응답 데이터 내부의 컬렉션 3. 컬렉션의 첫번째 요소 타

바로 다운 캐스팅 하는 문

ScaffoldKey

class PostListPage extends StatelessWidget { // TODO: 궁금증 2 scaffoldKey final scaffoldKey = GlobalKey<ScaffoldState>();
Java
복사
해당 scaffoldKey를 글로벌 키로 선언하면 해당 페이지에서 scaffold의 메소드를 호출 할 수 있다.