1. 리스트아이템에서 스와이프해서 항목을 삭제해보자.
- expenses_list.dart
import 'package:expense_tracker/wigets/expenses_list/expense_item.dart';
import 'package:flutter/material.dart';
import 'package:expense_tracker/models/expense.dart';
class ExpensesList extends StatelessWidget {
const ExpensesList(
{super.key, required this.expenses, required this.onRemoveExpense});
final List<Expense> expenses;
final void Function(Expense expense) onRemoveExpense;
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: expenses.length,
itemBuilder: (ctx, index) => Dismissible(
key: ValueKey(expenses[index]),
onDismissed: (direction) {
onRemoveExpense(expenses[index]);
},
child: ExpenseItem(expenses[index])));
}
}
1) Dismissible 위젯 부분 참고
2) onRemoveExpense 함수 추가
- expenses.dart
import 'package:expense_tracker/wigets/expenses_list/expenses_list.dart';
import 'package:expense_tracker/wigets/new_expense.dart';
import 'package:flutter/material.dart';
import 'package:expense_tracker/models/expense.dart';
class Expenses extends StatefulWidget {
const Expenses({super.key});
@override
State<Expenses> createState() {
return _ExpensesState();
}
}
class _ExpensesState extends State<Expenses> {
final List<Expense> _registeredExpenses = [
Expense(
title: 'Flutter Course',
amount: 19.99,
date: DateTime.now(),
category: Category.work,
),
Expense(
title: 'Cinema',
amount: 15.69,
date: DateTime.now(),
category: Category.leisure,
),
];
void _openAddExpenseOverlay() {
showModalBottomSheet(
isScrollControlled: true,
context: context,
builder: (ctx) => NewExpense(
onAddExpense: _addExpense,
));
}
void _addExpense(Expense expense) {
setState(() {
_registeredExpenses.add(expense);
});
}
void _removeExpense(Expense expense) {
setState(() {
_registeredExpenses.remove(expense);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Flutter ExpenseTracker"),
actions: [
IconButton(
onPressed: _openAddExpenseOverlay, icon: const Icon(Icons.add))
],
),
body: Column(
children: [
const Text('The chart'),
Expanded(
child: ExpensesList(
expenses: _registeredExpenses,
onRemoveExpense: _removeExpense,
)),
],
),
);
}
}
1) _removeExpense 함수 추가 - 리스트에서 값 삭제하는 역할
'코딩강의 > expense_tracker(플러터-유데미)' 카테고리의 다른 글
~125. Using Theme Data in Widgets (0) | 2023.09.04 |
---|---|
121. Showing & Managing "Snackbars" (0) | 2023.09.03 |
~119. Creating a Fullscreen Modal (0) | 2023.09.02 |
115. Adding a Dropdown Button (0) | 2023.08.31 |
~114. Working with "Futures" for Handling Data from the Future (0) | 2023.08.29 |