작성
·
672
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
이전 강의중에 Postman으로 Post/order API 테스트하는 부분이 있었는데 그때 createdAt 값을 string으로 넣어서 보내게 됩니다.
그래서 서버에는 string이란 값이 생기게 되구요.
해당 문제 발생하셨으면 서버 껐다가 다시 키면 됩니다 ㅎㅎ
1
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
아래 강의 6:22초 부근 보시면 createdAt을 DateTime으로 지정합니다.
이 데이터 실제로 서버에서 보낼때 value가 시간을 String으로 보내는게 아니고 그냥 'string'이라고 보내옵니다. 이걸 DateTime으로 바꾸는걸 Data.Utils에서 하니 자꾸 에러가 났었습니다.
강의 따라오면 저처럼 에러 보신분들이 많을것같은데..
저는 현재시간으로 orderDate에 바인딩해서 해결했습니다. 알려드리려고 대댓글 답니다.
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으로 파싱이 될것으로 예상됩니다.
어떤부분이 문제인지 조금 더 전후 설명을 해주시면 제가 다시 파악해보겠습니다.
0
지금 봤습니다. 그..orderDate: DateTime.now() 이런식으로 orderDate에 데이트 형식을 받게하면 될겁니다. 서버에서 createdAt 데이터형식이 date타입이 아니니 그냥 현재시간으로 맞춰주면 될겁니다. 서버에서 고치든지 저희가 고치든지 해야되는데 서버에서 고칠 자신없으면 그냥 이렇게하시면 됩니다.
바꾸신 코드 올려주실 수 있나요?
저도 안되네요...