11import 'package:dart_ping_ios/dart_ping_ios.dart' ;
2+ import 'package:get_it/get_it.dart' ;
23import 'package:logging/logging.dart' ;
34import 'package:network_tools/network_tools.dart' as packages_page;
45// ignore: implementation_imports
6+ import 'package:network_tools/src/database/database_service.dart' ;
7+ // ignore: implementation_imports
8+ import 'package:network_tools/src/database/drift_database.dart' ;
9+ // ignore: implementation_imports
10+ import 'package:network_tools/src/repository/repository.dart' ;
11+ // ignore: implementation_imports
512import 'package:network_tools_flutter/src/network_tools_flutter_util.dart' ;
613import 'package:network_tools_flutter/src/services_impls/host_scanner_service_flutter_impl.dart' ;
714import 'package:network_tools_flutter/src/services_impls/mdns_scanner_service_flutter_impl.dart' ;
815import 'package:network_tools_flutter/src/services_impls/port_scanner_service_flutter_impl.dart' ;
916import 'package:universal_io/io.dart' ;
1017
18+ bool _isConfigured = false ;
19+ Future <void >? _configureFuture;
20+
1121/// Configures the network tools for Flutter.
1222///
1323/// [dbDirectory] is the directory for the database.
1424/// [enableDebugging] enables verbose logging if set to true.
1525///
1626/// This function sets up implementations for ARP, host, port, and mDNS scanning services,
1727/// initializes the ARP table, and registers DartPing for iOS if needed.
18- Future configureNetworkToolsFlutter (
28+ Future < void > configureNetworkToolsFlutter (
1929 String dbDirectory, {
2030 bool enableDebugging = false ,
2131 bool rebuildData = false ,
32+ }) async {
33+ if (_isConfigured && ! rebuildData) {
34+ return ;
35+ }
36+
37+ if (_configureFuture != null ) {
38+ await _configureFuture;
39+ if (_isConfigured && ! rebuildData) {
40+ return ;
41+ }
42+ }
43+
44+ _configureFuture = _doConfigureNetworkToolsFlutter (
45+ dbDirectory,
46+ enableDebugging: enableDebugging,
47+ rebuildData: rebuildData,
48+ );
49+ try {
50+ await _configureFuture;
51+ _isConfigured = true ;
52+ } finally {
53+ _configureFuture = null ;
54+ }
55+ }
56+
57+ Future <void > _doConfigureNetworkToolsFlutter (
58+ String dbDirectory, {
59+ required bool enableDebugging,
60+ required bool rebuildData,
2261}) async {
2362 packages_page.enableDebugging = enableDebugging;
2463 packages_page.dbDirectory = dbDirectory;
@@ -40,7 +79,15 @@ Future configureNetworkToolsFlutter(
4079 PortScannerServiceFlutterImpl ();
4180 MdnsScannerServiceFlutterImpl ();
4281
43- await packages_page.initializeNetworkTools (rebuildData);
82+ if (GetIt .instance.isRegistered <DatabaseService <AppDatabase >>()) {
83+ if (rebuildData) {
84+ await GetIt .instance< Repository <packages_page.ARPData >> ().clear ();
85+ }
86+ await GetIt .instance< Repository <packages_page.ARPData >> ().build ();
87+ await GetIt .instance< Repository <packages_page.Vendor >> ().build ();
88+ } else {
89+ await packages_page.initializeNetworkTools (rebuildData);
90+ }
4491
4592 // Register dart ping for main isolate
4693 if (Platform .isIOS) {
0 commit comments