升级Flutter后TextFormField输入触发Stack Overflow异常如何解决
异常原因
该升级后触发的输入栈溢出问题,属于Flutter版本迭代后第三方依赖适配不兼容引发的递归死循环,常见触发点有两个:
- 自适应单位计算逻辑异常:你代码中使用了
.h结尾的自适应单位(对应flutter_screenutil等适配插件),Flutter 3.10+版本重构了组件重绘机制,旧版本适配插件在TextFormField输入触发局部重绘时,会重复执行单位计算逻辑引发递归,最终栈溢出。 - 国际化调用逻辑异常:代码中*
getTranslated国际化方法*直接在TextFormField的属性中实时调用,若你的国际化实现依赖上下文递归查找资源,重绘时重复调用会引发死循环。
修复方案
- 优先测试自适应插件问题:将代码中
8.0.h、2.0.h替换为固定像素值,若替换后输入不再报错,直接将flutter_screenutil升级到最新稳定版即可,后续也可以把自适应单位计算提前放到initState中用final变量缓存,减少build时的重复计算。 - 若替换单位后仍报错,修改国际化调用逻辑:把
getTranslated(context, 'clientName')这类调用提前在State的initState中赋值给final字符串变量,TextFormField的属性直接引用缓存好的字符串变量,避免每次重绘都触发国际化资源查找。 - 若以上两步都未解决,确认你的Flutter SDK版本和插件版本匹配:当前你使用的Flutter插件50.0.1对应Flutter 3.10+版本,要求Dart SDK版本≥3.0,版本不匹配的话重新安装对应版本的Flutter、Dart插件即可。
内容的提问来源于stack exchange,提问作者Helper
相关产品推荐
相关产品推荐

