boxchecker/lib/check_list_item.dart

97 lines
2.6 KiB
Dart

import 'package:boxchecker/check_list.dart';
import 'package:flutter/material.dart';
import 'data_util.dart' as data;
import 'db_helper.dart';
typedef FutureCallback = Future<bool?> Function(DismissDirection);
class CheckListItem extends StatefulWidget {
const CheckListItem(
{Key? key,
required this.item,
required this.confirmDismiss,
this.locked = false})
: super(key: key);
final data.Check item;
final FutureCallback confirmDismiss;
final bool locked;
@override
State<StatefulWidget> createState() => _CheckListItem();
}
class _CheckListItem extends State<CheckListItem> {
Widget dismissIconPadding(Widget icon) {
return Padding(
padding: const EdgeInsets.all(10),
child: icon,
);
}
Widget dismissBackground() {
return Container(
color: Colors.blue,
child: Row(children: const [
Padding(
padding: EdgeInsets.all(10),
child: Icon(Icons.check),
),
Spacer(),
]));
}
Widget dismissSecondaryBackground() {
return Container(
color: Colors.red,
child: Row(children: [
const Spacer(),
dismissIconPadding(const Icon(Icons.delete_forever)),
]),
);
}
Widget dismissLockedBackground() {
return Container(
color: Colors.grey[900],
child: Row(
children: [
dismissIconPadding(const Icon(Icons.lock)),
const Spacer(),
dismissIconPadding(const Icon(Icons.lock)),
],
));
}
@override
Widget build(BuildContext context) {
return Dismissible(
key: Key(widget.item.id.toString()),
background:
!widget.locked ? dismissBackground() : dismissLockedBackground(),
secondaryBackground: !widget.locked ? dismissSecondaryBackground() : null,
confirmDismiss: widget.confirmDismiss,
child: CheckboxListTile(
title: TextFormField(
enabled: !widget.locked,
decoration: const InputDecoration(border: InputBorder.none),
initialValue: widget.item.text,
onChanged: (value) {
widget.item.text = value;
DBHelper.dbHelper.updateItem(widget.item);
},
),
controlAffinity: ListTileControlAffinity.leading,
value: widget.item.value,
onChanged: !widget.locked
? ((value) {
DBHelper.dbHelper.updateItem(widget.item);
setState(() {
widget.item.value = value!;
});
})
: null,
),
);
}
}