Display the list of expenses
This commit is contained in:
57
moneymgr_mobile/lib/routes/scans_list/scans_list_screen.dart
Normal file
57
moneymgr_mobile/lib/routes/scans_list/scans_list_screen.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user