dart Flutter:注销后无法更新本地数据库

nuypyhwy  于 2022-12-06  发布在  Flutter
关注(0)|答案(1)|浏览(162)

当我点击复选框时,它会变成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)。

w46czmvw

w46czmvw1#

您正在以错误的方式更新变量,请将您的checkBoxChanged更改为:

void checkBoxChanged(bool? value, int index) {
    setState(() {
      db.folderTask[index] =FolderTask(name: !db.folderTask[index]. name, isChecked: value);
    });
    db.updateDatabase();
  }

相关问题