Link to logs screen from home screen

This commit is contained in:
Juan Gilsanz Polo 2023-12-17 14:14:31 +01:00
parent a3620f259f
commit d2e882a030
7 changed files with 107 additions and 32 deletions

View file

@ -1,17 +1,19 @@
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:provider/provider.dart';
import 'package:adguard_home_manager/widgets/line_chart.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
class HomeChart extends StatelessWidget {
class HomeChart extends StatefulWidget {
final List<int> data;
final String label;
final String primaryValue;
final String secondaryValue;
final Color color;
final int hoursInterval;
final void Function() onTapTitle;
const HomeChart({
super.key,
@ -20,20 +22,28 @@ class HomeChart extends StatelessWidget {
required this.primaryValue,
required this.secondaryValue,
required this.color,
required this.hoursInterval
required this.hoursInterval,
required this.onTapTitle,
});
@override
State<HomeChart> createState() => _HomeChartState();
}
class _HomeChartState extends State<HomeChart> {
bool _isHover = false;
@override
Widget build(BuildContext context) {
final appConfigProvider = Provider.of<AppConfigProvider>(context);
final bool isEmpty = data.every((i) => i == 0);
final bool isEmpty = widget.data.every((i) => i == 0);
if (!(appConfigProvider.hideZeroValues == true && isEmpty == true)) {
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));
DateTime currentDate = DateTime.now().subtract(Duration(hours: widget.hoursInterval*widget.data.length+1));
for (var i = 0; i < widget.data.length; i++) {
currentDate = currentDate.add(Duration(hours: widget.hoursInterval));
dateTimes.add(currentDate);
}
@ -52,13 +62,40 @@ class HomeChart extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Flexible(
child: Text(
label,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.onSurface
child: MouseRegion(
cursor: SystemMouseCursors.click,
onEnter: (_) => setState(() => _isHover = true),
onExit: (_) => setState(() => _isHover = false),
child: GestureDetector(
onTapDown: (_) => setState(() => _isHover = true),
onTapUp: (_) => setState(() => _isHover = false),
onTap: widget.onTapTitle,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Flexible(
child: Text(
widget.label,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
color: _isHover
? Theme.of(context).colorScheme.onSurfaceVariant
: Theme.of(context).colorScheme.onSurface,
),
),
),
const SizedBox(width: 4),
Icon(
Icons.chevron_right_rounded,
size: 20,
color: _isHover
? Theme.of(context).colorScheme.onSurfaceVariant
: Theme.of(context).colorScheme.onSurface,
)
],
),
),
),
),
@ -67,18 +104,18 @@ class HomeChart extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
primaryValue,
widget.primaryValue,
style: TextStyle(
color: color,
color: widget.color,
fontSize: 18,
fontWeight: FontWeight.w500
),
),
Text(
secondaryValue,
widget.secondaryValue,
style: TextStyle(
fontSize: 12,
color: color
color: widget.color
),
)
],
@ -86,19 +123,19 @@ class HomeChart extends StatelessWidget {
: Row(
children: [
Text(
primaryValue,
widget.primaryValue,
style: TextStyle(
color: color,
color: widget.color,
fontSize: 18,
fontWeight: FontWeight.w500
),
),
const SizedBox(width: 10),
Text(
"($secondaryValue)",
"(${widget.secondaryValue})",
style: TextStyle(
fontSize: 12,
color: color
color: widget.color
),
)
],
@ -110,10 +147,10 @@ class HomeChart extends StatelessWidget {
width: double.maxFinite,
height: 150,
child: CustomLineChart(
data: data,
color: color,
data: widget.data,
color: widget.color,
dates: dateTimes,
daysInterval: hoursInterval == 24,
daysInterval: widget.hoursInterval == 24,
context: context,
)
),

View file

@ -14,6 +14,7 @@ import 'package:adguard_home_manager/screens/home/appbar.dart';
import 'package:adguard_home_manager/screens/home/fab.dart';
import 'package:adguard_home_manager/screens/home/chart.dart';
import 'package:adguard_home_manager/providers/logs_provider.dart';
import 'package:adguard_home_manager/functions/number_format.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
@ -61,6 +62,7 @@ class _HomeState extends State<Home> {
Widget build(BuildContext context) {
final statusProvider = Provider.of<StatusProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
final logsProvider = Provider.of<LogsProvider>(context);
final width = MediaQuery.of(context).size.width;
@ -143,6 +145,14 @@ class _HomeState extends State<Home> {
secondaryValue: "${doubleFormat(statusProvider.serverStatus!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
color: Colors.blue,
hoursInterval: statusProvider.serverStatus!.stats.timeUnits == "days" ? 24 : 1,
onTapTitle: () {
logsProvider.setSelectedResultStatus(
value: "all",
refetch: true
);
logsProvider.filterLogs();
appConfigProvider.setSelectedScreen(2);
},
),
),
FractionallySizedBox(
@ -154,6 +164,13 @@ class _HomeState extends State<Home> {
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numBlockedFiltering/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
color: Colors.red,
hoursInterval: statusProvider.serverStatus!.stats.timeUnits == "days" ? 24 : 1,
onTapTitle: () {
logsProvider.setSelectedResultStatus(
value: "blocked",
refetch: true
);
appConfigProvider.setSelectedScreen(2);
},
),
),
FractionallySizedBox(
@ -165,6 +182,13 @@ class _HomeState extends State<Home> {
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedSafebrowsing/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
color: Colors.green,
hoursInterval: statusProvider.serverStatus!.stats.timeUnits == "days" ? 24 : 1,
onTapTitle: () {
logsProvider.setSelectedResultStatus(
value: "blocked_safebrowsing",
refetch: true
);
appConfigProvider.setSelectedScreen(2);
},
),
),
FractionallySizedBox(
@ -176,6 +200,14 @@ class _HomeState extends State<Home> {
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedParental/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
color: Colors.orange,
hoursInterval: statusProvider.serverStatus!.stats.timeUnits == "days" ? 24 : 1,
onTapTitle: () {
logsProvider.setSelectedResultStatus(
value: "blocked_parental",
refetch: true
);
logsProvider.filterLogs();
appConfigProvider.setSelectedScreen(2);
},
),
),
],