【问题标题】:The argument type 'Function?' can't be assigned to the parameter type 'void Function()?参数类型“功能?”不能分配给参数类型'void Function()?
【发布时间】:2022-01-24 05:10:39
【问题描述】:

这是我的错误代码截图

这段代码是我的输入页面:

  child:  ReusableCard(
    onPress: (){
      setState(() {
        selectGender=Gender.male;
      });
    },
      cardChild: IconContent(icon: FontAwesomeIcons.mars,label: 'Male',),
      colour: selectGender==Gender.male? activeCardColor:inactivecolor,
    ),

另外这一页:onpress 功能不起作用。

class ReusableCard extends StatelessWidget {

  ReusableCard({@required this.colour,this.cardChild,this.onPress});
  final  Color? colour;
  final Widget? cardChild;
  final Function? onPress;
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: onPress,
      child: Container(
        child: cardChild,
        margin: EdgeInsets.all(15),
        decoration: BoxDecoration(
          color: colour,
          borderRadius: BorderRadius.circular(10.0),
        ),
      ),
    );
  }
}

我提供截图让您更好地理解

【问题讨论】:

标签: flutter dart


【解决方案1】:

因为小部件的onTap 被定义为void Function()? onTap,所以需要返回值才能使用(作为回调)。所以使用:

onTap: ()=> onPress,

你也可以将onPress定义为VoidCallback?,那么你只需要:

onTap: onPress,

【讨论】:

    【解决方案2】:
    class ReusableCard extends StatelessWidget {
    
      ReusableCard({@required this.colour,this.cardChild,this.onPress});
      final  Color? colour;
      final Widget? cardChild;
      final Function? onPress;
      @override
      Widget build(BuildContext context) {
        return GestureDetector(
          onTap: onPress, // the problem is here 
          child: Container(
            child: cardChild,
            margin: EdgeInsets.all(15),
            decoration: BoxDecoration(
              color: colour,
              borderRadius: BorderRadius.circular(10.0),
            ),
          ),
        );
      }
    }
    

    把这个改成那个:

    class ReusableCard extends StatelessWidget {
    
      ReusableCard({@required this.colour,this.cardChild,this.onPress});
      final  Color? colour;
      final Widget? cardChild;
      final Function? onPress;
      @override
      Widget build(BuildContext context) {
        return GestureDetector(
          onTap:(){
    
             --add your on press code here 
    
    },
          child: Container(
            child: cardChild,
            margin: EdgeInsets.all(15),
            decoration: BoxDecoration(
              color: colour,
              borderRadius: BorderRadius.circular(10.0),
            ),
          ),
        );
      }
    }
    

    【讨论】:

      【解决方案3】:

      只需像下面这样替换。

      来自

      onTap: onPress,
      

      onTap: () => onPress,
      
      class ReusableCard extends StatelessWidget {
      
        ReusableCard({@required this.colour,this.cardChild,this.onPress});
        final  Color? colour;
        final Widget? cardChild;
        final Function? onPress;
        @override
        Widget build(BuildContext context) {
          return GestureDetector(
            onTap: () => onPress,
            child: Container(
              child: cardChild,
              margin: EdgeInsets.all(15),
              decoration: BoxDecoration(
                color: colour,
                borderRadius: BorderRadius.circular(10.0),
              ),
            ),
          );
        }
      }
      

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,这就是我解决它的方法:

        代替

        final Function? onPress;
        

        使用这个:

        final VoidCallback? onPress;
        

        【讨论】:

          猜你喜欢
          • 2021-09-25
          • 1970-01-01
          • 2023-04-05
          • 1970-01-01
          • 2022-01-17
          • 2021-08-11
          • 1970-01-01
          • 1970-01-01
          • 2021-10-22
          相关资源
          最近更新 更多