import 'package:flutter/material.dart'; import '../utils/translations.dart'; class CameraSelectionDialog extends StatefulWidget { final List> availableCameras; final String selectedLanguage; const CameraSelectionDialog({ super.key, required this.availableCameras, required this.selectedLanguage, }); @override State createState() => _CameraSelectionDialogState(); } class _CameraSelectionDialogState extends State { late List _selectedCameras; @override void initState() { super.initState(); _selectedCameras = List.generate(widget.availableCameras.length, (_) => false); } String _t(String key) { return AppTranslations.translate(key, widget.selectedLanguage); } @override Widget build(BuildContext context) { return AlertDialog( backgroundColor: Colors.grey[900], title: Text( _t('Select Cameras to Spectate'), style: const TextStyle( color: Colors.white, fontSize: 18, fontWeight: FontWeight.w600, ), ), content: SizedBox( width: double.maxFinite, child: Column( mainAxisSize: MainAxisSize.min, children: [ Text( _t('Choose 1-6 cameras'), style: TextStyle( color: Colors.grey[400], fontSize: 14, ), ), const SizedBox(height: 16), Flexible( child: ListView.builder( shrinkWrap: true, itemCount: widget.availableCameras.length, itemBuilder: (context, index) { final camera = widget.availableCameras[index]; final cameraIndex = camera['index'] as int; final cameraIp = camera['ip'] as String; return CheckboxListTile( title: Text( "${_t('Camera')} $cameraIndex", style: const TextStyle( color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500, ), ), subtitle: Text( cameraIp, style: TextStyle( color: Colors.grey[400], fontSize: 12, ), ), value: _selectedCameras[index], onChanged: (value) { setState(() { _selectedCameras[index] = value ?? false; }); }, activeColor: Colors.grey[800], checkColor: Colors.white, tileColor: Colors.grey[850], shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), contentPadding: const EdgeInsets.symmetric( horizontal: 12, vertical: 4, ), ); }, ), ), ], ), ), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: Text( _t('Cancel'), style: const TextStyle(color: Colors.grey), ), ), TextButton( onPressed: _selectedCameras.contains(true) ? () { final selectedCameras = >[]; for (int i = 0; i < _selectedCameras.length; i++) { if (_selectedCameras[i]) { selectedCameras.add(widget.availableCameras[i]); } } Navigator.pop(context, selectedCameras); } : null, child: Text( _t('View Cameras'), style: TextStyle( color: _selectedCameras.contains(true) ? Colors.white : Colors.grey[600], fontWeight: FontWeight.w600, ), ), ), ], ); } }