Moved filtering to separate provider

This commit is contained in:
Juan Gilsanz Polo 2023-05-24 15:11:24 +02:00
parent 04b7868588
commit 19ac14e49e
18 changed files with 240 additions and 356 deletions

View file

@ -49,7 +49,7 @@ void main() async {
ServersProvider serversProvider = ServersProvider();
StatusProvider statusProvider = StatusProvider();
ClientsProvider clientsProvider = ClientsProvider();
FiltersProvider filtersProvider = FiltersProvider();
FilteringProvider filtersProvider = FilteringProvider();
LogsProvider logsProvider = LogsProvider();
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
@ -112,25 +112,9 @@ void main() async {
ChangeNotifierProvider(
create: ((context) => appConfigProvider)
),
ChangeNotifierProxyProvider<StatusProvider, ServersProvider>(
create: (context) => serversProvider,
update: (context, status, servers) => servers!..update(status),
),
ChangeNotifierProxyProvider<ServersProvider, StatusProvider>(
create: (context) => statusProvider,
update: (context, servers, status) => status!..update(servers),
),
ChangeNotifierProxyProvider<ServersProvider, ClientsProvider>(
create: (context) => clientsProvider,
update: (context, servers, clients) => clients!..update(servers),
),
ChangeNotifierProxyProvider<ServersProvider, LogsProvider>(
create: (context) => logsProvider,
update: (context, servers, logs) => logs!..update(servers),
),
ChangeNotifierProxyProvider<ServersProvider, FiltersProvider>(
ChangeNotifierProxyProvider<StatusProvider, FilteringProvider>(
create: (context) => filtersProvider,
update: (context, servers, filters) => filters!..update(servers),
update: (context, status, filtering) => filtering!..updateStatus(status),
),
],
child: const Main(),

View file

@ -11,12 +11,10 @@ class BlockedServicesFromApi {
}
class BlockedServices {
int loadStatus = 0;
List<BlockedService>? services;
List<BlockedService> services;
BlockedServices({
this.loadStatus = 0,
this.services
required this.services
});
}

View file

@ -1,22 +1,4 @@
import 'dart:convert';
import 'package:adguard_home_manager/constants/enums.dart';
FilteringData filteringFromJson(String str) => FilteringData.fromJson(json.decode(str));
String filteringToJson(FilteringData data) => json.encode(data.toJson());
class Filtering {
LoadStatus loadStatus = LoadStatus.loading;
FilteringData? data;
Filtering({
required this.loadStatus,
this.data
});
}
class FilteringData {
final List<Filter> filters;
final List<Filter> whitelistFilters;
List<String> userRules;
@ -24,7 +6,7 @@ class FilteringData {
int interval;
bool enabled;
FilteringData({
Filtering({
required this.filters,
required this.whitelistFilters,
required this.userRules,
@ -33,7 +15,7 @@ class FilteringData {
required this.enabled,
});
factory FilteringData.fromJson(Map<String, dynamic> json) => FilteringData(
factory Filtering.fromJson(Map<String, dynamic> json) => Filtering(
filters: json["filters"] != null ? List<Filter>.from(json["filters"].map((x) => Filter.fromJson(x))) : [],
whitelistFilters: json["whitelist_filters"] != null ? List<Filter>.from(json["whitelist_filters"].map((x) => Filter.fromJson(x))) : [],
userRules: json["user_rules"] != null ? List<String>.from(json["user_rules"].map((x) => x)).where((i) => i != '').toList() : [],

View file

@ -2,18 +2,9 @@ import 'package:flutter/material.dart';
import 'package:adguard_home_manager/models/clients.dart';
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/constants/enums.dart';
class ClientsProvider with ChangeNotifier {
ServersProvider? _serversProvider;
update(ServersProvider? serversProvider) {
if (serversProvider != null) {
_serversProvider = serversProvider;
}
}
LoadStatus _loadStatus = LoadStatus.loading;
Clients? _clients;
String? _searchTermClients;

View file

@ -1,13 +1,81 @@
import 'package:flutter/material.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/models/blocked_services.dart';
import 'package:adguard_home_manager/models/filtering.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
class FiltersProvider with ChangeNotifier {
ServersProvider? _serversProvider;
class FilteringProvider with ChangeNotifier {
StatusProvider? _statusProvider;
update(ServersProvider? serversProvider) {
if (serversProvider != null) {
_serversProvider = serversProvider;
updateStatus(StatusProvider? statusProvider) {
if (statusProvider != null) {
_statusProvider = statusProvider;
}
}
LoadStatus _loadStatus = LoadStatus.loading;
Filtering? _filtering;
LoadStatus _blockedServicesLoadStatus = LoadStatus.loading;
BlockedServices? _blockedServicesList;
LoadStatus get loadStatus {
return _loadStatus;
}
Filtering? get filtering {
return _filtering;
}
LoadStatus get blockedServicesLoadStatus {
return _blockedServicesLoadStatus;
}
BlockedServices? get blockedServices {
return _blockedServicesList;
}
void setFilteringData(Filtering data) {
_filtering = data;
notifyListeners();
}
void setFilteringLoadStatus(LoadStatus loadStatus, bool notify) {
_loadStatus = loadStatus;
if (notify == true) {
notifyListeners();
}
}
void setFilteringProtectionStatus(bool status) {
_statusProvider!.setFilteringEnabledStatus(status);
_filtering!.enabled = status;
notifyListeners();
}
void setFiltersUpdateFrequency(int frequency) {
if (_filtering != null) {
_filtering!.interval = frequency;
notifyListeners();
}
}
void setBlockedServices(List<String> blockedServices) {
if (_filtering != null) {
_filtering!.blockedServices = blockedServices;
notifyListeners();
}
}
void setBlockedServiceListData(List<BlockedService> data) {
_blockedServicesList = BlockedServices(services: data);
notifyListeners();
}
void setBlockedServicesListLoadStatus(LoadStatus status, bool notify) {
_blockedServicesLoadStatus = status;
if (notify == true) {
notifyListeners();
}
}
}

View file

@ -3,17 +3,8 @@ import 'package:flutter/material.dart';
import 'package:adguard_home_manager/models/applied_filters.dart';
import 'package:adguard_home_manager/models/clients.dart';
import 'package:adguard_home_manager/models/logs.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
class LogsProvider with ChangeNotifier {
ServersProvider? _serversProvider;
update(ServersProvider? serversProvider) {
if (serversProvider != null) {
_serversProvider = serversProvider;
}
}
int _loadStatus = 0;
LogsData? _logsData;
List<AutoClient>? _clients;

View file

@ -1,11 +1,9 @@
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:adguard_home_manager/models/filtering.dart';
import 'package:adguard_home_manager/models/dhcp.dart';
import 'package:adguard_home_manager/models/dns_info.dart';
import 'package:adguard_home_manager/models/rewrite_rules.dart';
import 'package:adguard_home_manager/models/blocked_services.dart';
import 'package:adguard_home_manager/models/server.dart';
import 'package:adguard_home_manager/models/update_available.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
@ -13,27 +11,13 @@ import 'package:adguard_home_manager/functions/conversions.dart';
import 'package:adguard_home_manager/services/db/queries.dart';
import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
class ServersProvider with ChangeNotifier {
StatusProvider? _statusProvider;
update(StatusProvider? statusProvider) {
if (statusProvider != null) {
_statusProvider = statusProvider;
}
}
Database? _dbInstance;
List<Server> _serversList = [];
Server? _selectedServer;
final Filtering _filtering = Filtering(
loadStatus: LoadStatus.loading,
data: null
);
final DhcpModel _dhcp = DhcpModel(
loadStatus: 0, // 0 = loading, 1 = loaded, 2 = error
data: null
@ -49,11 +33,6 @@ class ServersProvider with ChangeNotifier {
data: null
);
final BlockedServices _blockedServicesList = BlockedServices(
loadStatus: 0,
services: null
);
final UpdateAvailable _updateAvailable = UpdateAvailable(
loadStatus: LoadStatus.loading,
data: null,
@ -67,10 +46,6 @@ class ServersProvider with ChangeNotifier {
return _selectedServer;
}
Filtering get filtering {
return _filtering;
}
DhcpModel get dhcp {
return _dhcp;
}
@ -83,10 +58,6 @@ class ServersProvider with ChangeNotifier {
return _dnsInfo;
}
BlockedServices get blockedServicesList {
return _blockedServicesList;
}
UpdateAvailable get updateAvailable {
return _updateAvailable;
}
@ -105,34 +76,6 @@ class ServersProvider with ChangeNotifier {
notifyListeners();
}
void setFilteringData(FilteringData data) {
_filtering.data = data;
notifyListeners();
}
void setFilteringLoadStatus(LoadStatus loadStatus, bool notify) {
_filtering.loadStatus = loadStatus;
if (notify == true) {
notifyListeners();
}
}
void setFilteringProtectionStatus(bool status) {
_statusProvider!.setFilteringEnabledStatus(status);
_filtering.data!.enabled = status;
notifyListeners();
}
void setFiltersUpdateFrequency(int frequency) {
_filtering.data!.interval = frequency;
notifyListeners();
}
void setBlockedServices(List<String> blockedServices) {
_filtering.data!.blockedServices = blockedServices;
notifyListeners();
}
void setDhcpData(DhcpData data) {
_dhcp.data = data;
notifyListeners();
@ -169,18 +112,6 @@ class ServersProvider with ChangeNotifier {
}
}
void setBlockedServiceListData(List<BlockedService> data) {
_blockedServicesList.services = data;
notifyListeners();
}
void setBlockedServicesListLoadStatus(int status, bool notify) {
_blockedServicesList.loadStatus = status;
if (notify == true) {
notifyListeners();
}
}
void setUpdateAvailableLoadStatus(LoadStatus status, bool notify) {
_updateAvailable.loadStatus = status;
if (notify == true) {

View file

@ -1,8 +1,7 @@
import 'package:adguard_home_manager/models/filtering_status.dart';
import 'package:flutter/material.dart';
import 'package:adguard_home_manager/models/server_status.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/models/filtering_status.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/functions/time_server_disabled.dart';
@ -10,20 +9,9 @@ import 'package:adguard_home_manager/models/server.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
class StatusProvider with ChangeNotifier {
ServersProvider? _serversProvider;
update(ServersProvider? serversProvider) {
if (serversProvider != null) {
_serversProvider = serversProvider;
}
}
LoadStatus _loadStatus = LoadStatus.loading;
ServerStatus? _serverStatus; // serverStatus != null means server is connected
List<String> _protectionsManagementProcess = []; // protections that are currenty being enabled or disabled
FilteringStatus? _filteringStatus;
LoadStatus get loadStatus {

View file

@ -3,10 +3,12 @@ import 'package:provider/provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/filters_provider.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
class ServicesModal extends StatelessWidget {
class ServicesModal extends StatefulWidget {
final List<String> blockedServices;
final void Function(List<String>) onConfirm;
@ -17,55 +19,33 @@ class ServicesModal extends StatelessWidget {
}) : super(key: key);
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
return ServicesModalWidget(
blockedServices: blockedServices,
onConfirm: onConfirm,
serversProvider: serversProvider,
appConfigProvider: appConfigProvider,
);
}
State<ServicesModal> createState() => _ServicesModalStateWidget();
}
class ServicesModalWidget extends StatefulWidget {
final ServersProvider serversProvider;
final AppConfigProvider appConfigProvider;
final List<String> blockedServices;
final void Function(List<String>) onConfirm;
const ServicesModalWidget({
Key? key,
required this.blockedServices,
required this.onConfirm,
required this.serversProvider,
required this.appConfigProvider
}) : super(key: key);
@override
State<ServicesModalWidget> createState() => _ServicesModalStateWidget();
}
class _ServicesModalStateWidget extends State<ServicesModalWidget> {
class _ServicesModalStateWidget extends State<ServicesModal> {
List<String> blockedServices = [];
Future loadBlockedServices() async {
final result = await getBlockedServices(server: widget.serversProvider.selectedServer!);
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
final result = await getBlockedServices(server: serversProvider.selectedServer!);
if (result['result'] == 'success') {
widget.serversProvider.setBlockedServicesListLoadStatus(1, true);
widget.serversProvider.setBlockedServiceListData(result['data']);
filteringProvider.setBlockedServicesListLoadStatus(LoadStatus.loaded, true);
filteringProvider.setBlockedServiceListData(result['data']);
}
else {
widget.serversProvider.setBlockedServicesListLoadStatus(2, true);
widget.appConfigProvider.addLog(result['log']);
filteringProvider.setBlockedServicesListLoadStatus(LoadStatus.error, true);
appConfigProvider.addLog(result['log']);
}
}
@override
void initState() {
if (widget.serversProvider.blockedServicesList.loadStatus != 1) {
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
if (filteringProvider.blockedServicesLoadStatus != LoadStatus.loaded) {
loadBlockedServices();
}
@ -89,10 +69,11 @@ class _ServicesModalStateWidget extends State<ServicesModalWidget> {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final filteringProvider = Provider.of<FilteringProvider>(context);
Widget content() {
switch (serversProvider.blockedServicesList.loadStatus) {
case 0:
switch (filteringProvider.blockedServicesLoadStatus) {
case LoadStatus.loading:
return Padding(
padding: const EdgeInsets.all(24),
child: SizedBox(
@ -116,34 +97,34 @@ class _ServicesModalStateWidget extends State<ServicesModalWidget> {
),
);
case 1:
case LoadStatus.loaded:
return SizedBox(
width: double.minPositive,
height: MediaQuery.of(context).size.height*0.5,
child: ListView.builder(
shrinkWrap: true,
itemCount: serversProvider.blockedServicesList.services!.length,
itemCount: filteringProvider.blockedServices!.services.length,
itemBuilder: (context, index) => CheckboxListTile(
title: Padding(
padding: const EdgeInsets.only(left: 10),
child: Text(
serversProvider.blockedServicesList.services![index].name,
filteringProvider.blockedServices!.services[index].name,
style: TextStyle(
fontWeight: FontWeight.normal,
color: Theme.of(context).colorScheme.onSurface
),
),
),
value: blockedServices.contains(serversProvider.blockedServicesList.services![index].id),
value: blockedServices.contains(filteringProvider.blockedServices!.services[index].id),
checkboxShape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5)
),
onChanged: (value) => checkUncheckService(value!, serversProvider.blockedServicesList.services![index].id)
onChanged: (value) => checkUncheckService(value!, filteringProvider.blockedServices!.services[index].id)
)
),
);
case 2:
case LoadStatus.error:
return Padding(
padding: const EdgeInsets.all(24),
child: SizedBox(

View file

@ -9,12 +9,13 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/screens/filters/add_custom_rule.dart';
import 'package:adguard_home_manager/screens/filters/add_list_modal.dart';
import 'package:adguard_home_manager/providers/filters_provider.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
import 'package:adguard_home_manager/models/filtering.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/models/filtering.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
class AddFiltersButton extends StatelessWidget {
@ -30,6 +31,7 @@ class AddFiltersButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final filteringProvider = Provider.of<FilteringProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
final width = MediaQuery.of(context).size.width;
@ -38,7 +40,7 @@ class AddFiltersButton extends StatelessWidget {
ProcessModal processModal = ProcessModal(context: context);
processModal.open(AppLocalizations.of(context)!.addingRule);
final List<String> newRules = serversProvider.filtering.data!.userRules;
final List<String> newRules = filteringProvider.filtering!.userRules;
newRules.add(rule);
final result = await setCustomRules(server: serversProvider.selectedServer!, rules: newRules);
@ -46,9 +48,9 @@ class AddFiltersButton extends StatelessWidget {
processModal.close();
if (result['result'] == 'success') {
FilteringData filteringData = serversProvider.filtering.data!;
Filtering filteringData = filteringProvider.filtering!;
filteringData.userRules = newRules;
serversProvider.setFilteringData(filteringData);
filteringProvider.setFilteringData(filteringData);
showSnacbkar(
appConfigProvider: appConfigProvider,
@ -107,12 +109,12 @@ class AddFiltersButton extends StatelessWidget {
final items = result1['data'].toString().split(' ')[1];
if (result2['result'] == 'success') {
serversProvider.setFilteringData(result2['data']);
serversProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
filteringProvider.setFilteringData(result2['data']);
filteringProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
}
else {
appConfigProvider.addLog(result2['log']);
serversProvider.setFilteringLoadStatus(LoadStatus.error, true);
filteringProvider.setFilteringLoadStatus(LoadStatus.error, true);
}
processModal.close();

View file

@ -7,11 +7,13 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/models/blocked_services.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/filters_provider.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
class BlockedServicesScreen extends StatelessWidget {
class BlockedServicesScreen extends StatefulWidget {
final bool dialog;
const BlockedServicesScreen({
@ -20,56 +22,37 @@ class BlockedServicesScreen extends StatelessWidget {
}) : super(key: key);
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
return BlockedServicesScreenWidget(
serversProvider: serversProvider,
appConfigProvider: appConfigProvider,
dialog: dialog,
);
}
State<BlockedServicesScreen> createState() => _BlockedServicesScreenStateWidget();
}
class BlockedServicesScreenWidget extends StatefulWidget {
final ServersProvider serversProvider;
final AppConfigProvider appConfigProvider;
final bool dialog;
const BlockedServicesScreenWidget({
Key? key,
required this.serversProvider,
required this.appConfigProvider,
required this.dialog
}) : super(key: key);
@override
State<BlockedServicesScreenWidget> createState() => _BlockedServicesScreenStateWidget();
}
class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidget> {
class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreen> {
List<String> values = [];
Future loadBlockedServices() async {
final result = await getBlockedServices(server: widget.serversProvider.selectedServer!);
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
final result = await getBlockedServices(server: serversProvider.selectedServer!);
if (result['result'] == 'success') {
widget.serversProvider.setBlockedServicesListLoadStatus(1, true);
widget.serversProvider.setBlockedServiceListData(result['data']);
filteringProvider.setBlockedServicesListLoadStatus(LoadStatus.loaded, true);
filteringProvider.setBlockedServiceListData(result['data']);
}
else {
widget.serversProvider.setBlockedServicesListLoadStatus(2, true);
widget.appConfigProvider.addLog(result['log']);
filteringProvider.setBlockedServicesListLoadStatus(LoadStatus.loaded, true);
appConfigProvider.addLog(result['log']);
}
}
@override
void initState() {
if (widget.serversProvider.blockedServicesList.loadStatus != 1) {
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
if (filteringProvider.blockedServicesLoadStatus != LoadStatus.loaded) {
loadBlockedServices();
}
values = widget.serversProvider.filtering.data!.blockedServices;
values = filteringProvider.filtering!.blockedServices;
super.initState();
}
@ -77,6 +60,7 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final filteringProvider = Provider.of<FilteringProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
void updateValues(bool value, BlockedService item) {
@ -101,7 +85,7 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
processModal.close();
if (result['result'] == 'success') {
serversProvider.setBlockedServices(values);
filteringProvider.setBlockedServices(values);
showSnacbkar(
appConfigProvider: appConfigProvider,
@ -119,8 +103,8 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
}
Widget body() {
switch (serversProvider.blockedServicesList.loadStatus) {
case 0:
switch (filteringProvider.blockedServicesLoadStatus) {
case LoadStatus.loading:
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
width: double.maxFinite,
@ -142,15 +126,15 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
),
);
case 1:
case LoadStatus.loaded:
return ListView.builder(
itemCount: serversProvider.blockedServicesList.services!.length,
itemCount: filteringProvider.blockedServices!.services!.length,
itemBuilder: (context, index) => Material(
color: Colors.transparent,
child: InkWell(
onTap: () => updateValues(
values.contains(serversProvider.blockedServicesList.services![index].id),
serversProvider.blockedServicesList.services![index]
values.contains(filteringProvider.blockedServices!.services![index].id),
filteringProvider.blockedServices!.services![index]
),
child: Padding(
padding: const EdgeInsets.only(
@ -163,17 +147,17 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
serversProvider.blockedServicesList.services![index].name,
filteringProvider.blockedServices!.services![index].name,
style: TextStyle(
fontSize: 16,
color: Theme.of(context).colorScheme.onSurface
),
),
Checkbox(
value: values.contains(serversProvider.blockedServicesList.services![index].id),
value: values.contains(filteringProvider.blockedServices!.services![index].id),
onChanged: (value) => updateValues(
value!,
serversProvider.blockedServicesList.services![index]
filteringProvider.blockedServices!.services![index]
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5)
@ -186,7 +170,7 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
)
);
case 2:
case LoadStatus.error:
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
width: double.maxFinite,

View file

@ -17,6 +17,7 @@ import 'package:adguard_home_manager/screens/filters/update_interval_lists_modal
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/providers/filters_provider.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/models/filtering.dart';
import 'package:adguard_home_manager/constants/enums.dart';
@ -24,49 +25,31 @@ 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';
class Filters extends StatelessWidget {
class Filters extends StatefulWidget {
const Filters({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
return FiltersWidget(
serversProvider: serversProvider,
appConfigProvider: appConfigProvider
);
}
State<Filters> createState() => _FiltersState();
}
class FiltersWidget extends StatefulWidget {
final ServersProvider serversProvider;
final AppConfigProvider appConfigProvider;
const FiltersWidget({
Key? key,
required this.serversProvider,
required this.appConfigProvider
}) : super(key: key);
@override
State<FiltersWidget> createState() => _FiltersWidgetState();
}
class _FiltersWidgetState extends State<FiltersWidget> {
class _FiltersState extends State<Filters> {
Future fetchFilters() async {
widget.serversProvider.setFilteringLoadStatus(LoadStatus.loading, false);
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
final result = await getFiltering(server: widget.serversProvider.selectedServer!);
filteringProvider.setFilteringLoadStatus(LoadStatus.loading, false);
final result = await getFiltering(server: serversProvider.selectedServer!);
if (mounted) {
if (result['result'] == 'success') {
widget.serversProvider.setFilteringData(result['data']);
widget.serversProvider.setFilteringLoadStatus(LoadStatus.loaded, false);
filteringProvider.setFilteringData(result['data']);
filteringProvider.setFilteringLoadStatus(LoadStatus.loaded, false);
}
else {
widget.appConfigProvider.addLog(result['log']);
widget.serversProvider.setFilteringLoadStatus(LoadStatus.error, false);
appConfigProvider.addLog(result['log']);
filteringProvider.setFilteringLoadStatus(LoadStatus.error, false);
}
}
}
@ -84,6 +67,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final filteringProvider = Provider.of<FilteringProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
@ -96,13 +80,13 @@ class _FiltersWidgetState extends State<FiltersWidget> {
final result = await updateLists(server: serversProvider.selectedServer!);
if (result['result'] == 'success') {
final result2 = await getFiltering(server: widget.serversProvider.selectedServer!);
final result2 = await getFiltering(server: serversProvider.selectedServer!);
processModal.close();
if (mounted) {
if (result2['result'] == 'success') {
widget.serversProvider.setFilteringData(result2['data']);
filteringProvider.setFilteringData(result2['data']);
showSnacbkar(
appConfigProvider: appConfigProvider,
@ -111,7 +95,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
);
}
else {
widget.appConfigProvider.addLog(result2['log']);
appConfigProvider.addLog(result2['log']);
showSnacbkar(
appConfigProvider: appConfigProvider,
@ -173,7 +157,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
processModal.close();
if (result['result'] == 'success') {
serversProvider.setFilteringProtectionStatus(!statusProvider.serverStatus!.filteringEnabled);
filteringProvider.setFilteringProtectionStatus(!statusProvider.serverStatus!.filteringEnabled);
showSnacbkar(
appConfigProvider: appConfigProvider,
@ -195,14 +179,14 @@ class _FiltersWidgetState extends State<FiltersWidget> {
processModal.open(AppLocalizations.of(context)!.changingUpdateFrequency);
final result = await requestChangeUpdateFrequency(server: serversProvider.selectedServer!, data: {
"enabled": serversProvider.filtering.data!.enabled,
"enabled": filteringProvider.filtering!.enabled,
"interval": value
});
processModal.close();
if (result['result'] == 'success') {
serversProvider.setFiltersUpdateFrequency(value);
filteringProvider.setFiltersUpdateFrequency(value);
showSnacbkar(
appConfigProvider: appConfigProvider,
@ -246,16 +230,16 @@ class _FiltersWidgetState extends State<FiltersWidget> {
ProcessModal processModal = ProcessModal(context: context);
processModal.open(AppLocalizations.of(context)!.deletingRule);
final List<String> newRules = serversProvider.filtering.data!.userRules.where((r) => r != rule).toList();
final List<String> newRules = filteringProvider.filtering!.userRules.where((r) => r != rule).toList();
final result = await setCustomRules(server: serversProvider.selectedServer!, rules: newRules);
processModal.close();
if (result['result'] == 'success') {
FilteringData filteringData = serversProvider.filtering.data!;
Filtering filteringData = filteringProvider.filtering!;
filteringData.userRules = newRules;
serversProvider.setFilteringData(filteringData);
filteringProvider.setFilteringData(filteringData);
showSnacbkar(
appConfigProvider: appConfigProvider,
@ -309,11 +293,11 @@ class _FiltersWidgetState extends State<FiltersWidget> {
}
List<Widget> actions() {
if (serversProvider.filtering.loadStatus == LoadStatus.loaded) {
if (filteringProvider.loadStatus == LoadStatus.loaded) {
return [
IconButton(
onPressed: enableDisableFiltering,
tooltip: serversProvider.filtering.data!.enabled == true
tooltip: filteringProvider.filtering!.enabled == true
? AppLocalizations.of(context)!.disableFiltering
: AppLocalizations.of(context)!.enableFiltering,
icon: Stack(
@ -330,11 +314,11 @@ class _FiltersWidgetState extends State<FiltersWidget> {
color: Colors.white
),
child: Icon(
serversProvider.filtering.data!.enabled == true
filteringProvider.filtering!.enabled == true
? Icons.check_circle_rounded
: Icons.cancel,
size: 12,
color: serversProvider.filtering.data!.enabled == true
color: filteringProvider.filtering!.enabled == true
? appConfigProvider.useThemeColorForStatus == true
? Theme.of(context).colorScheme.primary
: Colors.green
@ -355,7 +339,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
showDialog(
context: context,
builder: (context) => UpdateIntervalListsModal(
interval: serversProvider.filtering.data!.interval,
interval: filteringProvider.filtering!.interval,
onChange: setUpdateFrequency,
dialog: true,
),
@ -365,7 +349,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
showModalBottomSheet(
context: context,
builder: (context) => UpdateIntervalListsModal(
interval: serversProvider.filtering.data!.interval,
interval: filteringProvider.filtering!.interval,
onChange: setUpdateFrequency,
dialog: false,
),

View file

@ -5,6 +5,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/screens/filters/custom_rules_list.dart';
import 'package:adguard_home_manager/screens/filters/filters_list.dart';
import 'package:adguard_home_manager/providers/filters_provider.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/models/filtering.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
@ -49,6 +50,7 @@ class _FiltersTabsViewState extends State<FiltersTabsView> with TickerProviderSt
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final filteringProvider = Provider.of<FilteringProvider>(context);
return DefaultTabController(
length: 3,
@ -110,28 +112,28 @@ class _FiltersTabsViewState extends State<FiltersTabsView> with TickerProviderSt
controller: tabController,
children: [
FiltersList(
loadStatus: serversProvider.filtering.loadStatus,
loadStatus: filteringProvider.loadStatus,
scrollController: scrollController,
type: 'whitelist',
data: serversProvider.filtering.loadStatus == LoadStatus.loaded
? serversProvider.filtering.data!.whitelistFilters : [],
data: filteringProvider.loadStatus == LoadStatus.loaded
? filteringProvider.filtering!.whitelistFilters : [],
fetchData: widget.fetchFilters,
onOpenDetailsScreen: widget.onOpenDetailsModal,
),
FiltersList(
loadStatus: serversProvider.filtering.loadStatus,
loadStatus: filteringProvider.loadStatus,
scrollController: scrollController,
type: 'blacklist',
data: serversProvider.filtering.loadStatus == LoadStatus.loaded
? serversProvider.filtering.data!.filters : [],
data: filteringProvider.loadStatus == LoadStatus.loaded
? filteringProvider.filtering!.filters : [],
fetchData: widget.fetchFilters,
onOpenDetailsScreen: widget.onOpenDetailsModal,
),
CustomRulesList(
loadStatus: serversProvider.filtering.loadStatus,
loadStatus: filteringProvider.loadStatus,
scrollController: scrollController,
data: serversProvider.filtering.loadStatus == LoadStatus.loaded
? serversProvider.filtering.data!.userRules : [],
data: filteringProvider.loadStatus == LoadStatus.loaded
? filteringProvider.filtering!.userRules : [],
fetchData: widget.fetchFilters,
onRemoveCustomRule: widget.onRemoveCustomRule,
),

View file

@ -15,6 +15,7 @@ import 'package:adguard_home_manager/widgets/options_modal.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/models/menu_option.dart';
import 'package:adguard_home_manager/functions/copy_clipboard.dart';
import 'package:adguard_home_manager/providers/filters_provider.dart';
import 'package:adguard_home_manager/models/filtering.dart';
import 'package:adguard_home_manager/functions/number_format.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
@ -37,6 +38,7 @@ class FiltersTripleColumn extends StatelessWidget {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final filteringProvider = Provider.of<FilteringProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
bool checkIfComment(String value) {
@ -84,7 +86,7 @@ class FiltersTripleColumn extends StatelessWidget {
}
Widget content() {
switch (serversProvider.filtering.loadStatus) {
switch (filteringProvider.loadStatus) {
case LoadStatus.loading:
return Row(
mainAxisAlignment: MainAxisAlignment.center,
@ -140,18 +142,18 @@ class FiltersTripleColumn extends StatelessWidget {
),
Expanded(
child: ListView.builder(
itemCount: serversProvider.filtering.data!.whitelistFilters.length,
itemCount: filteringProvider.filtering!.whitelistFilters.length,
itemBuilder: (context, index) => ListOptionsMenu(
list: serversProvider.filtering.data!.whitelistFilters[index],
list: filteringProvider.filtering!.whitelistFilters[index],
listType: 'whitelist',
child: CustomListTile(
title: serversProvider.filtering.data!.whitelistFilters[index].name,
subtitle: "${intFormat(serversProvider.filtering.data!.whitelistFilters[index].rulesCount, Platform.localeName)} ${AppLocalizations.of(context)!.enabledRules}",
title: filteringProvider.filtering!.whitelistFilters[index].name,
subtitle: "${intFormat(filteringProvider.filtering!.whitelistFilters[index].rulesCount, Platform.localeName)} ${AppLocalizations.of(context)!.enabledRules}",
trailing: Icon(
serversProvider.filtering.data!.whitelistFilters[index].enabled == true
filteringProvider.filtering!.whitelistFilters[index].enabled == true
? Icons.check_circle_rounded
: Icons.cancel,
color: serversProvider.filtering.data!.whitelistFilters[index].enabled == true
color: filteringProvider.filtering!.whitelistFilters[index].enabled == true
? appConfigProvider.useThemeColorForStatus == true
? Theme.of(context).colorScheme.primary
: Colors.green
@ -159,7 +161,7 @@ class FiltersTripleColumn extends StatelessWidget {
? Colors.grey
: Colors.red
),
onTap: () => onOpenDetailsModal(serversProvider.filtering.data!.whitelistFilters[index], 'whitelist'),
onTap: () => onOpenDetailsModal(filteringProvider.filtering!.whitelistFilters[index], 'whitelist'),
),
),
),
@ -196,18 +198,18 @@ class FiltersTripleColumn extends StatelessWidget {
),
Expanded(
child: ListView.builder(
itemCount: serversProvider.filtering.data!.filters.length,
itemCount: filteringProvider.filtering!.filters.length,
itemBuilder: (context, index) => ListOptionsMenu(
list: serversProvider.filtering.data!.filters[index],
list: filteringProvider.filtering!.filters[index],
listType: 'blacklist',
child: CustomListTile(
title: serversProvider.filtering.data!.filters[index].name,
subtitle: "${intFormat(serversProvider.filtering.data!.filters[index].rulesCount, Platform.localeName)} ${AppLocalizations.of(context)!.enabledRules}",
title: filteringProvider.filtering!.filters[index].name,
subtitle: "${intFormat(filteringProvider.filtering!.filters[index].rulesCount, Platform.localeName)} ${AppLocalizations.of(context)!.enabledRules}",
trailing: Icon(
serversProvider.filtering.data!.filters[index].enabled == true
filteringProvider.filtering!.filters[index].enabled == true
? Icons.check_circle_rounded
: Icons.cancel,
color: serversProvider.filtering.data!.filters[index].enabled == true
color: filteringProvider.filtering!.filters[index].enabled == true
? appConfigProvider.useThemeColorForStatus == true
? Theme.of(context).colorScheme.primary
: Colors.green
@ -215,7 +217,7 @@ class FiltersTripleColumn extends StatelessWidget {
? Colors.grey
: Colors.red
),
onTap: () => onOpenDetailsModal(serversProvider.filtering.data!.filters[index], 'blacklist'),
onTap: () => onOpenDetailsModal(filteringProvider.filtering!.filters[index], 'blacklist'),
),
),
),
@ -252,7 +254,7 @@ class FiltersTripleColumn extends StatelessWidget {
),
Expanded(
child: ListView.builder(
itemCount: serversProvider.filtering.data!.userRules.length,
itemCount: filteringProvider.filtering!.userRules.length,
itemBuilder: (context, index) => ContextMenuArea(
builder: (context) => [
CustomListTile(
@ -261,7 +263,7 @@ class FiltersTripleColumn extends StatelessWidget {
onTap: () {
copyToClipboard(
context: context,
value: serversProvider.filtering.data!.userRules[index],
value: filteringProvider.filtering!.userRules[index],
successMessage: AppLocalizations.of(context)!.copiedClipboard,
);
Navigator.pop(context);
@ -278,17 +280,17 @@ class FiltersTripleColumn extends StatelessWidget {
icon: Icons.copy_rounded,
action: () => copyToClipboard(
context: context,
value: serversProvider.filtering.data!.userRules[index],
value: filteringProvider.filtering!.userRules[index],
successMessage: AppLocalizations.of(context)!.copiedClipboard,
)
)
]
)
),
title: serversProvider.filtering.data!.userRules[index],
subtitleWidget: generateSubtitle(serversProvider.filtering.data!.userRules[index]),
title: filteringProvider.filtering!.userRules[index],
subtitleWidget: generateSubtitle(filteringProvider.filtering!.userRules[index]),
trailing: IconButton(
onPressed: () => onRemoveCustomRule(serversProvider.filtering.data!.userRules[index]),
onPressed: () => onRemoveCustomRule(filteringProvider.filtering!.userRules[index]),
icon: const Icon(Icons.delete)
),
),

View file

@ -13,6 +13,7 @@ import 'package:adguard_home_manager/screens/filters/list_functions.dart';
import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
import 'package:adguard_home_manager/functions/format_time.dart';
import 'package:adguard_home_manager/providers/filters_provider.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
@ -61,16 +62,17 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final filteringProvider = Provider.of<FilteringProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
final width = MediaQuery.of(context).size.width;
Filter? list;
try {
list = serversProvider.filtering.data != null
list = filteringProvider.filtering != null
? widget.type == 'whitelist'
? serversProvider.filtering.data!.whitelistFilters.firstWhere((l) => l.id == widget.listId)
: serversProvider.filtering.data!.filters.firstWhere((l) => l.id == widget.listId)
? filteringProvider.filtering!.whitelistFilters.firstWhere((l) => l.id == widget.listId)
: filteringProvider.filtering!.filters.firstWhere((l) => l.id == widget.listId)
: null;
} catch (e) {
// ------- //
@ -177,8 +179,6 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
onEdit: ({required Filter list, required String type}) async {
final result = await editList(
context: context,
serversProvider: serversProvider,
appConfigProvider: appConfigProvider,
list: list,
type: widget.type
);
@ -210,8 +210,6 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
onEdit: ({required Filter list, required String type}) async {
final result = await editList(
context: context,
serversProvider: serversProvider,
appConfigProvider: appConfigProvider,
list: list,
type: widget.type
);
@ -248,8 +246,6 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
onConfirm: () async {
final result = await deleteList(
context: context,
serversProvider: serversProvider,
appConfigProvider: appConfigProvider,
list: list!,
type: widget.type,
);
@ -315,8 +311,6 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
onPressed: () async {
final result = await enableDisableList(
context: context,
serversProvider: serversProvider,
appConfigProvider: appConfigProvider,
list: list!,
listType: widget.type,
);
@ -402,8 +396,6 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
onPressed: () async {
final result = await enableDisableList(
context: context,
serversProvider: serversProvider,
appConfigProvider: appConfigProvider,
list: list!,
listType: widget.type,
);

View file

@ -1,9 +1,11 @@
// 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/classes/process_modal.dart';
import 'package:adguard_home_manager/providers/filters_provider.dart';
import 'package:adguard_home_manager/models/filtering.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
@ -12,11 +14,13 @@ import 'package:adguard_home_manager/services/http_requests.dart';
Future<bool> enableDisableList({
required BuildContext context,
required ServersProvider serversProvider,
required AppConfigProvider appConfigProvider,
required Filter list,
required String listType,
}) async {
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
ProcessModal processModal = ProcessModal(context: context);
processModal.open(
list.enabled == true
@ -40,12 +44,12 @@ Future<bool> enableDisableList({
final result2 = await getFiltering(server: serversProvider.selectedServer!);
if (result2['result'] == 'success') {
serversProvider.setFilteringData(result2['data']);
serversProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
filteringProvider.setFilteringData(result2['data']);
filteringProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
}
else {
appConfigProvider.addLog(result2['log']);
serversProvider.setFilteringLoadStatus(LoadStatus.error, true);
filteringProvider.setFilteringLoadStatus(LoadStatus.error, true);
}
return true;
@ -59,11 +63,13 @@ Future<bool> enableDisableList({
Future<bool> editList({
required BuildContext context,
required ServersProvider serversProvider,
required AppConfigProvider appConfigProvider,
required Filter list,
required String type
}) async {
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
ProcessModal processModal = ProcessModal(context: context);
processModal.open(AppLocalizations.of(context)!.updatingListData);
@ -81,12 +87,12 @@ Future<bool> editList({
final result2 = await getFiltering(server: serversProvider.selectedServer!);
if (result2['result'] == 'success') {
serversProvider.setFilteringData(result2['data']);
serversProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
filteringProvider.setFilteringData(result2['data']);
filteringProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
}
else {
appConfigProvider.addLog(result2['log']);
serversProvider.setFilteringLoadStatus(LoadStatus.error, true);
filteringProvider.setFilteringLoadStatus(LoadStatus.error, true);
}
processModal.close();
@ -103,11 +109,13 @@ Future<bool> editList({
Future<bool> deleteList({
required BuildContext context,
required ServersProvider serversProvider,
required AppConfigProvider appConfigProvider,
required Filter list,
required String type
}) async {
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
ProcessModal processModal = ProcessModal(context: context);
processModal.open(AppLocalizations.of(context)!.deletingList);
@ -120,12 +128,12 @@ Future<bool> deleteList({
final result2 = await getFiltering(server: serversProvider.selectedServer!);
if (result2['result'] == 'success') {
serversProvider.setFilteringData(result2['data']);
serversProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
filteringProvider.setFilteringData(result2['data']);
filteringProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
}
else {
appConfigProvider.addLog(result2['log']);
serversProvider.setFilteringLoadStatus(LoadStatus.loading, true);
filteringProvider.setFilteringLoadStatus(LoadStatus.loading, true);
}
processModal.close();

View file

@ -14,7 +14,6 @@ import 'package:adguard_home_manager/models/filtering.dart';
import 'package:adguard_home_manager/functions/copy_clipboard.dart';
import 'package:adguard_home_manager/models/menu_option.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
class ListOptionsMenu extends StatelessWidget {
final Filter list;
@ -30,14 +29,11 @@ class ListOptionsMenu extends StatelessWidget {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
void enableDisable() async {
final result = await enableDisableList(
context: context,
serversProvider: serversProvider,
appConfigProvider: appConfigProvider,
list: list,
listType: listType,
);

View file

@ -895,7 +895,7 @@ Future getFiltering({
if (result[0]['statusCode'] == 200 && result[0]['statusCode'] == 200) {
return {
'result': 'success',
'data': FilteringData.fromJson({
'data': Filtering.fromJson({
...jsonDecode(result[0]['body']),
"blocked_services": result[1]['body'] != null
? jsonDecode(result[1]['body'])