import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../data/services/receiver_server.dart'; import '../../../discovery/data/services/discovery_service.dart'; class ReceiverState { final bool isRunning; final int? port; final String? ipAddress; final Map? currentVideo; ReceiverState({ this.isRunning = false, this.port, this.ipAddress, this.currentVideo, }); ReceiverState copyWith({ bool? isRunning, int? port, String? ipAddress, Map? currentVideo, }) { return ReceiverState( isRunning: isRunning ?? this.isRunning, port: port ?? this.port, ipAddress: ipAddress ?? this.ipAddress, currentVideo: currentVideo ?? this.currentVideo, ); } } final receiverProvider = NotifierProvider(() { return ReceiverNotifier(); }); class ReceiverNotifier extends Notifier { late ReceiverServer _server; final _discoveryService = DiscoveryService(); @override ReceiverState build() { _server = ReceiverServer(onPlayRequest: _handlePlayRequest); return ReceiverState(); } Future startServer() async { if (state.isRunning) return; final port = await _server.start(); await _discoveryService.registerService(port); state = state.copyWith( isRunning: true, port: port, // In a real app, use network_info_plus to get the real IP ipAddress: 'Checking...', ); } void _handlePlayRequest(Map data) { state = state.copyWith(currentVideo: data); } Future stopServer() async { await _server.stop(); await _discoveryService.stopRegistration(); state = ReceiverState(); } }