Flutter TextFormField validator参数类型不匹配报错问题问询
问题解决方法
这个报错是Flutter 2.0+空安全规则导致的类型不匹配问题:
- TextFormField的
validator参数要求接收的函数类型为String? Function(String?)?:入参是可空字符串,返回值也是可空字符串(验证通过返回null,失败返回错误提示文本) - 你当前定义的
validateFirstName函数是String Function(String)类型,入参和返回值都是非空,同时onSaved回调定义的入参是非空字符串,和框架要求的可空类型不匹配,所以触发报错。
第一步:修改验证函数签名
找到你的StudentValidationMixin里的validateFirstName方法,调整参数和返回值为可空类型,验证通过时返回null:
mixin StudentValidationMixin { // 调整入参为String?,返回值为String? String? validateFirstName(String? value) { // 先判空再做校验逻辑 if (value == null || value.trim().isEmpty) { return "学生姓名不能为空"; } if (value.length < 2) { return "姓名长度不能少于2位"; } // 验证通过必须返回null return null; } }
第二步:修改onSaved回调的参数类型
调整onSaved的入参为可空类型,赋值时可以结合validator的验证逻辑使用非空断言(因为只有表单验证通过才会触发onSaved,此时value必然非空):
TextFormField( decoration: InputDecoration( labelText: "Öğrencinin Adı", hintText: "Musa Develi"), validator: validateFirstName, // 入参改为String? onSaved: (String? value){ // 验证通过后value一定非空,用!断言即可,也可以用value ?? "" 设置兜底空字符串 student.firstName = value!; }, )
提示:如果你的Student类里的firstName字段定义为可空类型,赋值时可以省略非空断言!。
内容的提问来源于stack exchange,提问作者Gankplank
相关产品推荐
相关产品推荐

