start method

Future<bool> start()

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) {
    return false;
  }
  if (!isPlatformSupported) {
    return false;
  }
  if (_isRunning) {
    return false;
  }

  try {
    if (kDebugMode) {
      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) {
        if (kDebugMode) debugPrint('❌ NetworkLogWebServer: Error handling request: $e');
        request.response.statusCode = 500;
        request.response.write('Internal Server Error');
        await request.response.close();
      }
    });

    _startMonitoring();
    if (kDebugMode) {
      debugPrint('βœ… NetworkLogWebServer: Server started successfully!');
      debugPrint('🌐 Network Logger Dashboard: $dashboardUrl');
    }
    return true;
  } catch (e) {
    if (kDebugMode) debugPrint('❌ NetworkLogWebServer: Failed to start server: $e');
    _isRunning = false;
    return false;
  }
}