반응형
모델 클래스를 만들어서 amount, createdTime을 관리했다.
이렇게 하면 해당 시간과 금액이 저장이 되어서
새로운 날이 되면 기존에 입력한 데이터는 사라질 것 이라고 생각했다.
하지만 역시나 사라지지 않았다.
이유가 뭔지 곰곰히 생각해 보았다.
Map을 써서 Map<DateTime, int> expnese ={};
이렇게 진행을 해야 하나 싶기도 했지만
이미 모델클래스에서 amount, createdT 을 쓰고 있다.
그러던 중 Chat GPT에게 관련 질문을 했다.
GPT가 알려준 코드이다.
import 'package:flutter/material.dart';
class ExpenseTracker extends StatefulWidget {
@override
_ExpenseTrackerState createState() => _ExpenseTrackerState();
}
class _ExpenseTrackerState extends State<ExpenseTracker> {
Map<DateTime, double> expenses = {};
void addExpense(double amount) {
setState(() {
expenses[DateTime.now()]
=expenses.containsKey(DateTime.now()) ? expenses[DateTime.now()] + amount : amount;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Expense Tracker'),
),
body: Column(
children: [
Container(
padding: EdgeInsets.all(16),
child: Text('Today\'s Expenses'),
),
Expanded(
child: ListView(
children: expenses.keys
.where((date) => date.day == DateTime.now().day &&
date.month == DateTime.now().month &&
date.year == DateTime.now().year)
.map((date) => ListTile(
title: Text(date.toString()),
subtitle: Text('\$${expenses[date].toStringAsFixed(2)}'),
))
.toList(),
),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () => addExpense(100),
child: Icon(Icons.add),
),
);
}
}
위 코드에서 가장 중요한 부분이 바로 where , containsKey, 부분인 것 같다.
특정 조건을 입력해서 값을 보여주는 방식이다. 관련 내용을 공부를 한 후 적용시켜 봐야겠다.
class ExpenseTracker extends StatefulWidget {
@override
_ExpenseTrackerState createState() => _ExpenseTrackerState();
}
class _ExpenseTrackerState extends State<ExpenseTracker> {
List<Expense> expenses = [];
void addExpense(double amount) {
setState(() {
expenses.add(Expense(date: DateTime.now(), amount: amount));
});
}
double getTotalAmount() {
return expenses
.where((expense) =>
expense.date.day == DateTime.now().day &&
expense.date.month == DateTime.now().month &&
expense.date.year == DateTime.now().year)
.map((expense) => expense.amount)
.reduce((a, b) => a + b);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Expense Tracker'),
),
body: Column(
children: [
Container(
padding: EdgeInsets.all(16),
child: Text('Today\'s Expenses'),
),
Expanded(
child: ListView.builder(
itemCount: expenses.length,
itemBuilder: (context, index) {
var expense = expenses[index];
if (expense.date.day == DateTime.now().day &&
expense.date.month == DateTime.now().month &&
expense.date.year == DateTime.now().year) {
return ListTile(
title: Text(expense.amount.toString()),
subtitle: Text(expense.date.toString()),
);
} else {
return Container();
}
},
),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// Add logic to show input dialog to add new expense amount
},
child: Icon(Icons.add),
),
);
}
}
class Expense {
final DateTime date;
final double amount;
Expense({this.date, this.amount});
}
반응형
'완료한 프로젝트 > 프로젝트 3 : 하루지출' 카테고리의 다른 글
하루 지출 진행상황 : 뻘짓2 (0) | 2023.02.07 |
---|---|
하루 지출 진행상황 : 2.6 새로운 날 시작되면 리스트 초기화 실패 (0) | 2023.02.06 |
하루 지출 진행상황 23.2.3 -> hive 모델 클래스 사용 (0) | 2023.02.03 |
하루 지출 진행상황 : 모델을 쓸지 , Map을 쓸지 (0) | 2023.02.02 |
하루지출 어플 : Hive와 연애중 (0) | 2023.01.27 |