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의 메소드를 호출 할 수 있다.