【问题标题】:GetX flutter state is not being updatedGetX 颤振状态未更新
【发布时间】:2021-11-19 13:09:10
【问题描述】:

我是新来的颤振。我刚开始使用 GetX 颤振包。我正在开发一个待办事项列表应用程序。我在更新小部件状态时遇到问题。我所做的是我创建了一个 AddTaskController,只要单击 Add item 按钮,它就会更新 listView 状态。每个列表项都包含一个复选框。问题是我无法在单击复选框时更新列表项的状态。 这是代码: 添加任务控制器

class AddTaskController extends GetxController {

  RxList<TaskItem> toDoTasksList = RxList([]);

  addTask(TaskItem taskItem) {
    toDoTasksList.add(taskItem);
  }

  removeTask(TaskItem taskItem) {
    toDoTasksList.remove(taskItem);
  }
}

AddTaskScreen

  • 添加任务按钮

    ElevatedButton.icon(
      onPressed: () {
        TaskItem taskItem = TaskItem(
          taskStatus: TASK_STATUS.TODO,
          isChecked: false,
          taskName: title,
        );
        addTaskController.addTask(taskItem);
      },
      icon: Icon(Icons.add),
      label: Text('Add Item'),
      style: ElevatedButton.styleFrom(
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(12),
        ),
      ),
    );

  • 列表视图

    Expanded(
      child: Obx(
        () => ListView.builder(
          itemBuilder: (context, index) {
            return TaskCheckItem(
              value: addTaskController.toDoTasksList[index].isChecked,
              title: addTaskController.toDoTasksList[index].taskName,
              onChanged: (newValue) {
                print(newValue);
                addTaskController.toDoTasksList[index].setChecked(newValue);
              },
              onDownloadClicked: () {},
              onDeleteClicked: () {},
            );
          },
          itemCount: addTaskController.toDoTasksList.length,
        ),
      ),
    );

【问题讨论】:

  • 朋友不要让朋友使用getx。请停下来。
  • 你推荐哪一个?提供者?另外,你能告诉我为什么我不应该使用 GetX 吗?
  • 您确实更新了列表,但您没有向复选框发送任何值。所以复选框和列表项都没有发现父小部件有任何变化。这里 addTaskController.toDoTasksList[index].setChecked(newValue);您更新列表但不将其发送到 TaskCheckItem ,
  • 为什么不使用getx?为什么讨厌 Getx?

标签: flutter dart state-management flutter-getx


【解决方案1】:

要更新您必须添加到列表值的状态 toDoTasksList.add(taskItem); 这不会更新状态

toDoTasksList.value.add(taskItem);这将更新状态

如果它不起作用而不是使用RxList&lt;TaskItem&gt; toDoTasksList = RxList([]);

只需使用RxList&lt;TaskItem&gt; toDoTasksList = &lt;TaskItem&gt;[].obs;

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2021-05-23
    • 2020-08-04
    • 2021-09-25
    • 2022-01-05
    • 2021-06-01
    • 2021-10-21
    • 1970-01-01
    • 2022-01-22
    • 2021-10-06
    相关资源
    最近更新 更多