OpenMediacenterMobileFlutter/lib/video_screen/actor_view.dart

84 lines
2.4 KiB
Dart
Raw Normal View History

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:openmediacentermobile/screen_loading.dart';
import 'package:openmediacentermobile/types/video_data.dart';
import 'package:openmediacentermobile/video_screen/actor_tile.dart';
import '../api/api.dart';
import '../types/actor.dart';
class ActorView extends StatefulWidget {
const ActorView({Key? key, required this.vdata}) : super(key: key);
final VideoData vdata;
@override
State<ActorView> createState() => _ActorViewState();
}
class _ActorViewState extends State<ActorView> {
late Future<List<Actor>> _data;
@override
void initState() {
setState(() {
_data = loadData();
});
super.initState();
}
Future<List<Actor>> loadData() async {
final data = await API
.query("actor", "getActorsOfVideo", {'MovieId': widget.vdata.movieId});
if (data == 'null') {
return [];
}
final d = jsonDecode(data);
List<Actor> dta = (d as List).map((e) => Actor.fromJson(e)).toList();
return dta;
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _data,
builder: (context, AsyncSnapshot<List<Actor>> snapshot) {
if (snapshot.hasError) {
return Text("Error");
} else if (snapshot.hasData) {
final actors = snapshot.data;
return Padding(
padding: EdgeInsets.only(left: 10, right: 10, top: 30),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Likes: ${widget.vdata.likes}"),
Text("Quality: ${widget.vdata.quality}"),
Text("Length: ${widget.vdata.length}sec"),
Text("Actors:"),
actors?.isEmpty ?? true
? Text("no actors available")
: Row(
children: _renderActors(snapshot.data!),
),
Text("Tags:"),
Row(
children: widget.vdata.tags
.map((e) => Text(e.tagName))
.toList(growable: false),
)
]));
} else {
return ScreenLoading();
}
},
);
}
List<Widget> _renderActors(List<Actor> actors) {
return actors.map((e) => ActorTile(actor: e)).toList(growable: false);
}
}