Implemented added clients list

This commit is contained in:
Juan Gilsanz Polo 2022-10-07 01:12:48 +02:00
parent f25705313f
commit 8d4431f6b3
5 changed files with 130 additions and 31 deletions

View file

@ -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<Client> 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<ServersProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(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),
)
],
),
);
}
}
}

View file

@ -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<String> 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<AppConfigProvider>(context);
void confirmRemoveDomain(String domain) async {
Map<String, List<String>> 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<String, List<String>> 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);

View file

@ -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<ClientsWidget> 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<ClientsWidget> 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,
),