Home > Enterprise >  The argument type 'Function?' can't be assigned to the parameter type 'void Func
The argument type 'Function?' can't be assigned to the parameter type 'void Func

Time:12-23

this is the screenshot of my error code

this code my inputpage:

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

and this one other page:onpress function does not work.

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

i provide screesshoot for your better understand

CodePudding user response:

Because the widget's onTap is defined as a void Function()? onTap, the value needs to be returned to be used (as a callback). So use:

onTap: ()=> onPress,

You can also define the onPress as a VoidCallback?, then you just need to:

onTap: onPress,

CodePudding user response:

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

Change this to That:

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

CodePudding user response:

Just replace like below.

From

onTap: onPress,

To

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