okane/lib/ui/pages/template_list.dart

111 lines
4.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:get_it/get_it.dart';
import 'package:okane/database/database.dart';
import 'package:okane/ui/state/core.dart';
import 'package:okane/ui/utils.dart';
import 'package:okane/ui/widgets/add_template.dart';
class TemplateListPage extends StatefulWidget {
const TemplateListPage({super.key});
@override
State<TemplateListPage> createState() => TemplateListState();
}
class TemplateListState extends State<TemplateListPage> {
@override
Widget build(BuildContext context) {
return BlocBuilder<CoreCubit, CoreState>(
builder: (context, state) {
final account = GetIt.I.get<CoreCubit>().activeAccount;
final nonRecurringTemplates =
state.transactionTemplates.where((t) => !t.recurring).toList();
return Stack(
children: [
CustomScrollView(
slivers: [
SliverToBoxAdapter(child: Text("Non-recurring")),
SliverList.builder(
itemCount: nonRecurringTemplates.length,
itemBuilder: (context, index) {
final template = nonRecurringTemplates[index];
return ListTile(
title: Text(template.name),
trailing: IconButton(
icon: Icon(Icons.delete),
color: Colors.red,
onPressed: () async {
final result = await confirm(
context,
"Remove Template",
"Are you sure you want to remove the template '${template.name}'",
);
if (!result) {
return;
}
await deleteTransactionTemplate(template);
},
),
);
},
),
SliverToBoxAdapter(child: Text("Recurring")),
SliverList.builder(
itemCount: state.recurringTransactions.length,
itemBuilder: (context, index) {
final template = state.recurringTransactions[index];
return ListTile(
title: Text(template.template.value!.name),
trailing: IconButton(
icon: Icon(Icons.delete, color: Colors.red),
onPressed: () async {
final result = await confirm(
context,
"Remove Template",
"Are you sure you want to remove the template '${template.template.value!.name}'",
);
if (!result) {
return;
}
await deleteRecurringTransactionTemplate(template);
},
),
);
},
),
],
),
Positioned(
right: 16,
bottom: 16,
child: FloatingActionButton(
onPressed:
account == null
? () {}
: () {
showDialogOrModal(
context: context,
builder:
(ctx) => AddTransactionTemplateWidget(
activeAccountItem: account,
onAdd: () {
setState(() {});
Navigator.of(context).pop();
},
),
showDragHandle: true,
);
},
child: Icon(Icons.add),
),
),
],
);
},
);
}
}