본문 바로가기

완료한 프로젝트/프로젝트 3 : 하루지출

하루지출 진행상황 : 23.2.5, 모델 클래스 실패 ?

반응형

 

모델 클래스를 만들어서 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});
}
728x90
반응형