Slide 12
Slide 12 text
Riverpod Generateor & freezedを利用した処理例(1)
@freezedによるコード自動生成ベースの実装
@freezed
class Comment with _$Comment {
// プロパティを定義する
const factory Comment({
required String id,
required String bookId,
required String userId,
required String content,
required DateTime createdAt,
}) = _Comment;
// JSON形式で受け取るためのコードを定義する
factory Comment.fromJson(Map json) => _$CommentFromJson(json);
// Firestoreからデータを受け取ってJSON形式に変換する
factory Comment.fromFirestore(DocumentSnapshot doc) {
final data = doc.data() as Map;
return Comment.fromJson({
...data,
'id': doc.id,
'createdAt': (data['createdAt'] as Timestamp).toDate().toIso8601String(),
});
}
}
@freezed
class Book with _$Book {
// プロパティを定義する
const factory Book({
required String id,
required String title,
required String author,
required String summary,
required String isbn,
required String userId,
required DateTime createdAt,
}) = _Book;
// JSON形式で受け取るためのコードを定義する
factory Book.fromJson(Map json) => _$BookFromJson(json);
// Firestoreからデータを受け取ってJSON形式に変換する
factory Book.fromFirestore(DocumentSnapshot doc) {
final data = doc.data() as Map;
return Book.fromJson({
...data,
'id': doc.id,
'createdAt': (data['createdAt'] as Timestamp).toDate().toIso8601String(),
});
}
}