Flutter自定义可复用TextFormField报StatelessWidget无法赋值IconData错误
问题原因
- 你自定义组件里定义的
icon参数是Icon类型(本身就属于Widget),但代码中你又把它传给了Icon()组件的第一个入参,而Icon()构造的第一个参数要求是IconData类型(比如Icons.home这种图标枚举值),类型不匹配直接触发报错。 - 你写的三元判断
icon == null ? Container() : icon返回值类型不统一,再嵌套进Icon()组件完全不符合参数要求。
解决方法
提供两种可选方案,可根据自己的需求选择:
方案一:最小修改直接运行
InputDecoration的prefixIcon本身就支持接收Widget类型参数,你传入的icon本身就是可直接使用的Icon组件,不需要额外套一层Icon(),直接修改prefixIcon配置即可:
// 把原来的prefixIcon代码 prefixIcon: Icon( icon == null ? Container() : icon, //color: Colors.blue, ), // 替换为下面的代码即可 prefixIcon: icon,
修改后如果icon传空,前缀会自动留空不需要额外加占位Container。
方案二:调整参数类型,方便全局统一样式
如果后续需要统一控制所有输入框的图标大小、颜色等样式,建议把参数类型改成IconData:
- 把组件参数定义
final Icon icon;修改为final IconData? iconData; - 构造函数里的
this.icon同步改为this.iconData prefixIcon修改为如下代码:
prefixIcon: iconData == null ? null : Icon( iconData, // 此处可以全局统一定义图标样式 color: Colors.blue, size: 20, ),
使用组件时直接传入图标枚举即可,比如:
Textformfield(iconData: Icons.person, hinttext: "请输入用户名")
修正后完整可运行代码(方案一)
import 'package:flutter/material.dart'; class Textformfield extends StatelessWidget { final String? hinttext; final double? font; final Color? fontcolor; final Icon? icon; final FontWeight? fontweight; final TextEditingController? controller; const Textformfield({ Key? key, this.hinttext, this.font, this.icon, this.fontcolor, this.fontweight, this.controller }) : super(key: key); @override Widget build(BuildContext context) { return TextFormField( controller: controller, keyboardType: TextInputType.text, decoration: InputDecoration( hintText:hinttext, isDense: true, contentPadding: const EdgeInsets.fromLTRB(10, 10, 10, 0), prefixIcon: icon, hintStyle: const TextStyle( fontStyle: FontStyle.normal, fontSize: 16, color: Colors.grey, ), enabledBorder: OutlineInputBorder( borderRadius: const BorderRadius.all(Radius.circular(12)), borderSide: const BorderSide( color: Colors.black, width: 2,), ), focusedBorder: OutlineInputBorder( borderRadius: const BorderRadius.all(Radius.circular(12)), borderSide: const BorderSide( color: Colors.black, width: 2), ), )); } }
内容的提问来源于stack exchange,提问作者TimeToCode
相关产品推荐
相关产品推荐

