// Flutter import 'package:flutter/material.dart'; // Local import '/pages/expense.dart'; import '/pages/income.dart'; import '/pages/asset.dart'; import '/pages/report.dart'; import '/pages/settings.dart'; import '/db.dart'; void main() { loadDB(); runApp(const MainApp()); } class MainApp extends StatelessWidget { const MainApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Recurring Expense Tracker', theme: ThemeData( useMaterial3: true, colorScheme: ColorScheme.fromSeed(seedColor: Colors.green), ), darkTheme: ThemeData( useMaterial3: true, brightness: Brightness.dark, colorSchemeSeed: Colors.green, ), themeMode: ThemeMode.system, home: HomePage(), ); } } class HomePage extends StatefulWidget { const HomePage({ super.key, }); @override State createState() => _HomePageState(); } class _HomePageState extends State { var pageSelected = 0; refresh() { setState(() {}); } @override Widget build(BuildContext context) { Widget page; Widget? dialog; switch (pageSelected) { case 0: page = ExpensePage(); dialog = ExpenseInputDialog( notifyParent: refresh, ); case 1: page = IncomePage(); case 2: page = AssetPage(); case 3: page = ProjectionPage(); case 4: page = SettingsPage(); default: throw UnimplementedError('No widget for page $pageSelected yet!'); } Future addNewValue(BuildContext context) { return showDialog( context: context, builder: (_) => AlertDialog(content: dialog), ); } Widget? floatingButton; if (dialog != null) { floatingButton = IconButton( onPressed: () { addNewValue(context); }, icon: Icon(Icons.add), color: Theme.of(context).colorScheme.onSurface, ); } return LayoutBuilder(builder: (context, constraints) { return Scaffold( appBar: AppBar(title: Text("Expense Tracker")), drawer: NavigationRail( extended: true, destinations: [ NavigationRailDestination( icon: Icon(Icons.payment), label: Text('Expenses'), ), NavigationRailDestination( icon: Icon(Icons.account_balance), label: Text('Income'), ), NavigationRailDestination( icon: Icon(Icons.attach_money), label: Text('Liquid Assets'), ), NavigationRailDestination( icon: Icon(Icons.bar_chart), label: Text('Reports'), ), NavigationRailDestination( icon: Icon(Icons.settings), label: Text('Settings'), ), ], selectedIndex: pageSelected, onDestinationSelected: (value) { setState(() { pageSelected = value; Navigator.pop(context); }); }, ), body: Container( color: Theme.of(context).colorScheme.primaryContainer, child: Center(child: page), ), floatingActionButton: floatingButton, ); }); } }