okane/lib/ui/widgets/add_expense_category.dart

67 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:okane/database/collections/expense_category.dart';
import 'package:okane/database/database.dart';
import 'package:okane/ui/state/core.dart';
class AddExpenseCategory extends StatefulWidget {
const AddExpenseCategory({super.key});
@override
AddExpenseCategoryState createState() => AddExpenseCategoryState();
}
class AddExpenseCategoryState extends State<AddExpenseCategory> {
final TextEditingController _categoryNameController = TextEditingController();
@override
Widget build(BuildContext context) {
return BlocBuilder<CoreCubit, CoreState>(
builder:
(context, state) => ConstrainedBox(
constraints: BoxConstraints(maxHeight: 300),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
ListView.builder(
itemCount: state.expenseCategories.length,
shrinkWrap: true,
itemBuilder:
(context, index) => ListTile(
title: Text(state.expenseCategories[index].name),
onTap: () {
_categoryNameController.text = "";
Navigator.of(
context,
).pop(state.expenseCategories[index]);
},
),
),
TextField(
decoration: InputDecoration(hintText: "Category name"),
controller: _categoryNameController,
),
Row(
children: [
Spacer(),
OutlinedButton(
onPressed: () async {
final category =
ExpenseCategory()
..name = _categoryNameController.text;
await upsertExpenseCategory(category);
_categoryNameController.text = "";
Navigator.of(context).pop(category);
},
child: Text("Add"),
),
],
),
],
),
),
);
}
}