// lib/pages/entry/entry_list_page.dart import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import 'package:gifunavi/pages/entry/entry_controller.dart'; import 'package:gifunavi/routes/app_pages.dart'; import 'package:timezone/timezone.dart' as tz; class EntryListPage extends GetView { const EntryListPage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('エントリー管理'), actions: [ IconButton( icon: const Icon(Icons.add), onPressed: () => Get.toNamed(AppPages.ENTRY_DETAIL, arguments: {'mode': 'new'}), ), ], ), body: Obx(() { if (controller.entries.isEmpty) { return const Center( child: Text('表示するエントリーがありません。'), ); } return ListView.builder( itemCount: controller.entries.length, itemBuilder: (context, index) { final entry = controller.entries[index]; return ListTile( title: Row( children: [ Expanded( child: Text('${_formatDate(entry.date)}: ${entry.event.eventName}'), ), Text(entry.team.teamName, style: const TextStyle(fontWeight: FontWeight.bold)), ], ), subtitle: Row( children: [ Expanded( child: Text('カテゴリー: ${entry.category.categoryName}'), ), Text('ゼッケン: ${entry.zekkenNumber ?? "未設定"}'), ], ), onTap: () => Get.toNamed(AppPages.ENTRY_DETAIL, arguments: {'mode': 'edit', 'entry': entry}), ); }, ); }), ); } String _formatDate(DateTime? date) { if (date == null) { return '日時未設定'; } final jstDate = tz.TZDateTime.from(date, tz.getLocation('Asia/Tokyo')); return DateFormat('yyyy-MM-dd').format(jstDate); } } class EntryListPage_old extends GetView { const EntryListPage_old({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('エントリー管理'), actions: [ IconButton( icon: const Icon(Icons.add), onPressed: () => Get.toNamed(AppPages.ENTRY_DETAIL, arguments: {'mode': 'new'}), ), ], ), body: Obx((){ if (controller.isLoading.value) { return const Center(child: CircularProgressIndicator()); } // エントリーを日付昇順にソート final sortedEntries = controller.entries.toList() ..sort((a, b) => (a.date ?? DateTime(0)).compareTo(b.date ?? DateTime(0))); return ListView.builder( itemCount: sortedEntries.length, itemBuilder: (context, index) { final entry = sortedEntries[index]; return ListTile( title: Text(entry.event.eventName ?? 'イベント未設定'), subtitle: Text( '${entry.team.teamName ?? 'チーム未設定'} - ${entry.category .categoryName ?? 'カテゴリ未設定'}'), trailing: Text( entry.date?.toString().substring(0, 10) ?? '日付未設定'), onTap: () => Get.toNamed(AppPages.ENTRY_DETAIL, arguments: {'mode': 'edit', 'entry': entry}), ); }, ); }), ); } }