2022-08-27 17:33:28 +00:00
|
|
|
import 'dart:convert';
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:openmediacentermobile/screen_loading.dart';
|
2022-08-28 20:51:12 +00:00
|
|
|
import 'package:openmediacentermobile/preview/tag_tile.dart';
|
2022-08-28 16:48:53 +00:00
|
|
|
import 'package:openmediacentermobile/types/video_data.dart';
|
2022-08-28 20:51:12 +00:00
|
|
|
import 'package:openmediacentermobile/preview/actor_tile.dart';
|
2022-08-27 17:33:28 +00:00
|
|
|
|
|
|
|
import '../api/api.dart';
|
2022-08-29 15:16:51 +00:00
|
|
|
import '../log/log.dart';
|
2022-08-28 16:48:53 +00:00
|
|
|
import '../types/actor.dart';
|
2022-08-27 17:33:28 +00:00
|
|
|
|
2022-08-28 20:51:12 +00:00
|
|
|
class InfoView extends StatefulWidget {
|
|
|
|
const InfoView({Key? key, required this.vdata}) : super(key: key);
|
2022-08-28 16:48:53 +00:00
|
|
|
final VideoData vdata;
|
2022-08-27 17:33:28 +00:00
|
|
|
|
|
|
|
@override
|
2022-08-28 20:51:12 +00:00
|
|
|
State<InfoView> createState() => _InfoViewState();
|
2022-08-27 17:33:28 +00:00
|
|
|
}
|
|
|
|
|
2022-08-28 20:51:12 +00:00
|
|
|
class _InfoViewState extends State<InfoView> {
|
2022-08-27 17:33:28 +00:00
|
|
|
late Future<List<Actor>> _data;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
setState(() {
|
|
|
|
_data = loadData();
|
|
|
|
});
|
|
|
|
super.initState();
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<List<Actor>> loadData() async {
|
|
|
|
final data = await API
|
2022-08-28 16:48:53 +00:00
|
|
|
.query("actor", "getActorsOfVideo", {'MovieId': widget.vdata.movieId});
|
2022-08-27 17:33:28 +00:00
|
|
|
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;
|
2022-08-28 16:48:53 +00:00
|
|
|
return Padding(
|
2022-08-29 15:16:51 +00:00
|
|
|
padding: EdgeInsets.only(left: 10, right: 10, top: 60),
|
2022-08-28 16:48:53 +00:00
|
|
|
child: Column(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
children: [
|
|
|
|
Text("Likes: ${widget.vdata.likes}"),
|
2022-08-29 15:16:51 +00:00
|
|
|
IconButton(onPressed: () async {
|
|
|
|
final data = await API
|
|
|
|
.query("video", "addLike", {'MovieId': widget.vdata.movieId});
|
|
|
|
final d = jsonDecode(data);
|
|
|
|
if (d["result"] != 'success') {
|
|
|
|
Log.w(d);
|
|
|
|
}
|
|
|
|
// bit hacky but it works
|
|
|
|
widget.vdata.likes += 1;
|
|
|
|
}, icon: Icon(Icons.thumb_up)),
|
2022-08-28 16:48:53 +00:00
|
|
|
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
|
2022-08-28 20:51:12 +00:00
|
|
|
.map((e) => TagTile(tag: e))
|
2022-08-28 16:48:53 +00:00
|
|
|
.toList(growable: false),
|
|
|
|
)
|
|
|
|
]));
|
2022-08-27 17:33:28 +00:00
|
|
|
} else {
|
|
|
|
return ScreenLoading();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
List<Widget> _renderActors(List<Actor> actors) {
|
2022-08-28 16:48:53 +00:00
|
|
|
return actors.map((e) => ActorTile(actor: e)).toList(growable: false);
|
2022-08-27 17:33:28 +00:00
|
|
|
}
|
|
|
|
}
|