OpenMediacenterMobileFlutter/lib/video_screen/actor_view.dart
2022-08-27 19:33:28 +02:00

88 lines
2.0 KiB
Dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:openmediacentermobile/screen_loading.dart';
import '../api/api.dart';
class ActorView extends StatefulWidget {
const ActorView({Key? key, required this.videoId}) : super(key: key);
final int videoId;
@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.videoId});
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;
if (actors?.isEmpty ?? true) {
return Text("no actors available");
} else {
return Column(children: _renderActors(snapshot.data!));
}
} else {
return ScreenLoading();
}
},
);
}
List<Widget> _renderActors(List<Actor> actors) {
return actors
.map((e) => Text(
e.name,
style: TextStyle(color: Colors.black),
))
.toList(growable: false);
}
}
class Actor {
int actorId;
String name;
String thumbnail;
Actor(this.actorId, this.name, this.thumbnail);
factory Actor.fromJson(dynamic json) {
return Actor(json['ActorId'] as int, json['Name'] as String,
json['Thumbnail'] as String);
}
@override
String toString() {
return 'Actor{ActorId: $actorId, Name: $name, Thumbnail: $thumbnail}';
}
}