import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../state/providers.dart'; import 'check_in_screen.dart'; import 'habit_create_screen.dart'; import 'settings_screen.dart'; import 'streak_screen.dart'; class HabitListScreen extends ConsumerWidget { const HabitListScreen({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final boot = ref.watch(bootstrapProvider); final habitsAsync = ref.watch(activeHabitsProvider); return Scaffold( appBar: AppBar( title: const Text('습관'), actions: [ IconButton( icon: const Icon(Icons.settings), tooltip: '설정', onPressed: () { Navigator.of(context).push(MaterialPageRoute( builder: (_) => const SettingsScreen(), )); }, ), ], ), body: boot.when( loading: () => const Center(child: CircularProgressIndicator()), error: (e, st) => Center(child: Text('초기화 실패: $e')), data: (_) => habitsAsync.when( loading: () => const Center(child: CircularProgressIndicator()), error: (e, st) => Center(child: Text('로드 실패: $e')), data: (habits) { if (habits.isEmpty) { return const Center( child: Text('아직 습관이 없습니다. + 버튼으로 추가하세요.'), ); } return ListView.separated( itemCount: habits.length, separatorBuilder: (_, _) => const Divider(height: 1), itemBuilder: (context, i) { final h = habits[i]; return ListTile( title: Text(h.title), subtitle: Text( '${h.type} · ${h.frameLevel} · ${h.frameFramedText}', maxLines: 2, overflow: TextOverflow.ellipsis, ), trailing: IconButton( icon: const Icon(Icons.show_chart), onPressed: () { Navigator.of(context).push(MaterialPageRoute( builder: (_) => StreakScreen(habitId: h.id), )); }, ), onTap: () { Navigator.of(context).push(MaterialPageRoute( builder: (_) => CheckInScreen(habitId: h.id), )); }, ); }, ); }, ), ), floatingActionButton: FloatingActionButton( onPressed: () { Navigator.of(context).push(MaterialPageRoute( builder: (_) => const HabitCreateScreen(), )); }, child: const Icon(Icons.add), ), ); } }