42 lines
1.1 KiB
Dart
42 lines
1.1 KiB
Dart
|
|
import 'package:flutter/material.dart';
|
||
|
|
|
||
|
|
import 'detail_hero_panel.dart';
|
||
|
|
import '../model/detail_view_state.dart';
|
||
|
|
import '../../../shared/widgets/app_loading_ring.dart';
|
||
|
|
|
||
|
|
|
||
|
|
class DetailViewRenderer extends StatelessWidget {
|
||
|
|
final DetailViewState state;
|
||
|
|
|
||
|
|
const DetailViewRenderer({super.key, required this.state});
|
||
|
|
|
||
|
|
@override
|
||
|
|
Widget build(BuildContext context) {
|
||
|
|
final hero = state.hero;
|
||
|
|
return Column(
|
||
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||
|
|
children: [
|
||
|
|
DetailHeroPanel(
|
||
|
|
title: hero.title,
|
||
|
|
logoUrl: hero.logoUrl,
|
||
|
|
posterUrl: hero.posterUrl,
|
||
|
|
imageHeaders: hero.imageHeaders,
|
||
|
|
rating: hero.rating,
|
||
|
|
metaParts: hero.metaParts,
|
||
|
|
genres: hero.genres,
|
||
|
|
overview: hero.overview,
|
||
|
|
tagline: hero.tagline,
|
||
|
|
actions: hero.actions,
|
||
|
|
),
|
||
|
|
for (final section in state.sections) section.child,
|
||
|
|
if (state.showLoadingBelowHero)
|
||
|
|
const Padding(
|
||
|
|
padding: EdgeInsets.symmetric(vertical: 32),
|
||
|
|
child: Center(child: AppLoadingRing()),
|
||
|
|
),
|
||
|
|
const SizedBox(height: 32),
|
||
|
|
],
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|