boxchecker/lib/check_list.dart

84 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
import 'data_util.dart' as data;
import 'db_helper.dart';
class CheckList extends StatefulWidget {
const CheckList({Key? key, required this.id}) : super(key: key);
final int id;
@override
State<StatefulWidget> createState() => _CheckList(id);
}
class _CheckList extends State<CheckList> {
_CheckList(this.id);
final int id;
data.List? listData;
List<data.Check> list = [];
void _loadList() async {
var rows = await DBHelper.dbHelper.getList(id);
list.clear();
setState(() {
for (var row in rows) {
list.add(data.Check.fromMap(row));
}
});
}
void _loadListData() async {
var rows = await DBHelper.dbHelper.getListData(id);
listData = (rows.isNotEmpty) ? data.List.fromMap(rows[0]) : null;
}
void _updateItem(data.Check item) async {
DBHelper.dbHelper.updateItem(item);
}
@override
void initState() {
_loadList();
_loadListData();
super.initState();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text((listData != null) ? listData!.name : 'Check List: $id'),
),
body: ListView.builder(
itemCount: list.length,
itemBuilder: (context, index) {
return Card(
child: CheckboxListTile(
title: Text(list[index].text),
controlAffinity: ListTileControlAffinity.leading,
value: list[index].value,
onChanged: (listData != null && !listData!.isTemplate!)
? ((value) {
_updateItem(list[index]);
setState(() {
list[index].value = value!;
});
})
: null,
),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// TODO implment adding items to lists
},
child: const Icon(Icons.check_box),
tooltip: "Add Item",
),
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
);
}
}