// Example: Track personal expenses with a chart and a list of transactions. import 'package:flutter/material.dart'; import './models/transaction.dart'; import './widgets/chart.dart'; import './widgets/new_transaction.dart'; import './widgets/transaction_list.dart'; class Example extends StatefulWidget { const Example({super.key}); @override _ExampleState createState() => _ExampleState(); } class _ExampleState extends State { final List _userTransactions = []; List get _recentTransactions { return _userTransactions.where((tx) { return tx.date.isAfter( DateTime.now().subtract( Duration(days: 7), ), ); }).toList(); } void _addNewTransaction( String txTitle, double txAmount, DateTime chosenDate) { final newTx = Transaction( title: txTitle, amount: txAmount, date: chosenDate, id: DateTime.now().toString(), ); setState(() { _userTransactions.add(newTx); }); } void _startAddNewTransaction(BuildContext ctx) { showModalBottomSheet( context: ctx, builder: (_) { return GestureDetector( onTap: () {}, behavior: HitTestBehavior.opaque, child: NewTransaction(_addNewTransaction), ); }, ); } void _deleteTransaction(String id) { setState(() { _userTransactions.removeWhere((tx) => tx.id == id); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text( 'Personal Expenses', ), actions: [ IconButton( icon: Icon(Icons.add), onPressed: () => _startAddNewTransaction(context), ), ], ), body: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Chart(_recentTransactions), TransactionList(_userTransactions, _deleteTransaction), ], ), ), floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, floatingActionButton: FloatingActionButton( child: Icon(Icons.add), onPressed: () => _startAddNewTransaction(context), ), ); } }