diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index bac4b6c..bec25f4 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -203,5 +203,9 @@ "filtersNotLoaded": "Filters couldn't be loaded.", "whitelists": "Whitelists", "blacklists": "Blacklists", - "rules": "Rules" + "rules": "Rules", + "customRules": "Custom rules", + "enabledRules": "Enabled rules", + "enabled": "Enabled", + "disabled": "Disabled" } \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 5e58485..3a55a11 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -203,5 +203,9 @@ "filtersNotLoaded": "No se han podido cargar los filtros.", "whitelists": "Listas blancas", "blacklists": "Listas negras", - "rules": "Reglas" + "rules": "Reglas", + "customRules": "Reglas personalizadas", + "enabledRules": "Reglas activas", + "enabled": "Activada", + "disabled": "Desactivada" } \ No newline at end of file diff --git a/lib/screens/filters/custom_rules_list.dart b/lib/screens/filters/custom_rules_list.dart new file mode 100644 index 0000000..3330888 --- /dev/null +++ b/lib/screens/filters/custom_rules_list.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; + +class CustomRulesList extends StatelessWidget { + final List data; + + const CustomRulesList({ + Key? key, + required this.data + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return ListView.builder( + padding: const EdgeInsets.only(top: 0), + itemCount: data.length, + itemBuilder: (context, index) => ListTile( + onLongPress: () => {}, + title: Text(data[index]), + trailing: IconButton( + onPressed: () => {}, + icon: const Icon(Icons.delete) + ), + ) + ); + } +} \ No newline at end of file diff --git a/lib/screens/filters/filters.dart b/lib/screens/filters/filters.dart index 24ca188..c1003fb 100644 --- a/lib/screens/filters/filters.dart +++ b/lib/screens/filters/filters.dart @@ -2,13 +2,10 @@ import 'package:flutter/material.dart'; 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_list.dart'; -import 'package:adguard_home_manager/screens/clients/added_list.dart'; +import 'package:adguard_home_manager/screens/filters/filters_list.dart'; +import 'package:adguard_home_manager/screens/filters/custom_rules_list.dart'; -import 'package:adguard_home_manager/models/app_log.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; -import 'package:adguard_home_manager/models/server.dart'; import 'package:adguard_home_manager/services/http_requests.dart'; import 'package:adguard_home_manager/models/clients.dart'; import 'package:adguard_home_manager/providers/servers_provider.dart'; @@ -138,7 +135,7 @@ class _FiltersWidgetState extends State with TickerProviderStateM ), Tab( icon: const Icon(Icons.shield_rounded), - text: AppLocalizations.of(context)!.rules, + text: AppLocalizations.of(context)!.customRules, ), ] ) @@ -158,30 +155,24 @@ class _FiltersWidgetState extends State with TickerProviderStateM child: TabBarView( controller: tabController, children: [ - Container(), - Container(), - Container() - // RefreshIndicator( - // onRefresh: fetchClients, - // child: ClientsList( - // data: serversProvider.clients.data!.autoClientsData, - // fetchClients: fetchClients, - // ), - // ), - // RefreshIndicator( - // onRefresh: fetchClients, - // child: AddedList( - // data: serversProvider.clients.data!.clients, - // fetchClients: fetchClients, - // ) - // ), - // RefreshIndicator( - // onRefresh: fetchClients, - // child: BlockedList( - // data: serversProvider.clients.data!.clientsAllowedBlocked!.disallowedClients, - // fetchClients: fetchClients, - // ), - // ), + RefreshIndicator( + onRefresh: fetchFilters, + child: FiltersList( + data: serversProvider.filtering.data!.whitelistFilters + ) + ), + RefreshIndicator( + onRefresh: fetchFilters, + child: FiltersList( + data: serversProvider.filtering.data!.filters + ) + ), + RefreshIndicator( + onRefresh: fetchFilters, + child: CustomRulesList( + data: serversProvider.filtering.data!.userRules + ) + ), ], ), ) diff --git a/lib/screens/filters/filters_list.dart b/lib/screens/filters/filters_list.dart new file mode 100644 index 0000000..1c25c11 --- /dev/null +++ b/lib/screens/filters/filters_list.dart @@ -0,0 +1,72 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +import 'package:adguard_home_manager/functions/number_format.dart'; +import 'package:adguard_home_manager/models/filtering.dart'; + +class FiltersList extends StatelessWidget { + final List data; + + const FiltersList({ + Key? key, + required this.data + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return ListView.builder( + padding: const EdgeInsets.only(top: 0), + itemCount: data.length, + itemBuilder: (context, index) => Material( + color: Colors.transparent, + child: InkWell( + onTap: () => {}, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width-130, + child: Text( + data[index].name, + style: const TextStyle( + fontWeight: FontWeight.w500, + fontSize: 16 + ), + ), + ), + const SizedBox(height: 5), + Text( + "${intFormat(data[index].rulesCount, Platform.localeName)} ${AppLocalizations.of(context)!.enabledRules}", + style: const TextStyle( + fontSize: 14, + color: Colors.grey + ), + ), + ], + ), + Text( + data[index].enabled == true + ? AppLocalizations.of(context)!.enabled + : AppLocalizations.of(context)!.disabled, + style: TextStyle( + color: data[index].enabled == true + ? Colors.green + : Colors.red, + fontWeight: FontWeight.w500 + ), + ) + ], + ), + ), + ), + ), + ); + } +} \ No newline at end of file