import 'package:flutter/material.dart'; import 'package:universal_ble/universal_ble.dart'; class ServicesSideWidget extends StatelessWidget { final List discoveredServices; final Function() serviceListBuilder; final VoidCallback? onCopyServices; const ServicesSideWidget({ super.key, required this.discoveredServices, required this.serviceListBuilder, this.onCopyServices, }); @override Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; return Container( decoration: BoxDecoration( color: colorScheme.surfaceContainerHighest, border: Border( right: BorderSide( color: colorScheme.outline.withValues(alpha: 0.2), width: 1, ), ), ), child: Column( mainAxisSize: MainAxisSize.min, children: [ Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: colorScheme.surface, border: Border( bottom: BorderSide( color: colorScheme.outline.withValues(alpha: 0.2), width: 1, ), ), ), child: Row( children: [ Icon( Icons.apps, color: colorScheme.primary, size: 20, ), const SizedBox(width: 8), Text( 'Services', style: TextStyle( fontWeight: FontWeight.bold, fontSize: 16, color: colorScheme.onSurface, ), ), const Spacer(), if (onCopyServices != null) Padding( padding: const EdgeInsets.only(right: 8), child: IconButton( onPressed: onCopyServices, icon: const Icon(Icons.copy), iconSize: 18, tooltip: 'Copy Services', padding: EdgeInsets.zero, constraints: const BoxConstraints( minWidth: 32, minHeight: 32, ), color: colorScheme.onSurface, ), ), Container( padding: const EdgeInsets.symmetric( horizontal: 8, vertical: 4, ), decoration: BoxDecoration( color: colorScheme.primaryContainer, borderRadius: BorderRadius.circular(8), ), child: Text( '${discoveredServices.length}', style: TextStyle( color: colorScheme.onPrimaryContainer, fontSize: 12, fontWeight: FontWeight.w600, ), ), ), ], ), ), Expanded( child: discoveredServices.isEmpty ? Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( Icons.apps_outlined, size: 48, color: colorScheme.onSurface.withValues(alpha: 0.3), ), const SizedBox(height: 16), Text( 'No Services Discovered', style: TextStyle( color: colorScheme.onSurface.withValues(alpha: 0.6), ), ), ], ), ) : serviceListBuilder(), ), ], ), ); } }