import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:calculus/common/config/screen.dart'; import 'package:calculus/common/cubit/nav/nav_cubit_pages.dart'; import 'package:calculus/common/cubit/nav/nav_cubit_screens.dart'; import 'package:calculus/cubit/activity/activity_cubit.dart'; import 'package:calculus/models/activity/activity.dart'; class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget { const GlobalAppBar({super.key}); @override Widget build(BuildContext context) { return BlocBuilder<ActivityCubit, ActivityState>( builder: (BuildContext context, ActivityState activityState) { return BlocBuilder<NavCubitScreen, int>( builder: (BuildContext context, int pageIndex) { final Activity currentActivity = activityState.currentActivity; final List<Widget> menuActions = []; if (currentActivity.isRunning && !currentActivity.isFinished) { menuActions.add(ActivityButtonQuit( onPressed: () {}, onLongPress: () { BlocProvider.of<ActivityCubit>(context).quitActivity(); BlocProvider.of<NavCubitPage>(context).goToPageHome(); }, )); } else { if (pageIndex == Screen.indexActivity) { // go to Settings page menuActions.add(ElevatedButton( onPressed: () { BlocProvider.of<NavCubitScreen>(context).goToScreenSettings(); }, style: ElevatedButton.styleFrom( shape: const CircleBorder(), ), child: Screen.screenSettings.icon, )); // go to About page menuActions.add(ElevatedButton( onPressed: () { BlocProvider.of<NavCubitScreen>(context).goToScreenAbout(); }, style: ElevatedButton.styleFrom( shape: const CircleBorder(), ), child: Screen.screenAbout.icon, )); } else { // back to Home page menuActions.add(ElevatedButton( onPressed: () { BlocProvider.of<NavCubitScreen>(context).goToScreenActivity(); }, style: ElevatedButton.styleFrom( shape: const CircleBorder(), ), child: Screen.screenActivity.icon, )); } } return AppBar( title: const AppHeader(text: 'app_name'), actions: menuActions, ); }, ); }, ); } @override Size get preferredSize => const Size.fromHeight(50); }