Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing Constructor value from view to controller in getx

So this is my view that has constructor in it. I want to pass this constructor value products to my controller i.e WishListIconController. This view is actually a widget called in many views in my current project so I pass value to it using constructor.

 class WishListIconView extends GetView{
   final products;
   final category;

   WishListIconView({this.products, this.category});
   WishListServiceApi wishListService = locator<WishListServiceApi>();

   WishlistIconController wishListIconController =
   Get.put(WishlistIconController());

  @override
  Widget build(BuildContext context) {
  return Obx(
    () => locator<SharedPreferencesManager>().isKeyExists('isLogin') == true
        ? wishListIconController.isAdded.value == false
            ? IconButton(
                splashRadius: 3,
                constraints: BoxConstraints(),
                padding: EdgeInsets.all(0),
                icon: Icon(
                  Icons.favorite_border,
                  size: 18,
                  color: Colors.blue,
                ),
                onPressed: () async {
                  bool success = await wishListService.addToWishList(
                      products.id, category, products);
                },
              )
            : IconButton(
                splashRadius: 3,
                constraints: BoxConstraints(),
                padding: EdgeInsets.all(0),
                icon: Icon(
                  Icons.favorite,
                  size: 18,
                  color: Colors.blue,
                ),
                onPressed: () async {
                  bool success = await wishListService.deleteWishListItem(
                      products.id, category);
              
                },
              )
        : IconButton(
            splashRadius: 3,
            constraints: BoxConstraints(),
            padding: EdgeInsets.all(0),
            icon: Icon(
              Icons.favorite_border,
              size: 18,
              color: Colors.blue,
            ),
            onPressed: () {
              Fluttertoast.showToast(
                  msg: "Please login to add product to wishlist",
                  toastLength: Toast.LENGTH_SHORT,
                  gravity: ToastGravity.TOP,
                  backgroundColor: Colors.blue[300],
                  textColor: Colors.white,
                  fontSize: 16.0);
            },
          ));
   }
 }

This is my controller. I want to pass product here to so I can create functions using products value.

 class WishlistIconController extends GetxController {
     WishListServiceApi wishListServiceApi = locator<WishListServiceApi>();
     var isAdded = false.obs;

   @override
  void onInit() {
    super.onInit();
    isInWishList();
  }

 isInWishList() {
   isAdded.value = wishListServiceApi.wishListResponse
    .any((element) => element.id == products.id);

  update();
 }

 @override
  void onReady() {
  super.onReady();
  isInWishList();
   }
 }
like image 423
Aabhash Rai Avatar asked Oct 25 '25 11:10

Aabhash Rai


1 Answers

In your controller declare a products variable and declare an init method which will set the value of the products variable:

var products;

init(p){
  products = p;
  update();
}

then on your widget's build method, before returning your widget tree, call it like:

wishListIconController.init(products);
return....
like image 160
S. M. JAHANGIR Avatar answered Oct 27 '25 01:10

S. M. JAHANGIR