okane/lib/ui/pages/account/total_balance_card.dart

50 lines
1.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:okane/database/collections/account.dart';
import 'package:okane/database/database.dart';
import 'package:okane/ui/state/core.dart';
import 'package:okane/ui/utils.dart';
class TotalBalanceCard extends StatelessWidget {
const TotalBalanceCard({super.key});
Future<double> _getTotalBalance(List<Account> accounts) async {
if (accounts.isEmpty) {
return 0;
}
final results = await Future.wait(accounts.map(getTotalBalance).toList());
return results.reduce((acc, val) => acc + val);
}
@override
Widget build(BuildContext context) {
return BlocBuilder<CoreCubit, CoreState>(
builder: (context, state) {
return Card(
child: Padding(
padding: EdgeInsets.all(16),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text("Total balance"),
FutureBuilder(
future: _getTotalBalance(state.accounts),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text("...");
}
return Text(formatCurrency(snapshot.data!));
},
),
],
),
),
);
},
);
}
}