ошибка flutter onTap onTap перестал работать после добавления инструкции if

#flutter #android-studio #flutter-layout #flutter-dependencies #flutter-web

Вопрос:

я получаю нулевую ошибку в кнопке flutter, которая перестала работать после добавления оператора if внутри ontap, вот мой код flutter

 import 'package:efood_multivendor/controller/product_controller.dart';
import 'package:efood_multivendor/util/dimensions.dart';
import 'package:flutter/material.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_instance/src/extension_instance.dart';
import 'package:get/get_utils/src/extensions/internacionalization.dart';

import 'custom_snackbar.dart';

class QuantityButton extends StatelessWidget {
  final bool isIncrement;
  final Function onTap;
  final int quantity;
  final int stock;
  QuantityButton(
      {@required this.isIncrement,
      @required this.onTap,
      @required this.quantity,
      @required this.stock});

  @override
  Widget build(BuildContext context) {
    return InkWell(
       onTap : onTap({
        if (!isIncrement amp;amp; quantity > 1) {
          Get.find<ProductController>().setQuantity(false),
        } else if (isIncrement) {
          if (quantity < stock) {
            Get.find<ProductController>().setQuantity(true),
          } else {
            showCustomSnackBar('out_of_stock'.tr),
          }
        }
      }),
      child: Container(
        height: 22,
        width: 22,
        margin: EdgeInsets.symmetric(horizontal: Dimensions.PADDING_SIZE_SMALL),
        decoration: BoxDecoration(
          shape: BoxShape.circle,
          border: Border.all(
              width: 1,
              color: isIncrement
                  ? Theme.of(context).primaryColor
                  : Theme.of(context).disabledColor),
          color: isIncrement
              ? Theme.of(context).primaryColor
              : Theme.of(context).disabledColor.withOpacity(0.2),
        ),
        alignment: Alignment.center,
        child: Icon(
          isIncrement ? Icons.add : Icons.remove,
          size: 15,
          color: isIncrement
              ? Theme.of(context).cardColor
              : Theme.of(context).disabledColor,
        ),
      ),
    );
  }
}
 

ошибка : если я попытаюсь удалить оператор if и добавить onTap:onTap , что он работает, я получаю Another exception was thrown: NoSuchMethodError: '<Unexpected Null Value>' ошибку, кнопка все еще не работает
, а также попробовал этот метод, но все еще показывает то же самое, и onTap не работает

        onTap : (){
        if (!isIncrement amp;amp; quantity > 1) {
          Get.find<ProductController>().setQuantity(false);
        } else if (isIncrement) {
          if (quantity < stock) {
            Get.find<ProductController>().setQuantity(true);
          } else {
            showCustomSnackBar('out_of_stock'.tr);
          }
} ```
 

Комментарии:

1. Не могли бы вы вкратце объяснить, чего вы здесь пытаетесь достичь?

2. Функция onTap не работает

Ответ №1:

Это связано onTap с тем, что для параметра требуется VoidCallback объект, и вы объявляете его двумя способами:

Функция выброса. Специфичен для данного виджета и не может быть вызван другими.

 onTap : (){
    ... your code ...
  }
 

или объявить новую функцию таким образом

 void yourFunction(){
    ... your code ...
  }
 

и используйте эту функцию в своей кнопке

 onTap : yourFunction
 

Этот второй способ позволяет вам вызывать функцию из другого виджета