我想改变一个ListTile文本的颜色,点击瓷砖,我怎么能做到这一点,而且颜色应该只对一个特定的选定瓷砖。我的做法如下:
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();
});
},
),控制器代码如下:
bool isSelected = false.obs;
toogle() {
isSelected = !isSelected;
}发布于 2021-07-08 01:28:22
只需在控制器中创建存储所选索引的列表即可。
var plantAntigensSelected = [].obs;
toogle(int index) {
if (plantAntigensSelected.contains(index)) {
plantAntigensSelected.remove(index);
} else {
plantAntigensSelected.add(index);
}
}你的ListView是这样的
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);
});
},
)发布于 2021-07-08 01:22:40
控制器TileColorX将保存已选择的瓷砖(通过使用ListView.builder提供的索引)。
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;
}发布于 2021-07-08 05:40:45
请尝试在setState中使用onTap,如下所示
onTap: () {
setState(() {
controller.toogle();
});
});https://stackoverflow.com/questions/68293856
复制相似问题