finnow/flutter_app/lib/components/profile_list_item.dart

68 lines
2.4 KiB
Dart

import 'package:finnow_app/api/profile.dart';
import 'package:finnow_app/auth/model.dart';
import 'package:finnow_app/main.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
/// A list item that shows a profile in the user's list of all profiles.
class ProfileListItem extends StatelessWidget {
final Profile profile;
final Function onDeletedCallback;
const ProfileListItem(this.profile, this.onDeletedCallback, {super.key});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(10),
margin: const EdgeInsets.only(top: 10, bottom: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: const Color.fromARGB(255, 236, 236, 236)),
constraints: const BoxConstraints(maxWidth: 200),
child: Row(children: [
Expanded(child: Text(profile.name)),
ElevatedButton(
child: const Text('View'),
onPressed: () => getIt<GoRouter>().go('/profiles/${profile.name}'),
),
const SizedBox(width: 5),
IconButton(
icon: const Icon(Icons.delete),
onPressed: () => attemptDeleteProfile(context),
)
]));
}
void attemptDeleteProfile(BuildContext ctx) async {
bool confirmed = false;
await showDialog(
context: ctx,
builder: (context) {
return AlertDialog(
title: const Text('Confirm Profile Deletion'),
content: const Text(
'Are you sure you want to delete this profile? This will permamently delete all accounts, transactions, and other data in this profile. This data is not recoverable.'),
actions: [
FilledButton(
onPressed: () {
confirmed = true;
Navigator.of(context).pop();
},
child: const Text('Ok')),
FilledButton(
onPressed: () {
Navigator.of(context).pop();
},
child: const Text('Cancel'))
]);
});
if (confirmed) {
final auth = getIt<AuthenticationModel>();
if (auth.state is Authenticated) {
await deleteProfile((auth.state as Authenticated).token, profile);
onDeletedCallback();
}
}
}
}