mirror of
https://github.com/simon-ding/polaris.git
synced 2026-04-21 03:07:30 +08:00
feat: add detail tv ui
This commit is contained in:
@@ -54,10 +54,12 @@ class SeriesDetails {
|
||||
String? name;
|
||||
String? originalName;
|
||||
String? overview;
|
||||
String? path;
|
||||
String? posterPath;
|
||||
String? createdAt;
|
||||
List<Episodes>? episodes;
|
||||
String? resolution;
|
||||
int? storageId;
|
||||
String? airDate;
|
||||
|
||||
SeriesDetails(
|
||||
{this.id,
|
||||
@@ -65,9 +67,11 @@ class SeriesDetails {
|
||||
this.name,
|
||||
this.originalName,
|
||||
this.overview,
|
||||
this.path,
|
||||
this.posterPath,
|
||||
this.createdAt,
|
||||
this.resolution,
|
||||
this.storageId,
|
||||
this.airDate,
|
||||
this.episodes});
|
||||
|
||||
SeriesDetails.fromJson(Map<String, dynamic> json) {
|
||||
@@ -76,9 +80,11 @@ class SeriesDetails {
|
||||
name = json['name_cn'];
|
||||
originalName = json['original_name'];
|
||||
overview = json['overview'];
|
||||
path = json['path'];
|
||||
posterPath = json['poster_path'];
|
||||
createdAt = json['created_at'];
|
||||
resolution = json["resolution"];
|
||||
storageId = json["storage_id"];
|
||||
airDate = json["air_date"];
|
||||
if (json['episodes'] != null) {
|
||||
episodes = <Episodes>[];
|
||||
json['episodes'].forEach((v) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:quiver/strings.dart';
|
||||
import 'package:ui/providers/APIs.dart';
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:ui/providers/APIs.dart';
|
||||
import 'package:ui/providers/series_details.dart';
|
||||
import 'package:ui/providers/settings.dart';
|
||||
import 'package:ui/utils.dart';
|
||||
import 'package:ui/weclome.dart';
|
||||
import 'package:ui/widgets/progress_indicator.dart';
|
||||
@@ -38,6 +39,7 @@ class _TvDetailsPageState extends ConsumerState<TvDetailsPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var seriesDetails = ref.watch(seriesDetailsProvider(seriesId));
|
||||
var storage = ref.watch(storageSettingProvider);
|
||||
return FutureBuilder(
|
||||
// We listen to the pending operation, to update the UI accordingly.
|
||||
future: _pendingFuture,
|
||||
@@ -93,7 +95,7 @@ class _TvDetailsPageState extends ConsumerState<TvDetailsPage> {
|
||||
tilePadding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
|
||||
childrenPadding: const EdgeInsets.fromLTRB(50, 0, 50, 0),
|
||||
initiallyExpanded: k == 0 ? false : true,
|
||||
title: k == 0 ? const Text("特集") :Text("第 $k 季"),
|
||||
title: k == 0 ? const Text("特集") : Text("第 $k 季"),
|
||||
children: m[k]!,
|
||||
);
|
||||
list.add(seasonList);
|
||||
@@ -123,8 +125,32 @@ class _TvDetailsPageState extends ConsumerState<TvDetailsPage> {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Text("${details.resolution}"),
|
||||
const SizedBox(
|
||||
width: 30,
|
||||
),
|
||||
storage.when(
|
||||
data: (value) {
|
||||
for (final s in value) {
|
||||
if (s.id == details.storageId) {
|
||||
return Text(
|
||||
"${s.name}(${s.implementation})");
|
||||
}
|
||||
}
|
||||
return const Text("未知存储");
|
||||
},
|
||||
error: (error, stackTrace) =>
|
||||
Text("$error"),
|
||||
loading: () =>
|
||||
const MyProgressIndicator()),
|
||||
|
||||
],
|
||||
),
|
||||
const Divider(thickness: 1, height: 1),
|
||||
Text(
|
||||
"${details!.name}",
|
||||
"${details.name} (${details.airDate!.split("-")[0]})",
|
||||
style: const TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.bold),
|
||||
|
||||
Reference in New Issue
Block a user