三元运算符不改变状态
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());
有一个显示预定时间的文本,基本上,文本的颜色应该根据时间而变化,所以如果预定时间是未来的时间,那么它不应该改变颜色,如果是过去的时间然后它的颜色应该变成红色。预定的时间是通知应该出现的时间,当通知出现时它应该改变,三元操作正常工作但只有当我点击另一个小部件来改变它的状态时,它不会自己改变状态。我正在使用 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());