在 getx 中将构造函数值从视图传递到控制器

时间:2021-06-03 20:12:52

标签: flutter getx flutter-getx

所以这是我的视图,其中包含构造函数。我想将此构造函数值产品传递给我的控制器,即 WishListIconController。这个视图实际上是我当前项目中许多视图中调用的小部件,因此我使用构造函数将值传递给它。

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

这是我的控制器。我想将产品传递给这里,以便我可以使用 产品价值。

 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();
   }
 }

1 个答案:

答案 0 :(得分:0)

在您的控制器中声明一个 products 变量并声明一个 init 方法,该方法将设置 products 变量的值:

var products;

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

然后在您的小部件的构建方法上,在返回您的小部件树之前,像这样调用它:

wishListIconController.init(products);
return....
相关问题