• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

주문 탭 에러

22.09.29 19:16 작성 조회수 507

0

안녕하세요. 수업 중 에러에 관해 질문 드립니다.

 

주문 탭 완성한 후에 에러가 발생했고, 아래와 같습니다.

에러관련 파일 : pagination_provider.dart

========Error=======

I/flutter ( 4231): FormatException: Invalid date format

I/flutter ( 4231): string

I/flutter ( 4231): #0 DateTime.parse (dart:core/date_time.dart:347:7)

 

관련 수업들 재차 확인해 보았고 오타는 없었습니다.

OrderModel 에서

final DateTime createdAt;

위의 것에서 에러가 나오는건지해서 제외시키고도 해보고,

intl 패키지 사용해서 DateFormatting을 다르게 해보았는데도 안되고 있습니다.

제가 확인해본바로는, OrderCard.fromModel빌드할때 에러가 발생하는것 같긴한데..OrderCard의 orderDate도 DateTime형식이고, OrderCard.fromModel의 crestaedAt도 DateTime형식인데 뭐가 문제인지 도무지 모르겠어서 여쭤봅니다.

답변 5

·

답변을 작성해보세요.

2

njw9108님의 프로필

njw9108

2023.02.05

이전 강의중에 Postman으로 Post/order API 테스트하는 부분이 있었는데 그때 createdAt 값을 string으로 넣어서 보내게 됩니다.

그래서 서버에는 string이란 값이 생기게 되구요.

해당 문제 발생하셨으면 서버 껐다가 다시 키면 됩니다 ㅎㅎ

1

BO님의 프로필

BO

2022.12.27

class DataUtils {
  static DateTime stringToDateTime(String value) {
    print(value);
    if (value is DateTime) {
      return DateTime.parse(value);
    } else {
      return DateTime.now();
    }
  }

flutter: 2022-12-27 13:36:49.579553

flutter: 2022-12-27 13:31:31.762230

flutter: 2022-12-27 12:34:25.638001

flutter: string

DateUtils.stringToDateTime을 수정해보세요~

1

kyj1님의 프로필

kyj1

질문자

2022.09.29

아래 강의 6:22초 부근 보시면 createdAt을 DateTime으로 지정합니다.

https://www.inflearn.com/course/%ED%94%8C%EB%9F%AC%ED%84%B0-%EC%8B%A4%EC%A0%84/unit/124050?category=questionDetail&q=662968

이 데이터 실제로 서버에서 보낼때 value가 시간을 String으로 보내는게 아니고 그냥 'string'이라고 보내옵니다. 이걸 DateTime으로 바꾸는걸 Data.Utils에서 하니 자꾸 에러가 났었습니다.

강의 따라오면 저처럼 에러 보신분들이 많을것같은데..

저는 현재시간으로 orderDate에 바인딩해서 해결했습니다. 알려드리려고 대댓글 답니다.

장태성님의 프로필

장태성

2022.09.29

바꾸신 코드 올려주실 수 있나요?

저도 안되네요...

0

안녕하세요.

제가 문제점을 살짝 이해 못한 것 같은데.

현재 서버에서는 시간을 String 형태로 보내주고 있는게 맞습니다.

그리고 OrderModel에서 파싱을 해주고있구요. 아래가 제가 저희가 같이 보고있는 코드로 예상됩니다.

@JsonSerializable()
class OrderModel implements IModelWithId {
  final String id;
  final List<OrderProductAndCountModel> products;
  final int totalPrice;
  final RestaurantModel restaurant;
  @JsonKey(
    fromJson: DataUtils.stringToDateTime,
  )
  final DateTime createdAt;

  OrderModel({
    required this.id,
    required this.products,
    required this.totalPrice,
    required this.restaurant,
    required this.createdAt,
  });

  factory OrderModel.fromJson(Map<String, dynamic> json) =>
      _$OrderModelFromJson(json);
}

JsonKey annotation을 사용해서 파싱을 해주고있기때문에

재대로 DateTime으로 파싱이 될것으로 예상됩니다.

어떤부분이 문제인지 조금 더 전후 설명을 해주시면 제가 다시 파악해보겠습니다.

BO님의 프로필

BO

2022.12.27

'마지막 데이터입니다 ㅠㅠ' 까지

DateTime.parse 해서 오류가 뜨는거 같아요.

g9191hc님의 프로필

g9191hc

2023.08.17

'마지막 데이터~' 부분은 통신이랑 상관없이 자체적으로 그리는거라 상관없을거에요

문제 있으신 분들은 아마 서버 재시작하시면 왠만하면 해결되실거에요

이유야 여러가지이겠지만, 서버에 잘못 된 값이 저장되어 있느경우가 있어서 그런 것 같아요

0

kyj1님의 프로필

kyj1

질문자

2022.10.02

지금 봤습니다. 그..orderDate: DateTime.now() 이런식으로 orderDate에 데이트 형식을 받게하면 될겁니다. 서버에서 createdAt 데이터형식이 date타입이 아니니 그냥 현재시간으로 맞춰주면 될겁니다. 서버에서 고치든지 저희가 고치든지 해야되는데 서버에서 고칠 자신없으면 그냥 이렇게하시면 됩니다.