import 'package:flutter/material.dart';
import './new_transaction.dart';
import './transaction_list.dart';
import '../models/transaction.dart';
class UserTransaction extends StatefulWidget {
const UserTransaction({super.key});
@override
State<UserTransaction> createState() => _UserTransactionState();
}
class _UserTransactionState extends State<UserTransaction> {
final List<Transaction> _userTransaction = [
Transaction(
id: 't1', title: 'new shoes', amount: 69.99, date: DateTime.now()),
Transaction(
id: 't2',
title: 'weekly groceries',
amount: 16.53,
date: DateTime.now())
];
////////////////함수로 전달하기////////////////////
void _addNewTransaction(String txTitle, double txAmount) {
final newTx = Transaction(
title: txTitle,
amount: txAmount,
date: DateTime.now(),
id: DateTime.now().toString());
setState(() {
_userTransaction.add(newTx);
});
}
////////////////////////////////////////////////////////////
@override
Widget build(BuildContext context) {
return Column(
children: [
NewTransaction(_addNewTransaction),//함수의 주소값을 전달
TransactionList(_userTransaction),
],
);
}
}
import 'package:flutter/material.dart';
class NewTransaction extends StatelessWidget {
// NewTransaction({super.key, this.addTx});
final Function? addTx; //Function 데이터형
final titleController = TextEditingController();
final amountController = TextEditingController();
NewTransaction(this.addTx);
@override
Widget build(BuildContext context) {
return Card(
elevation: 5,
child: Container(
padding: EdgeInsets.all(10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
TextField(
decoration: InputDecoration(labelText: 'Title'),
// onChanged: (value) {
// titleInput = value;
// },
controller: titleController,
),
TextField(
decoration: InputDecoration(labelText: 'Amount'),
// onChanged: (value) => amountInput = value,
controller: amountController,
),
TextButton(
onPressed: () {
//전달받은 함수에 파라미터 넣기
//duble.parse(amountController.text) ->string를 double형으로 변환
addTx!(titleController.text, duble.parse(amountController.text));
},
child: Text(
'Add Transaction',
style: TextStyle(color: Colors.purple),
),
),
],
),
),
);
}
}