三元运算符不改变状态
Posted
技术标签:
【中文标题】三元运算符不改变状态【英文标题】:Ternary operator not changing state 【发布时间】:2021-12-30 13:58:09 【问题描述】:有一个显示预定时间的文本,基本上,文本的颜色应该根据时间而改变,所以如果预定时间在未来,那么它不应该改变它的颜色,如果它是过去那么它的颜色颜色应变为红色。预定时间是通知应该出现的时间和通知出现的时间应该改变,三元操作正常工作但只有当我点击另一个小部件来改变它的状态时,它不会自行改变状态。我正在使用 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,
))),
)
TodoController:
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();
【问题讨论】:
请提供控制器代码以便更好地理解 我正在使用 getx 你用Obx
包裹你的小部件了吗?
是的,但没用
向我们展示您是如何使用Obx
包装小部件的。
【参考方案1】:
您需要将Obx
小部件向上移动并用它包裹Visibility
小部件:
Obx(()=> Visibility(....));
更新
这行有问题:
todos = storedTodos.map((e) => Todo.fromJson(e)).toList().obs;
您应该将数据分配给 Rx 变量值,而不是重新分配 Rx 变量本身:
todos.assignAll(storedTodos.map((e) => Todo.fromJson(e)).toList());
【讨论】:
还是不行 验证您的三元是否产生预期结果。 它按预期工作,但唯一的问题是它不会改变状态,只有当我按下另一个小部件改变状态时,它才会改变它的状态 知道了!检查更新的答案。以上是关于三元运算符不改变状态的主要内容,如果未能解决你的问题,请参考以下文章