52 lines
1.5 KiB
Dart
52 lines
1.5 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",
|
|
style: Theme.of(context).textTheme.titleLarge,
|
|
),
|
|
FutureBuilder(
|
|
future: _getTotalBalance(state.accounts),
|
|
builder: (context, snapshot) {
|
|
return Text(
|
|
snapshot.hasData ? formatCurrency(snapshot.data!) : "...",
|
|
style: Theme.of(context).textTheme.bodyLarge,
|
|
);
|
|
},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|