import 'package:flutter/material.dart'; import '../models/player.dart'; const allRoles = [ 'GK', 'CB', 'LSB', 'RSB', 'DMF', 'CMF', 'OMF', 'LMF', 'RMF', 'CF', 'ST', 'LWG', 'RWG', ]; class PoolScreen extends StatefulWidget { final List initial; const PoolScreen({super.key, required this.initial}); @override State createState() => _PoolScreenState(); } class _PoolScreenState extends State { late List _players; final _nameCtrl = TextEditingController(); final Set _selected = {}; @override void initState() { super.initState(); _players = [...widget.initial]; } void _add() { final name = _nameCtrl.text.trim(); if (name.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('選手名を入力してください')), ); return; } if (_selected.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('適正ポジションを1つ以上選んでください')), ); return; } setState(() { _players.add(Player(name: name, positions: {..._selected})); _nameCtrl.clear(); _selected.clear(); }); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('追加しました')), ); } @override void dispose() { _nameCtrl.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('選手プール'), actions: [ TextButton( onPressed: () => Navigator.pop(context, _players), child: const Text('完了', style: TextStyle(color: Colors.white)), ), ], ), body: Padding( padding: const EdgeInsets.all(12), child: Column( children: [ TextField( controller: _nameCtrl, decoration: const InputDecoration( labelText: '選手名', border: OutlineInputBorder(), ), ), const SizedBox(height: 10), Wrap( spacing: 8, runSpacing: 8, children: allRoles.map((r) { final on = _selected.contains(r); return FilterChip( label: Text(r), selected: on, onSelected: (v) { setState(() { if (v) _selected.add(r); else _selected.remove(r); }); }, ); }).toList(), ), const SizedBox(height: 10), ElevatedButton( onPressed: _add, child: const Text('追加'), ), const SizedBox(height: 10), const Divider(), Expanded( child: ListView.builder( itemCount: _players.length, itemBuilder: (_, i) { final p = _players[i]; return ListTile( title: Text(p.name), subtitle: Text(p.positions.join(', ')), trailing: IconButton( icon: const Icon(Icons.delete), onPressed: () => setState(() => _players.removeAt(i)), ), ); }, ), ) ], ), ), ); } }