import 'package:boxchecker/check_list.dart'; import 'package:flutter/material.dart'; import 'data_util.dart' as data; import 'db_helper.dart'; import 'box_checker.dart'; 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 createState() => _CheckListItem(); } class _CheckListItem extends State { 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, ), ); } }