v1.4.0+61
All checks were successful
Flutter Schmutter / build (push) Successful in 3m48s

This commit is contained in:
2025-06-19 21:45:00 +02:00
parent 0d792fdf46
commit 2b5aaad331
30 changed files with 1073 additions and 1113 deletions

17
lib/models/feed.dart Normal file
View File

@ -0,0 +1,17 @@
import 'package:f0ckapp/models/item.dart';
class Feed {
final bool atEnd;
final bool atStart;
final List<MediaItem> items;
Feed({required this.atEnd, required this.atStart, required this.items});
factory Feed.fromJson(Map<String, dynamic> json) {
return Feed(
atEnd: json['atEnd'] ?? false,
atStart: json['atStart'] ?? false,
items: (json['items'] as List).map((e) => MediaItem.fromJson(e)).toList(),
);
}
}

View File

@ -5,7 +5,7 @@ class MediaItem {
final int stamp;
final String dest;
final int mode;
final List<Tag> tags;
final List<Tag>? tags;
final List<Favorite>? favorites;
MediaItem({
@ -15,10 +15,15 @@ class MediaItem {
required this.stamp,
required this.dest,
required this.mode,
required this.tags,
required this.favorites,
this.tags = const [],
this.favorites = const [],
});
String get thumbnailUrl => 'https://f0ck.me/t/$id.webp';
String get mediaUrl => 'https://f0ck.me/b/$dest';
String get coverUrl => 'https://f0ck.me/ca/$id.webp';
String get postUrl => 'https://f0ck.me/$id';
MediaItem copyWith({
int? id,
String? mime,
@ -42,27 +47,6 @@ class MediaItem {
}
factory MediaItem.fromJson(Map<String, dynamic> json) {
List<Tag> parsedTags = [];
if (json['tags'] is List) {
parsedTags = (json['tags'] as List<dynamic>)
.map((tagJson) => Tag.fromJson(tagJson as Map<String, dynamic>))
.toList();
} else {
parsedTags = [];
}
List<Favorite> parsedFavorites = [];
if (json['favorites'] is List) {
parsedFavorites = (json['favorites'] as List<dynamic>)
.map(
(favoritesJson) =>
Favorite.fromJson(favoritesJson as Map<String, dynamic>),
)
.toList();
} else {
parsedFavorites = [];
}
return MediaItem(
id: json['id'],
mime: json['mime'],
@ -70,15 +54,18 @@ class MediaItem {
stamp: json['stamp'],
dest: json['dest'],
mode: json['mode'],
tags: parsedTags,
favorites: parsedFavorites,
tags:
(json['tags'] as List<dynamic>?)
?.map((e) => Tag.fromJson(e))
.toList() ??
[],
favorites:
(json['favorites'] as List<dynamic>?)
?.map((e) => Favorite.fromJson(e))
.toList() ??
[],
);
}
String get thumbnailUrl => 'https://f0ck.me/t/$id.webp';
String get mediaUrl => 'https://f0ck.me/b/$dest';
String get coverUrl => 'https://f0ck.me/ca/$id.webp';
String get postUrl => 'https://f0ck.me/$id';
}
class Tag {
@ -99,15 +86,19 @@ class Tag {
class Favorite {
final int userId;
final String user;
final String username;
final int avatar;
Favorite({required this.userId, required this.user, required this.avatar});
Favorite({
required this.userId,
required this.username,
required this.avatar,
});
factory Favorite.fromJson(Map<String, dynamic> json) {
return Favorite(
userId: json['user_id'],
user: json['user'],
username: json['user'],
avatar: json['avatar'],
);
}