首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >颤振:如何使用getX改变文本颜色?

颤振:如何使用getX改变文本颜色?
EN

Stack Overflow用户
提问于 2021-07-07 23:07:23
回答 4查看 2.7K关注 0票数 2

我想改变一个ListTile文本的颜色,点击瓷砖,我怎么能做到这一点,而且颜色应该只对一个特定的选定瓷砖。我的做法如下:

代码语言:javascript
复制
ListView.builder(
        itemCount: _antigen.plantAntigens.length,
        itemBuilder: (BuildContext cntxt, int index) {
          return ListTile(
              title: Text(
                _antigen.plantAntigens[index],
                style: TextStyle(
                    color: controller.isSelected ? Colors.red : Colors.black87),
              ),
              onTap: () {
                controller.toogle();
              });
        },
      ),

控制器代码如下:

代码语言:javascript
复制
bool isSelected = false.obs;

  toogle() {
    isSelected = !isSelected;
  }
EN

回答 4

Stack Overflow用户

发布于 2021-07-08 01:28:22

只需在控制器中创建存储所选索引的列表即可。

代码语言:javascript
复制
  var plantAntigensSelected = [].obs;

  toogle(int index) {
    if (plantAntigensSelected.contains(index)) {
      plantAntigensSelected.remove(index);
    } else {
      plantAntigensSelected.add(index);
    }
  }

你的ListView是这样的

代码语言:javascript
复制
     ListView.builder(
        itemCount: plantAntigens.length,
        itemBuilder: (BuildContext cntxt, int index) {
          return ListTile(
              title: Obx(
                () => Text(
                  plantAntigens[index],
                  style: TextStyle(
                      color:
                      controller.plantAntigensSelected.contains(index)
                              ? Colors.red
                              : Colors.black87),
                ),
              ),
              onTap: () {
                controller.toogle(index);
              });
        },
      )
票数 4
EN

Stack Overflow用户

发布于 2021-07-08 01:22:40

控制器TileColorX将保存已选择的瓷砖(通过使用ListView.builder提供的索引)。

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:get/get.dart';

class ListViewBoxConstraintsPage extends StatelessWidget {
  final List<String> _items = ['first', 'second', 'third'];

  @override
  Widget build(BuildContext context) {
    TileColorX tcx = Get.put(TileColorX());

    return Scaffold(
      appBar: AppBar(
        title: Text('ListView Constraints'),
      ),
      body: ListView.builder(itemCount: _items.length,
          itemBuilder: (BuildContext context, int index) {
            return ListTile(
              title: Obx(
                      () => Text('${_items[index]} item',
                      style: TextStyle(
                          color: tcx.selectedIndex.value == index ? Colors.green : Colors.red)
                  )),
              onTap: () => tcx.toggle(index),
            );
          }),
    );
  }
}

class TileColorX extends GetxController {
  RxInt selectedIndex = 0.obs;

  void toggle(int index) => selectedIndex.value = index;
}
票数 0
EN

Stack Overflow用户

发布于 2021-07-08 05:40:45

请尝试在setState中使用onTap,如下所示

代码语言:javascript
复制
onTap: () {
            setState(() {
            controller.toogle();
            });
  });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68293856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档