import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../providers/realtime_controller.dart'; /// Subtle, non-blocking connection status indicator. /// Shows in the bottom-right corner when streams are recovering/stale. /// Unlike the old blocking overlay, this does NOT prevent user interaction. class ReconnectIndicator extends ConsumerWidget { const ReconnectIndicator({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final ctrl = ref.watch(realtimeControllerProvider); // Hide when not recovering if (!ctrl.isAnyStreamRecovering) { return const SizedBox.shrink(); } return Positioned( bottom: 16, right: 16, child: Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: BoxDecoration( color: Theme.of(context).colorScheme.surface, border: Border.all( color: Theme.of(context).colorScheme.outline, width: 1, ), borderRadius: BorderRadius.circular(8), boxShadow: [ BoxShadow( color: Colors.black.withAlpha(3), blurRadius: 8, offset: const Offset(0, 2), ), ], ), child: Row( mainAxisSize: MainAxisSize.min, children: [ SizedBox( width: 12, height: 12, child: CircularProgressIndicator( strokeWidth: 2, valueColor: AlwaysStoppedAnimation( Theme.of(context).colorScheme.primary, ), ), ), const SizedBox(width: 8), Text( 'Reconnecting...', style: Theme.of(context).textTheme.labelSmall, ), ], ), ), ); } }