import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:tetrisdual/config/menu.dart'; import 'package:tetrisdual/cubit/game_cubit.dart'; import 'package:tetrisdual/cubit/nav_cubit.dart'; import 'package:tetrisdual/models/game/game.dart'; class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget { const GlobalAppBar({super.key}); @override Widget build(BuildContext context) { return BlocBuilder<GameCubit, GameState>( builder: (BuildContext context, GameState gameState) { return BlocBuilder<NavCubit, int>( builder: (BuildContext context, int pageIndex) { final Game currentGame = gameState.currentGame; final List<Widget> menuActions = []; if (currentGame.isRunning && !currentGame.isFinished) { menuActions.add(StyledButton( color: Colors.red, onPressed: () {}, onLongPress: () { BlocProvider.of<GameCubit>(context).quitGame(); }, child: const Image( image: AssetImage('assets/ui/button_back.png'), fit: BoxFit.fill, ), )); } else { if (pageIndex == Menu.indexGame) { // go to Settings page menuActions.add(ElevatedButton( onPressed: () { BlocProvider.of<NavCubit>(context).goToSettingsPage(); }, style: ElevatedButton.styleFrom( shape: const CircleBorder(), ), child: Menu.menuItemSettings.icon, )); // go to About page menuActions.add(ElevatedButton( onPressed: () { BlocProvider.of<NavCubit>(context).goToAboutPage(); }, style: ElevatedButton.styleFrom( shape: const CircleBorder(), ), child: Menu.menuItemAbout.icon, )); } else { // back to Home page menuActions.add(ElevatedButton( onPressed: () { BlocProvider.of<NavCubit>(context).goToGamePage(); }, style: ElevatedButton.styleFrom( shape: const CircleBorder(), ), child: Menu.menuItemGame.icon, )); } } return AppBar( title: const AppHeader(text: 'app_name'), actions: menuActions, ); }, ); }, ); } @override Size get preferredSize => const Size.fromHeight(50); }