import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:graphql/client.dart'; import 'package:tstor_ui/api/client.dart'; import 'package:tstor_ui/api/torrent_stats.graphql.dart'; class TorrentStatsScreen extends StatefulWidget { const TorrentStatsScreen({super.key}); @override State createState() => _TorrentStatsScreenState(); } class _TorrentStatsScreenState extends State { Future _totalStats() async { final since = DateTime.now().subtract(Duration(hours: 1)); final data = await client.query$TorrentTotalStats( Options$Query$TorrentTotalStats( variables: Variables$Query$TorrentTotalStats( since: since, ), fetchPolicy: FetchPolicy.networkOnly, ), ); return LineChartData( lineBarsData: [ LineChartBarData( spots: data.parsedData!.torrentDaemon!.statsHistory .map( (e) => FlSpot( since.difference(e.timestamp).inSeconds.toDouble(), e.activePeers.toDouble(), ), ) .toList(), ), ], ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("Torrent Stats"), ), body: FutureBuilder( future: _totalStats(), builder: (context, snapshot) { if (!snapshot.hasData) { return const Center( child: CircularProgressIndicator(), ); } return LineChart(snapshot.data!); }, ), ); } }