Compare commits
2 Commits
a7f4838ce9
...
14c23baa75
| Author | SHA1 | Date |
|---|---|---|
|
|
14c23baa75 | |
|
|
5bb8060a95 |
|
|
@ -33,6 +33,15 @@ class _CheckList extends State<CheckList> {
|
||||||
listData = (rows.isNotEmpty) ? data.List.fromMap(rows[0]) : null;
|
listData = (rows.isNotEmpty) ? data.List.fromMap(rows[0]) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _addItem() async {
|
||||||
|
var item = data.Check("", false, listID: listData!.id!);
|
||||||
|
int id = await DBHelper.dbHelper.insertItem(item);
|
||||||
|
item.id = id;
|
||||||
|
setState(() {
|
||||||
|
list.add(item);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void _updateItem(data.Check item) async {
|
void _updateItem(data.Check item) async {
|
||||||
DBHelper.dbHelper.updateItem(item);
|
DBHelper.dbHelper.updateItem(item);
|
||||||
}
|
}
|
||||||
|
|
@ -52,74 +61,77 @@ class _CheckList extends State<CheckList> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
// TODO: implement build
|
return GestureDetector(
|
||||||
return Scaffold(
|
onTap: () => FocusScope.of(context).unfocus(),
|
||||||
appBar: AppBar(
|
child: Scaffold(
|
||||||
title: Text((listData != null) ? listData!.name : 'Check List: $id'),
|
appBar: AppBar(
|
||||||
actions: (listData != null && listData!.isTemplate! && !_editable)
|
title: Text((listData != null) ? listData!.name : 'Check List: $id'),
|
||||||
? [
|
actions: (listData != null && listData!.isTemplate! && !_editable)
|
||||||
IconButton(
|
? [
|
||||||
onPressed: () => _toggleEditable(),
|
IconButton(
|
||||||
icon: const Icon(Icons.lock))
|
onPressed: () => _toggleEditable(),
|
||||||
]
|
icon: const Icon(Icons.lock))
|
||||||
: (listData != null && listData!.isTemplate!)
|
]
|
||||||
? [
|
: (listData != null && listData!.isTemplate!)
|
||||||
IconButton(
|
? [
|
||||||
onPressed: () => _toggleEditable(),
|
IconButton(
|
||||||
icon: const Icon(Icons.lock_open))
|
onPressed: () => _toggleEditable(),
|
||||||
]
|
icon: const Icon(Icons.lock_open))
|
||||||
: [],
|
]
|
||||||
),
|
: [],
|
||||||
body: RefreshIndicator(
|
|
||||||
onRefresh: () async {
|
|
||||||
_loadListData();
|
|
||||||
_loadList();
|
|
||||||
},
|
|
||||||
child: ListView.builder(
|
|
||||||
itemCount: list.length,
|
|
||||||
itemBuilder: (context, index) {
|
|
||||||
return Card(
|
|
||||||
child: CheckboxListTile(
|
|
||||||
title: TextFormField(
|
|
||||||
enabled: (listData != null &&
|
|
||||||
(!listData!.isTemplate! || _editable)),
|
|
||||||
decoration: InputDecoration(border: InputBorder.none),
|
|
||||||
initialValue: list[index].text,
|
|
||||||
onChanged: (value) {
|
|
||||||
list[index].text = value;
|
|
||||||
_updateItem(list[index]);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
controlAffinity: ListTileControlAffinity.leading,
|
|
||||||
value: list[index].value,
|
|
||||||
onChanged:
|
|
||||||
(listData != null && (!listData!.isTemplate! || _editable))
|
|
||||||
? ((value) {
|
|
||||||
_updateItem(list[index]);
|
|
||||||
setState(() {
|
|
||||||
list[index].value = value!;
|
|
||||||
});
|
|
||||||
})
|
|
||||||
: null,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
|
body: RefreshIndicator(
|
||||||
|
onRefresh: () async {
|
||||||
|
_loadListData();
|
||||||
|
_loadList();
|
||||||
|
},
|
||||||
|
child: ListView.builder(
|
||||||
|
itemCount: list.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
return Card(
|
||||||
|
child: CheckboxListTile(
|
||||||
|
title: TextFormField(
|
||||||
|
enabled: (listData != null &&
|
||||||
|
(!listData!.isTemplate! || _editable)),
|
||||||
|
decoration: InputDecoration(border: InputBorder.none),
|
||||||
|
initialValue: list[index].text,
|
||||||
|
onChanged: (value) {
|
||||||
|
list[index].text = value;
|
||||||
|
_updateItem(list[index]);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
controlAffinity: ListTileControlAffinity.leading,
|
||||||
|
value: list[index].value,
|
||||||
|
onChanged: (listData != null &&
|
||||||
|
(!listData!.isTemplate! || _editable))
|
||||||
|
? ((value) {
|
||||||
|
_updateItem(list[index]);
|
||||||
|
setState(() {
|
||||||
|
list[index].value = value!;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
: null,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
floatingActionButton: FloatingActionButton(
|
||||||
|
onPressed: () {
|
||||||
|
if (listData!.isTemplate! && !_editable) {
|
||||||
|
ScaffoldMessenger.of(context)
|
||||||
|
..clearSnackBars()
|
||||||
|
..showSnackBar(SnackBar(content: Text("Template is locked")));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_addItem();
|
||||||
|
// TODO switch focus to new card
|
||||||
|
},
|
||||||
|
child: const Icon(Icons.check_box_outlined),
|
||||||
|
tooltip: "Add Item",
|
||||||
|
),
|
||||||
|
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
|
||||||
),
|
),
|
||||||
floatingActionButton: FloatingActionButton(
|
|
||||||
onPressed: () {
|
|
||||||
if (listData!.isTemplate! && !_editable) {
|
|
||||||
ScaffoldMessenger.of(context)
|
|
||||||
..clearSnackBars()
|
|
||||||
..showSnackBar(SnackBar(content: Text("Template is locked")));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// TODO implment adding items to lists
|
|
||||||
},
|
|
||||||
child: const Icon(Icons.check_box_outlined),
|
|
||||||
tooltip: "Add Item",
|
|
||||||
),
|
|
||||||
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,12 @@ class DBHelper {
|
||||||
return db.insert("List", l.toMap());
|
return db.insert("List", l.toMap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<int> insertItem(data.Check item) async {
|
||||||
|
Database db = await database;
|
||||||
|
|
||||||
|
return db.insert("Item", item.toMap());
|
||||||
|
}
|
||||||
|
|
||||||
Future<int> updateItem(data.Check item) async {
|
Future<int> updateItem(data.Check item) async {
|
||||||
Database db = await database;
|
Database db = await database;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue