adguard-home-manager/lib/screens/home/chart.dart

138 lines
4.7 KiB
Dart
Raw Normal View History

2022-10-04 15:19:44 +02:00
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
2022-10-04 15:19:44 +02:00
import 'package:adguard_home_manager/widgets/line_chart.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
2022-10-04 15:19:44 +02:00
class HomeChart extends StatelessWidget {
final List<int> data;
final String label;
final String primaryValue;
final String secondaryValue;
final Color color;
2023-07-10 20:45:03 +02:00
final int hoursInterval;
2022-10-04 15:19:44 +02:00
const HomeChart({
2023-11-29 11:56:28 +01:00
super.key,
2022-10-04 15:19:44 +02:00
required this.data,
required this.label,
required this.primaryValue,
required this.secondaryValue,
2023-07-10 20:45:03 +02:00
required this.color,
required this.hoursInterval
2023-11-29 11:56:28 +01:00
});
2022-10-04 15:19:44 +02:00
@override
Widget build(BuildContext context) {
final appConfigProvider = Provider.of<AppConfigProvider>(context);
2023-09-04 23:44:59 +02:00
final bool isEmpty = data.every((i) => i == 0);
2022-10-04 15:19:44 +02:00
if (!(appConfigProvider.hideZeroValues == true && isEmpty == true)) {
2023-07-10 20:45:03 +02:00
List<DateTime> dateTimes = [];
DateTime currentDate = DateTime.now().subtract(Duration(hours: hoursInterval*data.length+1));
for (var i = 0; i < data.length; i++) {
currentDate = currentDate.add(Duration(hours: hoursInterval));
dateTimes.add(currentDate);
}
return Column(
2022-10-04 15:19:44 +02:00
children: [
Padding(
2023-05-20 22:57:38 +02:00
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Column(
2022-10-04 15:19:44 +02:00
children: [
Padding(
padding: EdgeInsets.only(
bottom: !isEmpty ? 10 : 15
2022-10-04 15:19:44 +02:00
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
2023-05-01 14:38:46 +02:00
Flexible(
child: Text(
label,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.onSurface
),
2022-10-04 15:19:44 +02:00
),
),
!isEmpty
? Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
primaryValue,
style: TextStyle(
color: color,
fontSize: 18,
fontWeight: FontWeight.w500
),
),
Text(
secondaryValue,
style: TextStyle(
fontSize: 12,
color: color
),
)
],
)
: Row(
children: [
Text(
primaryValue,
style: TextStyle(
color: color,
fontSize: 18,
fontWeight: FontWeight.w500
),
),
const SizedBox(width: 10),
Text(
"($secondaryValue)",
style: TextStyle(
fontSize: 12,
color: color
),
)
],
)
],
),
),
if (!isEmpty) SizedBox(
width: double.maxFinite,
height: 150,
child: CustomLineChart(
data: data,
color: color,
2023-07-10 20:45:03 +02:00
dates: dateTimes,
daysInterval: hoursInterval == 24,
context: context,
)
),
2022-10-04 15:19:44 +02:00
],
),
),
2022-11-04 22:56:00 +01:00
Padding(
2023-05-20 22:57:38 +02:00
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Divider(
thickness: 1,
2022-11-04 22:56:00 +01:00
color: Theme.of(context).colorScheme.onSurface.withOpacity(0.2),
),
2022-10-04 15:19:44 +02:00
),
2023-05-20 22:57:38 +02:00
const SizedBox(height: 16),
2022-10-04 15:19:44 +02:00
],
);
}
else {
return const SizedBox();
}
2022-10-04 15:19:44 +02:00
}
}