import 'package:flutter/material.dart'; import 'package:game_tracker/core/custom_theme.dart'; import 'package:game_tracker/core/enums.dart'; import 'package:game_tracker/data/db/database.dart'; import 'package:game_tracker/data/dto/group.dart'; import 'package:game_tracker/data/dto/player.dart'; import 'package:game_tracker/presentation/widgets/buttons/custom_width_button.dart'; import 'package:game_tracker/presentation/widgets/player_selection.dart'; import 'package:game_tracker/presentation/widgets/text_input_field.dart'; import 'package:provider/provider.dart'; class CreateGroupView extends StatefulWidget { const CreateGroupView({super.key}); @override State createState() => _CreateGroupViewState(); } class _CreateGroupViewState extends State { final _groupNameController = TextEditingController(); final _searchBarController = TextEditingController(); late final AppDatabase db; List selectedPlayers = []; @override void initState() { super.initState(); db = Provider.of(context, listen: false); _groupNameController.addListener(() { setState(() {}); }); _searchBarController.addListener(() { setState(() {}); }); } @override void dispose() { _groupNameController.dispose(); _searchBarController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: CustomTheme.backgroundColor, appBar: AppBar( backgroundColor: CustomTheme.backgroundColor, scrolledUnderElevation: 0, title: const Text( 'Create new group', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), centerTitle: true, ), body: SafeArea( child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ Container( margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 10), child: TextInputField( controller: _groupNameController, hintText: 'Group name', onChanged: (value) { setState(() {}); }, ), ), Expanded( child: PlayerSelection( searchBarController: _searchBarController, onChanged: (value) { selectedPlayers = [...value]; }, ), ), CustomWidthButton( text: 'Create group', sizeRelativeToWidth: 0.95, buttonType: ButtonType.primary, onPressed: (_groupNameController.text.isEmpty || selectedPlayers.isEmpty) ? null : () async { bool success = await db.groupDao.addGroup( group: Group( name: _groupNameController.text.trim(), members: selectedPlayers, ), ); if (!context.mounted) return; if (success) { _groupNameController.clear(); _searchBarController.clear(); Navigator.pop(context); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar( backgroundColor: CustomTheme.boxColor, content: const Center( child: Text( 'Error while creating group, please try again', style: TextStyle(color: Colors.white), ), ), ), ); } setState(() {}); }, ), const SizedBox(height: 20), ], ), ), ); } }