当我点击复选框时,它会变成true,但我重新登录后,它不会保留该数据。这是我的代码:
List<FolderTask> folderTask = [];
folderTask = [FolderTask(name: 'Buy groceries stuff', isChecked: false)];
这是我的FolderTask模型:
class FolderTask {
String? name;
bool isChecked = false;
FolderTask({required this.name, required this.isChecked});
factory FolderTask.fromJson(json) {
return FolderTask(
name: json['name'], isChecked: json['isChecked'] ?? false);
}
Map<String, dynamic> toJson() => {
"name": name,
"task": [isChecked]
};
}
这是更新列表的方法:
// update the database
void updateDatabase() {
List folder = [];
for (var element in folderTask) {
folder.add(element.toJson());
}
if (kDebugMode) {
print(folder);
}
var data = jsonEncode(folder);
myBox.put(key, data);
notifyListeners();
}
这是一个复选框方法,当默认值为false时,当用户单击它时,它会变为true:
// my function for checkbox
void checkBoxChanged(bool? value, int index) {
setState(() {
db.folderTask[index].isChecked = !db.folderTask[index].isChecked;
});
db.updateDatabase();
}
这是UI的代码:
ListView.builder(
padding: const EdgeInsets.only(
top: 20, bottom: 20, right: 10),
itemCount: foundFolder.length,
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
},
child: ToDoTile(
folderName: foundFolder[index].name!,
deleteFunction: (context) =>
_deleteFolder(index),
isChecked: db.folderTask[index].isChecked,
onChanged: (value) =>
checkBoxChanged(value, index)),
);
})
我想要实现的是保持最新的数据。因为现在,当我点击复选框(值==true)时,它不会在我重新登录后保留数据(值==false)。
1条答案
按热度按时间w46czmvw1#
您正在以错误的方式更新变量,请将您的
checkBoxChanged
更改为: