使用变量名作为参数更改数据 class 的任何变量

change any variable of a data class with the variable name as an argument

我想知道我是否可以为我的存储库创建一个函数,通过它我可以一般地更改基于数据 class 的变量中的任何值。这可能吗?

List<Task> tasks;

Future<void> changeTaskValue(int taskId, String variable, dynamic newValue) {
  task[taskId].<magic to get a reference to the variable> = newValue;
}

class Task {
  Task({this.taskId, this.taskName, this.status, });
  final int taskId;
  final String taskName;
  final String status;
}
...
void function abc() {
  changeTaskValue(taskId: 1, variable: 'taskName', newValue: 'test')
}

为此您需要使用 MAP 对象

  List<Map<String, dynamic>> tasks;

  Future<void> changeTaskValue(int taskId, String variable, dynamic newValue) {
    tasks[taskId][variable] = newValue;
  }

一件事是您不能修改最终变量。所以你可以做的是从列表中删除 Task 对象并添加另一个 Task 和你想要的数据。

List<Task> tasks;

Future<void> changeTaskValue({
  int taskId,
  String taskname,
  String status,
}) {
  tasks.remove(
    Task(taskId: 1), //id of the task you want to remove
  );
  tasks.add(Task(
    taskId: taskId,
    taskName: taskname,
    status: status,
  ));
}

class Task {
  Task({
    this.taskId,
    this.taskName,
    this.status,
  });
  final int taskId;
  final String taskName;
  final String status;
}

void abc() {
  changeTaskValue(taskId: 1, taskname: 'taskName', status: 'test');
}