import 'package:flutter/material.dart'; import './widgets/new_transaction.dart'; import './widgets/transaction_list.dart'; import './widgets/chart.dart'; import './models/transaction.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Personal Expenses', theme: ThemeData( primarySwatch: Colors.purple, accentColor: Colors.amber, // errorColor: Colors.red, fontFamily: 'Quicksand', textTheme: ThemeData.light().textTheme.copyWith( title: TextStyle( fontFamily: 'OpenSans', fontWeight: FontWeight.bold, fontSize: 18, ), button: TextStyle(color: Colors.white), ), appBarTheme: AppBarTheme( textTheme: ThemeData.light().textTheme.copyWith( title: TextStyle( fontFamily: 'OpenSans', fontSize: 20, fontWeight: FontWeight.bold, ), ), )), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { // String titleInput; // String amountInput; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State { final List _userTransactions = [ // Transaction( // id: 't1', // title: 'New Shoes', // amount: 69.99, // date: DateTime.now(), // ), // Transaction( // id: 't2', // title: 'Weekly Groceries', // amount: 16.53, // date: DateTime.now(), // ), ]; 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: () {}, child: NewTransaction(_addNewTransaction), behavior: HitTestBehavior.opaque, ); }, ); } 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( // mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Chart(_recentTransactions), TransactionList(_userTransactions, _deleteTransaction), ], ), ), floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, floatingActionButton: FloatingActionButton( child: Icon(Icons.add), onPressed: () => _startAddNewTransaction(context), ), ); } }