import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../core/app_theme.dart'; import '../providers/monitoring_provider.dart'; class ChartRangeSelector extends ConsumerWidget { const ChartRangeSelector({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final selected = ref.watch(chartRangeProvider); return LayoutBuilder( builder: (context, constraints) { final double width = constraints.maxWidth; final double tabWidth = (width - 8) / ChartRange.values.length; final selectedIndex = ChartRange.values.indexOf(selected); return Container( height: 44, padding: const EdgeInsets.all(4), decoration: BoxDecoration( color: Colors.grey.shade200, borderRadius: BorderRadius.circular(14), ), child: Stack( children: [ AnimatedPositioned( duration: const Duration(milliseconds: 250), curve: Curves.easeOutCubic, left: selectedIndex * tabWidth, top: 0, bottom: 0, width: tabWidth, child: Container( decoration: BoxDecoration( color: AppTheme.bgCard, borderRadius: BorderRadius.circular(10), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.08), blurRadius: 8, offset: const Offset(0, 2), ), ], ), ), ), Row( children: ChartRange.values.map((range) { final isSelected = selected == range; return Expanded( child: GestureDetector( behavior: HitTestBehavior.opaque, onTap: () => ref.read(chartRangeProvider.notifier).state = range, child: Center( child: AnimatedDefaultTextStyle( duration: const Duration(milliseconds: 250), style: TextStyle( fontFamily: 'Inter', fontWeight: isSelected ? FontWeight.w600 : FontWeight.w500, fontSize: 13, color: isSelected ? AppTheme.textPrimary : AppTheme.textSecondary, ), child: Text( range == ChartRange.daily ? 'Harian' : 'Bulanan', ), ), ), ), ); }).toList(), ), ], ), ); }, ); } }