参数类型 'void Function(String?)?' 无法分配给参数类型 'String?函数(字符串?)?在颤动中

The argument type 'void Function(String?)?' can't be assigned to the parameter type 'String? Function(String?)? in Flutter

代码:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class CustomTextFormField extends StatelessWidget {
  final String hintText;
  final Color color;
  final Color fillColor;
  final void Function(String?)? onSave;
  final void Function(String?)? validator;

  const CustomTextFormField({
     this.hintText = "",
     this.color = Colors.black,
     this.fillColor = Colors.grey,
     this.onSave ,
     this.validator,
  });

  @override
  Widget build(BuildContext context) {
    return Container(
      child: TextFormField(
        onSaved: onSave,
        validator: validator,
        decoration: InputDecoration(
          hintText: hintText,
          hintStyle: TextStyle(
            color: color,
          ),
          fillColor: fillColor,
        ),
      ),
    );
  }
}

问题: 参数类型 'void Function(String?)?' 无法分配给参数类型 'String? Function(String?)?'

问:为什么下面这个点出现错误: 验证者:验证者

Validator 是一种类型

typedef FormFieldValidator<in T> = String? Function(T? value)

所以对于验证器,你需要使用

final FormFieldValidator<String>? validator;

完整代码:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class CustomTextFormField extends StatelessWidget {
  final String hintText;
  final Color color;
  final Color fillColor;
  final void Function(String?)? onSave;
  final FormFieldValidator<String>? validator;

  const CustomTextFormField({
     this.hintText = "",
     this.color = Colors.black,
     this.fillColor = Colors.grey,
     this.onSave ,
     this.validator,
  });

  @override
  Widget build(BuildContext context) {
    return Container(
      child: TextFormField(
        onSaved: onSave,
        validator: validator,
        decoration: InputDecoration(
          hintText: hintText,
          hintStyle: TextStyle(
            color: color,
          ),
          fillColor: fillColor,
        ),
      ),
    );
  }
}