From 8d4431f6b34cf44ed31bdfa9a268584c18a618b4 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Fri, 7 Oct 2022 01:12:48 +0200 Subject: [PATCH] Implemented added clients list --- lib/l10n/app_en.arb | 3 +- lib/l10n/app_es.arb | 3 +- lib/screens/clients/added_list.dart | 111 ++++++++++++++++++ ...ed_allowed_list.dart => blocked_list.dart} | 27 ++--- lib/screens/clients/clients.dart | 17 ++- 5 files changed, 130 insertions(+), 31 deletions(-) create mode 100644 lib/screens/clients/added_list.dart rename lib/screens/clients/{blocked_allowed_list.dart => blocked_list.dart} (78%) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index a6f2c2a..524d723 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -192,5 +192,6 @@ "upstreamServers": "Upstream servers", "serverAddress": "Server address", "noUpstreamServers": "No upstream servers.", - "willBeUsedGeneralServers": "General upstream servers will be used." + "willBeUsedGeneralServers": "General upstream servers will be used.", + "added": "Added" } \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index f10c972..2b1f3b0 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -192,5 +192,6 @@ "upstreamServers": "Servidores de salida", "serverAddress": "Dirección del servidor", "noUpstreamServers": "No hay servidores de salida.", - "willBeUsedGeneralServers": "Se usarán los servidores de salida generales." + "willBeUsedGeneralServers": "Se usarán los servidores de salida generales.", + "added": "Añadidos" } \ No newline at end of file diff --git a/lib/screens/clients/added_list.dart b/lib/screens/clients/added_list.dart new file mode 100644 index 0000000..eff835f --- /dev/null +++ b/lib/screens/clients/added_list.dart @@ -0,0 +1,111 @@ +// ignore_for_file: use_build_context_synchronously + +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +import 'package:adguard_home_manager/models/clients.dart'; +import 'package:adguard_home_manager/providers/app_config_provider.dart'; +import 'package:adguard_home_manager/providers/servers_provider.dart'; + +class AddedList extends StatelessWidget { + final List data; + final Future Function() fetchClients; + + const AddedList({ + Key? key, + required this.data, + required this.fetchClients + }) : super(key: key); + + @override + Widget build(BuildContext context) { + final serversProvider = Provider.of(context); + final appConfigProvider = Provider.of(context); + + + if (data.isNotEmpty) { + return RefreshIndicator( + onRefresh: () async {}, + child: ListView.builder( + padding: const EdgeInsets.only(top: 0), + itemCount: data.length, + itemBuilder: (context, index) => ListTile( + isThreeLine: true, + onTap: () => {}, + title: Padding( + padding: const EdgeInsets.only(bottom: 5), + child: Text(data[index].name), + ), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(data[index].ids.toString().replaceAll(RegExp(r'^\[|\]$'), '')), + const SizedBox(height: 7), + Row( + children: [ + Icon( + Icons.filter_list_rounded, + size: 19, + color: data[index].filteringEnabled == true + ? Colors.green + : Colors.red, + ), + const SizedBox(width: 10), + Icon( + Icons.vpn_lock_rounded, + size: 18, + color: data[index].safebrowsingEnabled == true + ? Colors.green + : Colors.red, + ), + const SizedBox(width: 10), + Icon( + Icons.block, + size: 18, + color: data[index].parentalEnabled == true + ? Colors.green + : Colors.red, + ), + const SizedBox(width: 10), + Icon( + Icons.search_rounded, + size: 19, + color: data[index].safesearchEnabled == true + ? Colors.green + : Colors.red, + ) + ], + ) + ], + ), + ) + ), + ); + } + else { + return SizedBox( + width: double.maxFinite, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + AppLocalizations.of(context)!.noClientsList, + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 24, + color: Colors.grey + ), + ), + const SizedBox(height: 30), + TextButton.icon( + onPressed: fetchClients, + icon: const Icon(Icons.refresh_rounded), + label: Text(AppLocalizations.of(context)!.refresh), + ) + ], + ), + ); + } + } +} \ No newline at end of file diff --git a/lib/screens/clients/blocked_allowed_list.dart b/lib/screens/clients/blocked_list.dart similarity index 78% rename from lib/screens/clients/blocked_allowed_list.dart rename to lib/screens/clients/blocked_list.dart index 62fdac1..fd38222 100644 --- a/lib/screens/clients/blocked_allowed_list.dart +++ b/lib/screens/clients/blocked_list.dart @@ -12,14 +12,12 @@ import 'package:adguard_home_manager/providers/servers_provider.dart'; import 'package:adguard_home_manager/services/http_requests.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; -class BlockedAllowedList extends StatelessWidget { - final String type; +class BlockedList extends StatelessWidget { final List data; final Future Function() fetchClients; - const BlockedAllowedList({ + const BlockedList({ Key? key, - required this.type, required this.data, required this.fetchClients }) : super(key: key); @@ -30,22 +28,11 @@ class BlockedAllowedList extends StatelessWidget { final appConfigProvider = Provider.of(context); void confirmRemoveDomain(String domain) async { - Map> body = {}; - - if (type == 'allowed') { - body = { - "allowed_clients": serversProvider.clients.data!.clientsAllowedBlocked?.allowedClients.where((client) => client != domain).toList() ?? [], - "disallowed_clients": serversProvider.clients.data!.clientsAllowedBlocked?.disallowedClients ?? [], - "blocked_hosts": serversProvider.clients.data!.clientsAllowedBlocked?.blockedHosts ?? [], - }; - } - else if (type == 'blocked') { - body = { - "allowed_clients": serversProvider.clients.data!.clientsAllowedBlocked?.allowedClients ?? [], - "disallowed_clients": serversProvider.clients.data!.clientsAllowedBlocked?.disallowedClients.where((client) => client != domain).toList() ?? [], - "blocked_hosts": serversProvider.clients.data!.clientsAllowedBlocked?.blockedHosts ?? [], - }; - } + Map> body = { + "allowed_clients": serversProvider.clients.data!.clientsAllowedBlocked?.allowedClients ?? [], + "disallowed_clients": serversProvider.clients.data!.clientsAllowedBlocked?.disallowedClients.where((client) => client != domain).toList() ?? [], + "blocked_hosts": serversProvider.clients.data!.clientsAllowedBlocked?.blockedHosts ?? [], + }; ProcessModal processModal = ProcessModal(context: context); processModal.open(AppLocalizations.of(context)!.removingClient); diff --git a/lib/screens/clients/clients.dart b/lib/screens/clients/clients.dart index dccc51a..74472c1 100644 --- a/lib/screens/clients/clients.dart +++ b/lib/screens/clients/clients.dart @@ -3,7 +3,8 @@ import 'package:provider/provider.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/screens/clients/clients_list.dart'; -import 'package:adguard_home_manager/screens/clients/blocked_allowed_list.dart'; +import 'package:adguard_home_manager/screens/clients/blocked_list.dart'; +import 'package:adguard_home_manager/screens/clients/added_list.dart'; import 'package:adguard_home_manager/models/app_log.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; @@ -140,8 +141,8 @@ class _ClientsWidgetState extends State with TickerProviderStateM text: AppLocalizations.of(context)!.activeClients, ), Tab( - icon: const Icon(Icons.check), - text: AppLocalizations.of(context)!.allowed, + icon: const Icon(Icons.add), + text: AppLocalizations.of(context)!.added, ), Tab( icon: const Icon(Icons.block), @@ -174,16 +175,14 @@ class _ClientsWidgetState extends State with TickerProviderStateM ), RefreshIndicator( onRefresh: fetchClients, - child: BlockedAllowedList( - type: 'allowed', - data: serversProvider.clients.data!.clientsAllowedBlocked!.allowedClients, + child: AddedList( + data: serversProvider.clients.data!.clients, fetchClients: fetchClients, - ), + ) ), RefreshIndicator( onRefresh: fetchClients, - child: BlockedAllowedList( - type: 'blocked', + child: BlockedList( data: serversProvider.clients.data!.clientsAllowedBlocked!.disallowedClients, fetchClients: fetchClients, ),