为什么我使用getX不工作在扑动列表视图?



当我点击容器并更新selectedIndex等于当前索引时,但它不会更新。

class HomeController extends GetxController {
final RxList<PurineTypeModel> dataSource = RxList();
final selectedIndex = 0.obs;
}
Obx(() {
return ListView.builder(
cacheExtent: 30,
scrollDirection: Axis.horizontal,
itemBuilder: (c, index) {
print("refresh?? $index");
return GestureDetector(child: Container(
width: 100,
color: controller.selectedIndex.value == index ? Colors.red : Colors.green,
child: Text(
controller.selectedIndex.string),
), onTap: () {
controller.selectedIndex.value = 1;
},);
},
itemCount: controller.dataSource.length);
})
onTap: () {
controller.selectedIndex.value = index;
},);

设置索引元素不为1控制器如何初始化?

你需要把GestureDetector也包装在一个Obx中,就像这样:

Obx(() {
return ListView.builder(
cacheExtent: 30,
scrollDirection: Axis.horizontal,
itemBuilder: (c, index) {
print("refresh?? $index");
return Obx(() =>
GestureDetector(child: Container(
width: 100,
color: controller.selectedIndex.value == index ? Colors
.red : Colors.green,
child: Text(
controller.selectedIndex.string),
), onTap: () {
controller.selectedIndex.value = 1;
},));
},
itemCount: controller.dataSource.length);
})

因为外层Obx只观察到controller.dataSource.length

最新更新