mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-05-15 06:22:48 +00:00
Link to logs screen from home screen
This commit is contained in:
parent
a3620f259f
commit
d2e882a030
7 changed files with 107 additions and 32 deletions
|
@ -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,
|
||||
)
|
||||
),
|
||||
|
|
|
@ -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);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue