Display the list of expenses

This commit is contained in:
2025-07-14 16:49:32 +02:00
parent 547e9b7aad
commit 50812af2fc
7 changed files with 145 additions and 57 deletions

View File

@@ -0,0 +1,57 @@
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:moneymgr_mobile/services/storage/expenses.dart';
import 'package:moneymgr_mobile/utils/time_utils.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'scans_list_screen.g.dart';
@riverpod
Future<ExpensesList> _expensesList(Ref ref) {
final expenses = ref.watch(expensesProvider).requireValue;
return expenses.getList();
}
class ScansListScreen extends HookConsumerWidget {
const ScansListScreen({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final expensesList = ref.watch(_expensesListProvider);
return Scaffold(
appBar: AppBar(title: Text("Expenses")),
body: switch (expensesList) {
AsyncData(:final value) => _ExpensesList(list: value),
AsyncError(:final error) => Center(child: Text('Load error: $error')),
_ => const Center(child: CircularProgressIndicator()),
},
);
}
}
class _ExpensesList extends StatelessWidget {
final ExpensesList list;
const _ExpensesList({required this.list});
@override
Widget build(BuildContext context) {
return ListView.builder(
itemBuilder: (context, id) {
final expense = list[id];
return ListTile(
leading: Icon(Icons.receipt_long),
title: Text(
expense.labelOrNull ?? "No label",
style: TextStyle(
fontStyle: expense.labelOrNull == null ? FontStyle.italic : null,
),
),
subtitle: Text(expense.dateTime.simpleDate),
trailing: Text("${expense.cost}", style: TextStyle(fontSize: 20)),
);
},
itemCount: list.length,
);
}
}