84 lines
2.4 KiB
Dart
84 lines
2.4 KiB
Dart
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);
|
|
}
|
|
}
|