feature: Add guest actors to episode view (#299)

Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
PartyDonut 2025-04-05 22:19:24 +02:00 committed by GitHub
parent 71eab225f9
commit 7a50e0cb0f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 55 additions and 7 deletions

View file

@ -17,11 +17,13 @@ import 'package:fladder/screens/shared/media/components/media_play_button.dart';
import 'package:fladder/screens/shared/media/episode_posters.dart';
import 'package:fladder/screens/shared/media/expanding_overview.dart';
import 'package:fladder/screens/shared/media/external_urls.dart';
import 'package:fladder/screens/shared/media/people_row.dart';
import 'package:fladder/util/adaptive_layout.dart';
import 'package:fladder/util/item_base_model/item_base_model_extensions.dart';
import 'package:fladder/util/item_base_model/play_item_helpers.dart';
import 'package:fladder/util/list_padding.dart';
import 'package:fladder/util/localization_helper.dart';
import 'package:fladder/util/people_extension.dart';
import 'package:fladder/util/router_extension.dart';
import 'package:fladder/util/widget_extensions.dart';
import 'package:fladder/widgets/shared/selectable_icon_button.dart';
@ -46,6 +48,8 @@ class _ItemDetailScreenState extends ConsumerState<EpisodeDetailScreen> {
final wrapAlignment =
AdaptiveLayout.viewSizeOf(context) != ViewSize.phone ? WrapAlignment.start : WrapAlignment.center;
final actors = details.episode?.overview.people ?? [];
return DetailScaffold(
label: widget.item.name,
item: details.episode,
@ -155,6 +159,16 @@ class _ItemDetailScreenState extends ConsumerState<EpisodeDetailScreen> {
ref.read(providerInstance.notifier).fetchDetails(widget.item);
},
),
if (actors.mainCast.isNotEmpty == true)
PeopleRow(
people: actors.mainCast,
contentPadding: padding,
),
if (actors.guestActors.isNotEmpty == true)
PeopleRow(
people: actors.guestActors,
contentPadding: padding,
),
if (details.episodes.length > 1)
EpisodePosters(
contentPadding: padding,

View file

@ -17,6 +17,7 @@ import 'package:fladder/screens/shared/media/person_list_.dart';
import 'package:fladder/util/item_base_model/item_base_model_extensions.dart';
import 'package:fladder/util/list_padding.dart';
import 'package:fladder/util/localization_helper.dart';
import 'package:fladder/util/people_extension.dart';
import 'package:fladder/util/string_extensions.dart';
import 'package:fladder/util/theme_extensions.dart';
import 'package:fladder/util/widget_extensions.dart';
@ -154,9 +155,14 @@ class _SeasonDetailScreenState extends ConsumerState<SeasonDetailScreen> {
episodes: details.episodes,
padding: padding,
),
if (details.overview.people.isNotEmpty)
if (details.overview.people.mainCast.isNotEmpty)
PeopleRow(
people: details.overview.people,
people: details.overview.people.mainCast,
contentPadding: padding,
),
if (details.overview.people.guestActors.isNotEmpty)
PeopleRow(
people: details.overview.people.guestActors,
contentPadding: padding,
),
if (details.overview.externalUrls?.isNotEmpty == true)

View file

@ -1,4 +1,3 @@
import 'package:fladder/models/settings/home_settings_model.dart';
import 'package:flutter/material.dart';
import 'package:auto_route/auto_route.dart';
@ -7,6 +6,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fladder/models/item_base_model.dart';
import 'package:fladder/models/items/series_model.dart';
import 'package:fladder/models/settings/home_settings_model.dart';
import 'package:fladder/providers/items/series_details_provider.dart';
import 'package:fladder/providers/user_provider.dart';
import 'package:fladder/screens/details_screens/components/overview_header.dart';

View file

@ -1,4 +1,9 @@
import 'package:flutter/material.dart';
import 'package:animations/animations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fladder/jellyfin/jellyfin_open_api.enums.swagger.dart';
import 'package:fladder/models/items/item_shared_models.dart';
import 'package:fladder/screens/details_screens/person_detail_screen.dart';
import 'package:fladder/screens/shared/flat_button.dart';
@ -8,8 +13,6 @@ import 'package:fladder/util/localization_helper.dart';
import 'package:fladder/util/string_extensions.dart';
import 'package:fladder/widgets/shared/clickable_text.dart';
import 'package:fladder/widgets/shared/horizontal_list.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class PeopleRow extends ConsumerWidget {
final List<Person> people;
@ -36,7 +39,9 @@ class PeopleRow extends ConsumerWidget {
}
return HorizontalList(
label: context.localized.actor(people.length),
label: people.any((e) => e.type != PersonKind.gueststar)
? context.localized.castAndCrew
: context.localized.guestActor(people.length),
height: AdaptiveLayout.poster(context).size * 0.9,
contentPadding: contentPadding,
items: people,