添加 if 语句后,颤振 onTap 错误 onTap 停止工作

Posted

技术标签:

【中文标题】添加 if 语句后,颤振 onTap 错误 onTap 停止工作【英文标题】:flutter onTap error onTap stopped working after adding if statement 【发布时间】:2021-11-18 23:12:36 【问题描述】:

在 ontap 中添加 if 语句后,flutter 按钮停止工作时出现 null 错误,这是我的颤振代码

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 && 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: '&lt;Unexpected Null Value&gt;' 错误仍然按钮不起作用 并且也尝试了这种方法,但仍然显示相同并且 onTap 不起作用

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

【问题讨论】:

你能简单解释一下你想在这里实现什么吗? onTap 功能不工作 【参考方案1】:

这是因为onTap 参数需要一个VoidCallback 对象,而您可以通过两种方式声明它:

一次性功能。特定于小部件,其他人无法调用。

onTap : ()
    ... your code ...
  

或者以这种方式声明一个新函数

void yourFunction()
    ... your code ...
  

并在您的按钮中使用该功能

onTap : yourFunction

第二种方式允许你从不同的Widget调用函数

【讨论】:

以上是关于添加 if 语句后,颤振 onTap 错误 onTap 停止工作的主要内容,如果未能解决你的问题,请参考以下文章

单击单击时如何禁用 onTap 功能。使用颤振

在列表视图多选中设置状态后,颤振布尔值重置

在颤振中添加if条件后,列表视图卡不起作用

错误:当我在颤振验证器之后运行应用程序时,颤振中出现意外的空值

通过 for 循环创建颤振抽屉

颤振未来构建器中的 if 语句仅接受 =