Как сделать отдельные элементы списка заметными в getx flutter

#flutter #dart #flutter-getx

Вопрос:

У меня есть список, в котором есть номера, и как только они изменятся, пользовательский интерфейс тоже должен измениться. Я использую getx для составления этого списка, который находится внутри GetXController. Пользовательский интерфейс использует этот контроллер для получения списка, а затем использует список таблиц для создания отдельных текстовых полей и присваивает каждому из них соответствующие значения. Я также попытался пометить список как наблюдаемый, но, похоже, не смог заставить его работать.

РЕДАКТИРОВАТЬ: Я хочу слушать отдельные объекты RxInt в списке, а не сам список. Таким образом, проблема в том, что всякий раз, когда я изменяю это значение в списке, прослушиватели не обновляются.

Ответ №1:

Сделайте переменную такой :

 RxList list = [].obs;  

затем используйте список, подобный этому :

 Obx(()=gt; Text(list.length.toString()));  

Ответ №2:

Пример класса контроллера

 class VendorOfferController extends GetxController {  static VendorOfferController to = Get.find();   Rxlt;VendorOffergt; vendorOffer = new VendorOffer().obs;   VendorOfferRepository _vendorOfferRepository = new VendorOfferRepository();    @override  void onInit() {  // TODO: implement onInit  super.onInit();  getVendorOffer();    }   getVendorOffer() async {  Eitherlt;Failure, VendorOffergt; data =  await _vendorOfferRepository.getVendorOffer();   data.fold((l) {  AppExceptionHandle.exceptionHandle(l);  }, (r) {    vendorOffer.value = r;  });  } }  

Пример класса пользовательского интерфейса

 class VendorOfferScreen extends StatelessWidget {  @override  Widget build(BuildContext context) {   Get.put(VendorOfferController());  return Scaffold(body: Obx(() {   return VendorOfferController.to.vendorOffer.value.vendorList.isEmpty  ? Center(  child: CircularProgressIndicator(),  )  :Padding(  padding: const EdgeInsets.only(top: 16, bottom: 16),  child: ListView.separated(  itemBuilder: (context, int index) {      return VendorOfferCard(  address: VendorOfferController.to.vendorOffer.value  .vendorList[index].address ??  "12 /170 road:10 ,Mirpur 10 ",  name: VendorOfferController.to.vendorOffer.value  .vendorList[index].fullName ??  "Food Name",  deliveryCharge: VendorOfferController.to.vendorOffer  .value.vendorList[index].deliveryCharge ??  "$10 ",  distance:  "${_distance == null ? 0 : _distance.round()} km",  rating: VendorOfferController.to.vendorOffer.value  .vendorList[index].rating ??  2,  offer:  "${VendorOfferController.to.vendorOffer.value.vendorList[index].offer == null ? "0" : VendorOfferController.to.vendorOffer.value.vendorList[index].offer.amount} %",  image: VendorOfferController.to.vendorOffer.value  .vendorList[index].vendorImage !=  null  ? ApiUrls.download_base_url    VendorOfferController.to.vendorOffer.value  .vendorList[index].vendorImage  : AppAssets.demo_product_image,  ),  );  },  separatorBuilder: (context, int index) {  if (index == 0) {  return Container(  padding: EdgeInsets.only(top: 10),  );  }  return Container(  height: 10,  );  },  itemCount: VendorOfferController  .to.vendorOffer.value.vendorList.length),  );