Function函数作为参数

172 阅读1分钟

常见错误:The argument type 'Function' can't be assigned to the parameter type 'void Function()?'.

int num1 = 1EmojiItem(
  name: item.name,
  unicode: item.unicode,
  onEmojiClick:(){
   print('打印');//
  },
);

class EmojiItem extends StatelessWidget {
  EmojiItem({this.name='', this.unicode=0,this.onEmojiClick});
  String? name;
  int? unicode;
  Function()? onEmojiClick;//Function? btnClick;很容易写成这样
  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: (){
        if (onEmojiClick != null) {
          onEmojiClick!();//执行打印
        }
      },
      child: Container(
        child: Text(
          String.fromCharCode(unicode!),
          style: TextStyle(
            fontSize: 26,
          ),
        ),
      ),
    );
  }
}

函数回调方法1

Widget butttonRow(String tit, num1){
  return InkWell(
    onTap: ()=> addButtonClick(num1),
    child: Text('$tit'),
  );
}

addButtonClick(int type){
  print(type);
}
@override
Widget build(BuildContext context) {
  return Column(
    children: [
      butttonRow(
        "入口",
        0,
      ),
    ],);
}

函数回调方法2

Widget butttonRow(String tit,VoidCallback bnClick){
  return InkWell(
    onTap: bnClick,
    child: Text('$tit'),
  );
}

addButtonClick(){
  print('----------');
}

@override
Widget build(BuildContext context) {
  return Column(
    children: [
      SizedBox(height: 100,),
      butttonRow(
        "入口",
        (){
         print("回调执行了");
        },
      ),
    ],);
}