三元运算符不改变状态

Ternary operator not changing state

有一个显示预定时间的文本,基本上,文本的颜色应该根据时间而变化,所以如果预定时间是未来的时间,那么它不应该改变颜色,如果是过去的时间然后它的颜色应该变成红色。预定的时间是通知应该出现的时间,当通知出现时它应该改变,三元操作正常工作但只有当我点击另一个小部件来改变它的状态时,它不会自己改变状态。我正在使用 getx,所以我也尝试了 Obx,但没有用。我该如何解决?

                 Visibility(
                            visible: todoController.todos[index].date ==
                                        '' &&
                                    todoController.todos[index].time == ''
                                ? false
                                : true,
                            child: Obx(() => Text(
                                (todoController.todos[index].date != now)
                                    ? '${todoController.todos[index].date!}, ${todoController.todos[index].time}'
                                    : 'Today, ${todoController.todos[index].time}',
                                style: GoogleFonts.notoSans(
                                  color: (run(
                                                  todoController
                                                      .todos[index].date,
                                                  todoController
                                                      .todos[index].time)
                                              .compareTo(tz.TZDateTime.now(
                                                  tz.local)) >
                                          0)
                                      ? Theme.of(context).hintColor
                                      : Colors.redAccent,
                                  fontSize: 20.0,
                                  decoration:
                                      (todoController.todos[index].done)
                                          ? TextDecoration.lineThrough
                                          : TextDecoration.none,
                                ))),
                          )

待办控制器:

class TodoController extends GetxController {
 var todos = <Todo>[].obs;

 @override
 void onInit() {
  List? storedTodos = GetStorage().read<List>('todos');

if (storedTodos != null) {
  todos = storedTodos.map((e) => Todo.fromJson(e)).toList().obs;
}
ever(todos, (_) {
  GetStorage().write('todos', todos.toList());
});
super.onInit();
}}

您需要将 Obx 小部件向上移动并用它包裹 Visibility 小部件:

Obx(()=> Visibility(....));

更新

你对这行有问题:

todos = storedTodos.map((e) => Todo.fromJson(e)).toList().obs;

与其重新分配 Rx 变量本身,不如将数据分配给 Rx 变量值:

todos.assignAll(storedTodos.map((e) => Todo.fromJson(e)).toList());