mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-04-25 08:16:06 +00:00
Extracted dhcp to external provider
This commit is contained in:
parent
cd4a8aaf4f
commit
9460da6dcb
8 changed files with 83 additions and 96 deletions
|
@ -21,6 +21,7 @@ import 'package:adguard_home_manager/providers/logs_provider.dart';
|
|||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/clients_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/filters_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/dhcp_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/constants/colors.dart';
|
||||
|
@ -30,7 +31,6 @@ import 'package:adguard_home_manager/config/theme.dart';
|
|||
import 'package:adguard_home_manager/classes/http_override.dart';
|
||||
import 'package:adguard_home_manager/services/db/database.dart';
|
||||
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
|
@ -50,6 +50,7 @@ void main() async {
|
|||
StatusProvider statusProvider = StatusProvider();
|
||||
ClientsProvider clientsProvider = ClientsProvider();
|
||||
FilteringProvider filtersProvider = FilteringProvider();
|
||||
DhcpProvider dhcpProvider = DhcpProvider();
|
||||
LogsProvider logsProvider = LogsProvider();
|
||||
|
||||
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
|
||||
|
@ -97,6 +98,9 @@ void main() async {
|
|||
ChangeNotifierProvider(
|
||||
create: ((context) => serversProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => appConfigProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => statusProvider)
|
||||
),
|
||||
|
@ -110,7 +114,7 @@ void main() async {
|
|||
create: ((context) => filtersProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => appConfigProvider)
|
||||
create: ((context) => dhcpProvider)
|
||||
),
|
||||
ChangeNotifierProxyProvider<StatusProvider, FilteringProvider>(
|
||||
create: (context) => filtersProvider,
|
||||
|
@ -181,15 +185,15 @@ class _MainState extends State<Main> {
|
|||
builder: (lightDynamic, darkDynamic) => MaterialApp(
|
||||
title: 'AdGuard Home Manager',
|
||||
theme: appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31
|
||||
? appConfigProvider.useDynamicColor == true
|
||||
? lightTheme(lightDynamic)
|
||||
: lightThemeOldVersions(colors[appConfigProvider.staticColor])
|
||||
: lightThemeOldVersions(colors[appConfigProvider.staticColor]),
|
||||
darkTheme: appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31
|
||||
? appConfigProvider.useDynamicColor == true
|
||||
? darkTheme(darkDynamic)
|
||||
: darkThemeOldVersions(colors[appConfigProvider.staticColor])
|
||||
: darkThemeOldVersions(colors[appConfigProvider.staticColor]),
|
||||
? appConfigProvider.useDynamicColor == true
|
||||
? lightTheme(lightDynamic)
|
||||
: lightThemeOldVersions(colors[appConfigProvider.staticColor])
|
||||
: lightThemeOldVersions(colors[appConfigProvider.staticColor]),
|
||||
darkTheme: appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31
|
||||
? appConfigProvider.useDynamicColor == true
|
||||
? darkTheme(darkDynamic)
|
||||
: darkThemeOldVersions(colors[appConfigProvider.staticColor])
|
||||
: darkThemeOldVersions(colors[appConfigProvider.staticColor]),
|
||||
themeMode: appConfigProvider.selectedTheme,
|
||||
debugShowCheckedModeBanner: false,
|
||||
localizationsDelegates: const [
|
||||
|
|
|
@ -1,20 +1,9 @@
|
|||
import 'dart:convert';
|
||||
|
||||
class DhcpModel {
|
||||
int loadStatus = 0;
|
||||
DhcpData? data;
|
||||
|
||||
DhcpModel({
|
||||
required this.loadStatus,
|
||||
this.data,
|
||||
});
|
||||
}
|
||||
|
||||
class DhcpData {
|
||||
List<NetworkInterface> networkInterfaces;
|
||||
DhcpStatus dhcpStatus;
|
||||
|
||||
DhcpData({
|
||||
DhcpModel({
|
||||
required this.networkInterfaces,
|
||||
required this.dhcpStatus,
|
||||
});
|
||||
|
|
29
lib/providers/dhcp_provider.dart
Normal file
29
lib/providers/dhcp_provider.dart
Normal file
|
@ -0,0 +1,29 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/models/dhcp.dart';
|
||||
|
||||
class DhcpProvider with ChangeNotifier {
|
||||
LoadStatus _loadStatus = LoadStatus.loading;
|
||||
DhcpModel? _dhcp;
|
||||
|
||||
DhcpModel? get dhcp {
|
||||
return _dhcp;
|
||||
}
|
||||
|
||||
LoadStatus get loadStatus {
|
||||
return _loadStatus;
|
||||
}
|
||||
|
||||
void setDhcpData(DhcpModel data) {
|
||||
_dhcp = data;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setDhcpLoadStatus(LoadStatus status, bool notify) {
|
||||
_loadStatus = status;
|
||||
if (notify == true) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -18,11 +18,6 @@ class ServersProvider with ChangeNotifier {
|
|||
List<Server> _serversList = [];
|
||||
Server? _selectedServer;
|
||||
|
||||
final DhcpModel _dhcp = DhcpModel(
|
||||
loadStatus: 0, // 0 = loading, 1 = loaded, 2 = error
|
||||
data: null
|
||||
);
|
||||
|
||||
final RewriteRules _rewriteRules = RewriteRules(
|
||||
loadStatus: 0, // 0 = loading, 1 = loaded, 2 = error
|
||||
data: null
|
||||
|
@ -46,10 +41,6 @@ class ServersProvider with ChangeNotifier {
|
|||
return _selectedServer;
|
||||
}
|
||||
|
||||
DhcpModel get dhcp {
|
||||
return _dhcp;
|
||||
}
|
||||
|
||||
RewriteRules get rewriteRules {
|
||||
return _rewriteRules;
|
||||
}
|
||||
|
@ -75,18 +66,6 @@ class ServersProvider with ChangeNotifier {
|
|||
_selectedServer = server;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setDhcpData(DhcpData data) {
|
||||
_dhcp.data = data;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setDhcpLoadStatus(int status, bool notify) {
|
||||
_dhcp.loadStatus = status;
|
||||
if (notify == true) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void setRewriteRulesData(List<RewriteRulesData> data) {
|
||||
_rewriteRules.data = data;
|
||||
|
|
|
@ -13,42 +13,22 @@ import 'package:adguard_home_manager/screens/settings/dhcp/dhcp_leases.dart';
|
|||
import 'package:adguard_home_manager/screens/settings/dhcp/select_interface_modal.dart';
|
||||
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/providers/dhcp_provider.dart';
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
import 'package:adguard_home_manager/models/dhcp.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
class Dhcp extends StatelessWidget {
|
||||
const Dhcp({Key? key}) : super(key: key);
|
||||
class DhcpScreen extends StatefulWidget {
|
||||
const DhcpScreen({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
return DhcpWidget(
|
||||
serversProvider: serversProvider,
|
||||
appConfigProvider: appConfigProvider
|
||||
);
|
||||
}
|
||||
State<DhcpScreen> createState() => _DhcpScreenState();
|
||||
}
|
||||
|
||||
class DhcpWidget extends StatefulWidget {
|
||||
final ServersProvider serversProvider;
|
||||
final AppConfigProvider appConfigProvider;
|
||||
|
||||
const DhcpWidget({
|
||||
Key? key,
|
||||
required this.serversProvider,
|
||||
required this.appConfigProvider
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<DhcpWidget> createState() => _DhcpWidgetState();
|
||||
}
|
||||
|
||||
class _DhcpWidgetState extends State<DhcpWidget> {
|
||||
class _DhcpScreenState extends State<DhcpScreen> {
|
||||
NetworkInterface? selectedInterface;
|
||||
|
||||
bool enabled = false;
|
||||
|
@ -74,17 +54,20 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
bool dataValid = false;
|
||||
|
||||
void loadDhcpStatus() async {
|
||||
widget.serversProvider.setDhcpLoadStatus(0, false);
|
||||
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||
final dhcpProvider = Provider.of<DhcpProvider>(context, listen: false);
|
||||
|
||||
final result = await getDhcpData(server: widget.serversProvider.selectedServer!);
|
||||
dhcpProvider.setDhcpLoadStatus(LoadStatus.loading, false);
|
||||
|
||||
final result = await getDhcpData(server: serversProvider.selectedServer!);
|
||||
|
||||
if (mounted) {
|
||||
if (result['result'] == 'success') {
|
||||
widget.serversProvider.setDhcpLoadStatus(1, true);
|
||||
widget.serversProvider.setDhcpData(result['data']);
|
||||
dhcpProvider.setDhcpData(result['data']);
|
||||
dhcpProvider.setDhcpLoadStatus(LoadStatus.loaded, true);
|
||||
setState(() {
|
||||
if (result['data'].dhcpStatus.interfaceName != '') {
|
||||
selectedInterface = result['data'].networkInterfaces.firstWhere((interface) => interface.name == result['data'].dhcpStatus.interfaceName);
|
||||
selectedInterface = result['data'].networkInterfaces.firstWhere((iface) => iface.name == result['data'].dhcpStatus.interfaceName);
|
||||
|
||||
enabled = result['data'].dhcpStatus.enabled;
|
||||
ipv4StartRangeController.text = result['data'].dhcpStatus.v4.rangeStart;
|
||||
|
@ -97,7 +80,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
});
|
||||
}
|
||||
else {
|
||||
widget.serversProvider.setDhcpLoadStatus(2, true);
|
||||
dhcpProvider.setDhcpLoadStatus(LoadStatus.error, true);
|
||||
}
|
||||
}
|
||||
checkDataValid();
|
||||
|
@ -213,6 +196,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final dhcpProvider = Provider.of<DhcpProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
@ -298,10 +282,10 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
DhcpData data = serversProvider.dhcp.data!;
|
||||
DhcpModel data = dhcpProvider.dhcp!;
|
||||
data.dhcpStatus.staticLeases = [];
|
||||
data.dhcpStatus.leases = [];
|
||||
serversProvider.setDhcpData(data);
|
||||
dhcpProvider.setDhcpData(data);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -356,7 +340,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => SelectInterfaceModal(
|
||||
interfaces: serversProvider.dhcp.data!.networkInterfaces,
|
||||
interfaces: dhcpProvider.dhcp!.networkInterfaces,
|
||||
onSelect: (interface) => setState(() {
|
||||
clearAll();
|
||||
selectedInterface = interface;
|
||||
|
@ -369,7 +353,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
showModalBottomSheet(
|
||||
context: context,
|
||||
builder: (context) => SelectInterfaceModal(
|
||||
interfaces: serversProvider.dhcp.data!.networkInterfaces,
|
||||
interfaces: dhcpProvider.dhcp!.networkInterfaces,
|
||||
onSelect: (i) => setState(() {
|
||||
clearAll();
|
||||
selectedInterface = i;
|
||||
|
@ -383,8 +367,8 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
}
|
||||
|
||||
Widget generateBody() {
|
||||
switch (serversProvider.dhcp.loadStatus) {
|
||||
case 0:
|
||||
switch (dhcpProvider.loadStatus) {
|
||||
case LoadStatus.loading:
|
||||
return SizedBox(
|
||||
width: double.maxFinite,
|
||||
child: Column(
|
||||
|
@ -404,7 +388,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
),
|
||||
);
|
||||
|
||||
case 1:
|
||||
case LoadStatus.loaded:
|
||||
if (selectedInterface != null) {
|
||||
return SingleChildScrollView(
|
||||
child: Wrap(
|
||||
|
@ -683,7 +667,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
onTap: () {
|
||||
Navigator.push(context, MaterialPageRoute(
|
||||
builder: (context) => DhcpLeases(
|
||||
items: serversProvider.dhcp.data!.dhcpStatus.leases,
|
||||
items: dhcpProvider.dhcp!.dhcpStatus.leases,
|
||||
staticLeases: false,
|
||||
)
|
||||
));
|
||||
|
@ -716,7 +700,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
onTap: () {
|
||||
Navigator.push(context, MaterialPageRoute(
|
||||
builder: (context) => DhcpLeases(
|
||||
items: serversProvider.dhcp.data!.dhcpStatus.staticLeases,
|
||||
items: dhcpProvider.dhcp!.dhcpStatus.staticLeases,
|
||||
staticLeases: true,
|
||||
)
|
||||
));
|
||||
|
@ -751,7 +735,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
if (!(Platform.isAndroid || Platform.isIOS)) {
|
||||
SplitView.of(context).push(
|
||||
DhcpLeases(
|
||||
items: serversProvider.dhcp.data!.dhcpStatus.leases,
|
||||
items: dhcpProvider.dhcp!.dhcpStatus.leases,
|
||||
staticLeases: false,
|
||||
)
|
||||
);
|
||||
|
@ -759,7 +743,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
else {
|
||||
Navigator.push(context, MaterialPageRoute(
|
||||
builder: (context) => DhcpLeases(
|
||||
items: serversProvider.dhcp.data!.dhcpStatus.leases,
|
||||
items: dhcpProvider.dhcp!.dhcpStatus.leases,
|
||||
staticLeases: false,
|
||||
)
|
||||
));
|
||||
|
@ -778,7 +762,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
if (!(Platform.isAndroid || Platform.isIOS)) {
|
||||
SplitView.of(context).push(
|
||||
DhcpLeases(
|
||||
items: serversProvider.dhcp.data!.dhcpStatus.staticLeases,
|
||||
items: dhcpProvider.dhcp!.dhcpStatus.staticLeases,
|
||||
staticLeases: true,
|
||||
)
|
||||
);
|
||||
|
@ -786,7 +770,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
else {
|
||||
Navigator.push(context, MaterialPageRoute(
|
||||
builder: (context) => DhcpLeases(
|
||||
items: serversProvider.dhcp.data!.dhcpStatus.staticLeases,
|
||||
items: dhcpProvider.dhcp!.dhcpStatus.staticLeases,
|
||||
staticLeases: true,
|
||||
)
|
||||
));
|
||||
|
@ -840,7 +824,7 @@ class _DhcpWidgetState extends State<DhcpWidget> {
|
|||
);
|
||||
}
|
||||
|
||||
case 2:
|
||||
case LoadStatus.error:
|
||||
return SizedBox(
|
||||
width: double.maxFinite,
|
||||
child: Column(
|
||||
|
|
|
@ -10,6 +10,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|||
import 'package:adguard_home_manager/screens/settings/dhcp/delete_static_lease_modal.dart';
|
||||
import 'package:adguard_home_manager/screens/settings/dhcp/add_static_lease_modal.dart';
|
||||
|
||||
import 'package:adguard_home_manager/providers/dhcp_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
|
@ -30,6 +31,7 @@ class DhcpLeases extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final dhcpProvider = Provider.of<DhcpProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
@ -47,9 +49,9 @@ class DhcpLeases extends StatelessWidget {
|
|||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
DhcpData data = serversProvider.dhcp.data!;
|
||||
DhcpModel data = dhcpProvider.dhcp!;
|
||||
data.dhcpStatus.staticLeases = data.dhcpStatus.staticLeases.where((l) => l.mac != lease.mac).toList();
|
||||
serversProvider.setDhcpData(data);
|
||||
dhcpProvider.setDhcpData(data);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -80,9 +82,9 @@ class DhcpLeases extends StatelessWidget {
|
|||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
DhcpData data = serversProvider.dhcp.data!;
|
||||
DhcpModel data = dhcpProvider.dhcp!;
|
||||
data.dhcpStatus.staticLeases.add(lease);
|
||||
serversProvider.setDhcpData(data);
|
||||
dhcpProvider.setDhcpData(data);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
|
|
@ -156,7 +156,7 @@ class SettingsWidget extends StatelessWidget {
|
|||
title: AppLocalizations.of(context)!.dhcpSettings,
|
||||
subtitle: AppLocalizations.of(context)!.dhcpSettingsDescription,
|
||||
thisItem: 2,
|
||||
screenToNavigate: const Dhcp(),
|
||||
screenToNavigate: const DhcpScreen(),
|
||||
),
|
||||
settingsTile(
|
||||
icon: Icons.dns_rounded,
|
||||
|
|
|
@ -1289,7 +1289,7 @@ Future getDhcpData({
|
|||
|
||||
return {
|
||||
'result': 'success',
|
||||
'data': DhcpData(
|
||||
'data': DhcpModel(
|
||||
networkInterfaces: interfaces,
|
||||
dhcpStatus: DhcpStatus.fromJson(jsonDecode(result[1]['body']))
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue