start method
Starts the web server if not already running.
Only starts in debug mode or staging environment and on supported platforms. The server will be available at:
- Android Emulator: http://localhost:3000 (from host Mac browser)
- Physical Android: http://YOUR_DEVICE_IP:3000 (find IP in device settings)
- iOS Simulator: http://localhost:3000 (from host Mac browser)
- Physical iOS: http://YOUR_DEVICE_IP:3000 (find IP in device settings)
- Desktop: http://localhost:3000
Dashboard Features:
- π Real-time network monitoring
- π Beautiful Material Design interface
- π Advanced filtering and search
- π± Mobile-responsive design
- β‘ Fast performance with minimal load time
Returns true if the server started successfully, false otherwise.
Implementation
Future<bool> start() async {
if (!NetworkLoggerConfig.isEnabled) {
debugPrint('β οΈ NetworkLogWebServer: Logger is disabled');
return false;
}
if (!isPlatformSupported) {
debugPrint('β οΈ NetworkLogWebServer: Platform not supported');
return false;
}
if (_isRunning) {
debugPrint('β οΈ NetworkLogWebServer: Server already running');
return false;
}
try {
debugPrint('π NetworkLogWebServer: Starting server on ${NetworkLoggerConfig.serverHost}:${NetworkLoggerConfig.serverPort}...');
final handler = _createHandler();
_server = await HttpServer.bind(NetworkLoggerConfig.serverHost, NetworkLoggerConfig.serverPort);
_isRunning = true;
_server!.listen((HttpRequest request) async {
try {
if (request.uri.path == '/ws' && WebSocketTransformer.isUpgradeRequest(request)) {
final socket = await WebSocketTransformer.upgrade(request);
_handleWebSocketConnection(socket);
return;
}
final headers = <String, String>{};
request.headers.forEach((name, values) {
if (values.isNotEmpty) headers[name] = values.join(',');
});
final shelfRequest = Request(
request.method,
request.requestedUri,
headers: headers,
body: request,
context: {'shelf.io.request': request},
);
final shelfResponse = await handler(shelfRequest);
request.response.statusCode = shelfResponse.statusCode;
shelfResponse.headers.forEach((name, value) {
request.response.headers.set(name, value);
});
await shelfResponse.read().forEach(request.response.add);
await request.response.close();
} catch (e) {
debugPrint('β NetworkLogWebServer: Error handling request: $e');
request.response.statusCode = 500;
request.response.write('Internal Server Error');
await request.response.close();
}
});
_startMonitoring();
debugPrint('β
NetworkLogWebServer: Server started successfully!');
debugPrint('π Network Logger Dashboard: $dashboardUrl');
await _printAccessInstructions();
return true;
} catch (e) {
debugPrint('β NetworkLogWebServer: Failed to start server: $e');
_isRunning = false;
return false;
}
}