#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), );