50 lines
1.4 KiB
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!));
|
|
},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|