feat(expense): add refresh functionality to expense list

This commit is contained in:
Vaibhav Surve 2025-07-21 16:39:11 +05:30
parent 4a01371fad
commit 93cdaab2c2

View File

@ -26,7 +26,11 @@ class _ExpenseMainScreenState extends State<ExpenseMainScreen> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
expenseController.fetchExpenses(); // Load expenses from API expenseController.fetchExpenses();
}
void _refreshExpenses() {
expenseController.fetchExpenses();
} }
@override @override
@ -41,6 +45,7 @@ class _ExpenseMainScreenState extends State<ExpenseMainScreen> {
searchController: searchController, searchController: searchController,
onChanged: (value) => searchQuery.value = value, onChanged: (value) => searchQuery.value = value,
onFilterTap: _openFilterBottomSheet, onFilterTap: _openFilterBottomSheet,
onRefreshTap: _refreshExpenses,
), ),
_ToggleButtons(isHistoryView: isHistoryView), _ToggleButtons(isHistoryView: isHistoryView),
Expanded( Expanded(
@ -217,15 +222,18 @@ class _ExpenseAppBar extends StatelessWidget implements PreferredSizeWidget {
} }
// Search and Filter Widget // Search and Filter Widget
class _SearchAndFilter extends StatelessWidget { class _SearchAndFilter extends StatelessWidget {
final TextEditingController searchController; final TextEditingController searchController;
final ValueChanged<String> onChanged; final ValueChanged<String> onChanged;
final VoidCallback onFilterTap; final VoidCallback onFilterTap;
final VoidCallback onRefreshTap;
const _SearchAndFilter({ const _SearchAndFilter({
required this.searchController, required this.searchController,
required this.onChanged, required this.onChanged,
required this.onFilterTap, required this.onFilterTap,
required this.onRefreshTap,
}); });
@override @override
@ -260,6 +268,18 @@ class _SearchAndFilter extends StatelessWidget {
), ),
), ),
MySpacing.width(8), MySpacing.width(8),
Tooltip(
message: 'Refresh Data',
child: InkWell(
borderRadius: BorderRadius.circular(24),
onTap: onRefreshTap,
child: const Padding(
padding: EdgeInsets.all(0),
child: Icon(Icons.refresh, color: Colors.green, size: 28),
),
),
),
MySpacing.width(8),
IconButton( IconButton(
icon: const Icon(Icons.tune, color: Colors.black), icon: const Icon(Icons.tune, color: Colors.black),
onPressed: null, // Disabled as per request onPressed: null, // Disabled as per request
@ -401,7 +421,6 @@ class _ExpenseList extends StatelessWidget {
children: [ children: [
Row( Row(
children: [ children: [
MyText.bodyMedium( MyText.bodyMedium(
expense.expensesType.name, expense.expensesType.name,
fontWeight: 700, fontWeight: 700,