import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sudoku/config/menu.dart'; import 'package:sudoku/cubit/game_cubit.dart'; import 'package:sudoku/cubit/nav_cubit.dart'; import 'package:sudoku/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(TextButton( onPressed: () {}, onLongPress: () { BlocProvider.of<GameCubit>(context).quitGame(); }, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), border: Border.all( color: Colors.white, width: 3, ), ), child: const Image( image: AssetImage('assets/ui/button_back.png'), fit: BoxFit.fill, ), ), )); menuActions.add(const Spacer(flex: 6)); } else { if (pageIndex == Menu.indexGame) { // go to Settings page menuActions.add(ElevatedButton( onPressed: () { context.read<NavCubit>().goToSettingsPage(); }, style: ElevatedButton.styleFrom( shape: const CircleBorder(), ), child: Menu.menuItemSettings.icon, )); // go to About page menuActions.add(ElevatedButton( onPressed: () { context.read<NavCubit>().goToAboutPage(); }, style: ElevatedButton.styleFrom( shape: const CircleBorder(), ), child: Menu.menuItemAbout.icon, )); } else { // back to Home page menuActions.add(ElevatedButton( onPressed: () { context.read<NavCubit>().goToGamePage(); }, style: ElevatedButton.styleFrom( shape: const CircleBorder(), ), child: Menu.menuItemGame.icon, )); } } return AppBar( title: const SizedBox.shrink(), actions: menuActions, ); }, ); }, ); } @override Size get preferredSize => const Size.fromHeight(50); }