import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:tunas/domains/account/account_bloc.dart'; import 'package:tunas/domains/budget/budget_bloc.dart'; import 'package:tunas/domains/category/category_bloc.dart'; import 'package:tunas/domains/charts/chart_bloc.dart'; import 'package:tunas/domains/transaction/transaction_bloc.dart'; import 'package:tunas/pages/budgets/budgets_page.dart'; import 'package:tunas/pages/data/data_page.dart'; import 'package:tunas/pages/stats/stats_page.dart'; import 'package:tunas/pages/transactions/transactions_page.dart'; import 'package:tunas/repositories/metadata/metadata_repository.dart'; import 'package:tunas/repositories/transactions/transactions_repository.dart'; class HomePage extends StatelessWidget { const HomePage({super.key}); Widget _tabBar() { return TabBar( tabAlignment: TabAlignment.center, splashBorderRadius: BorderRadius.circular(25), tabs: const [ Tab(icon: Icon(Icons.insights)), Tab(icon: Icon(Icons.receipt_long)), Tab(icon: Icon(Icons.pie_chart)), Tab(icon: Icon(Icons.settings)), ], ); } Widget _largeScreenTotalsCharts(BuildContext context) { return Align( alignment: Alignment.topLeft, child: Container( margin: const EdgeInsets.all(10), decoration: BoxDecoration( color: Theme.of(context).colorScheme.primaryContainer, borderRadius: BorderRadius.circular(5), ), child: TabBar( tabAlignment: TabAlignment.center, splashBorderRadius: BorderRadius.circular(25), tabs: const [ Tab(icon: Icon(Icons.insights)), Tab(icon: Icon(Icons.receipt_long)), Tab(icon: Icon(Icons.pie_chart)), Tab(icon: Icon(Icons.settings)), ], ), ), ); } Widget _smallScreenTotalsCharts(BuildContext context) { return Align( alignment: Alignment.bottomCenter, child: Container( height: 40, width: MediaQuery.sizeOf(context).width, decoration: BoxDecoration( color: Theme.of(context).colorScheme.primaryContainer, boxShadow: [ BoxShadow( color: Theme.of(context).colorScheme.shadow, blurRadius: 5, offset: const Offset(0, -2), spreadRadius: 0.1, blurStyle: BlurStyle.normal, ) ] ), child: Center( child:TabBar( tabAlignment: TabAlignment.center, splashBorderRadius: BorderRadius.circular(25), tabs: const [ Tab(icon: Icon(Icons.insights)), Tab(icon: Icon(Icons.receipt_long)), Tab(icon: Icon(Icons.pie_chart)), Tab(icon: Icon(Icons.settings)), ], ) ), ), ); } @override Widget build(BuildContext context) { bool smallVerticalScreen = MediaQuery.sizeOf(context).width < 1500; return MultiBlocProvider( providers: [ BlocProvider(create: (context) => AccountBloc(metadataRepository: RepositoryProvider.of(context), transactionsRepository: RepositoryProvider.of(context))), BlocProvider(create: (context) => TransactionBloc(transactionsRepository: RepositoryProvider.of(context))), BlocProvider(create: (context) => CategoryBloc(metadataRepository: RepositoryProvider.of(context), transactionsRepository: RepositoryProvider.of(context))), BlocProvider(create: (context) => BudgetBloc(metadataRepository: RepositoryProvider.of(context), transactionsRepository: RepositoryProvider.of(context))), BlocProvider(create: (context) => ChartBloc(metadataRepository: RepositoryProvider.of(context), transactionsRepository: RepositoryProvider.of(context))), ], child: DefaultTabController( length: 4, child: Scaffold( body: Stack( children: [ const TabBarView( children: [ StatsPage(), TransactionsPage(), BudgetsPage(), DataPage() ], ), smallVerticalScreen ? _smallScreenTotalsCharts(context) : _largeScreenTotalsCharts(context), ], ), ) ) ); } }