【问题标题】:change any variable of a data class with the variable name as an argument以变​​量名作为参数更改数据类的任何变量
【发布时间】:2020-12-04 14:18:17
【问题描述】:

我想知道是否可以为我的存储库创建一个函数,我可以使用它来更改基于数据类的变量中的任何值。这可能吗,怎么做?

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')
}

【问题讨论】:

标签: flutter variables repository


【解决方案1】:

有一件事是您不能修改最终变量。因此,您可以从列表中删除 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');
}

【讨论】:

  • 好点,最后。我只是复制了一些类似的、方便的类来编写示例。是的,它认为您提供完整的更新任务元素的想法可能是最简单的解决方法
【解决方案2】:

为此,您需要使用 MAP 对象

  List<Map<String, dynamic>> tasks;

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

【讨论】:

  • 那么我会有不同的数据结构。我热衷于一种通用方法,如何从一个块更新存储库中的嵌套类。
  • 你要找的东西,在 Dart 中是不可能的,你可以看看这个 ans stackoverflow.com/questions/53737110/…
猜你喜欢
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2019-09-23
  • 2018-09-08
相关资源
最近更新 更多