Flutter 3.24.2中pin_code_fields包因TextTheme.button移除致构建失败的解决问询
已知修复情况
目前pin_code_fields官方最新版本(包括7.4.0)仍未适配Flutter 3.24的变更——TextTheme.button已被正式移除,包维护者暂未发布修复版本。
安全手动修改方案(避免权限问题&持久化)
直接修改.pub-cache里的文件会遇到权限问题,且更新包后修改会丢失,推荐以下两种持久化方案:
方案1:用 dependency_overrides + Patch 修复(推荐)
- 在项目根目录新建
patches文件夹,创建pin_code_fields_fix_texttheme.patch文件,写入以下内容:
diff --git a/lib/src/pin_code_fields.dart b/lib/src/pin_code_fields.dart --- a/lib/src/pin_code_fields.dart +++ b/lib/src/pin_code_fields.dart @@ -668,7 +668,7 @@ class PinCodeTextField extends StatefulWidget { ), style: TextStyle( fontSize: widget.textStyle?.fontSize ?? 20, - color: Theme.of(context).textTheme.button!.color, + color: Theme.of(context).textTheme.labelLarge?.color ?? Theme.of(context).colorScheme.onPrimary, fontWeight: widget.textStyle?.fontWeight ?? FontWeight.w500, ), ),
(如果报错行号不是668,直接定位到报错的代码行替换即可,labelLarge是Flutter官方指定的button替代属性,符合Material 3设计规范)
- 在
pubspec.yaml中添加依赖覆盖和补丁配置:
dependency_overrides: pin_code_fields: hosted: https://pub.dev version: 7.4.0 patch: - path: patches/pin_code_fields_fix_texttheme.patch
- 执行
flutter pub get,补丁会自动应用到包中。
方案2:本地依赖修改包源码
- 从pub.dev下载pin_code_fields 7.4.0的源码,解压到项目内的
packages文件夹(比如./packages/pin_code_fields) - 打开
./packages/pin_code_fields/lib/src/pin_code_fields.dart,找到报错的代码行:
将color: Theme.of(context).textTheme.button!.color,替换为color: Theme.of(context).textTheme.labelLarge?.color ?? Theme.of(context).colorScheme.onPrimary, - 修改
pubspec.yaml中的依赖为本地路径:
dependencies: pin_code_fields: path: ./packages/pin_code_fields
- 执行
flutter pub get完成配置。
替代方案
如果不想修改第三方包,可以选择维护更活跃的替代PIN码输入组件:
pin_code_text_field:适配最新Flutter版本,支持Material 3样式flutter_pin_code_fields:轻量简洁,更新及时
内容的提问来源于stack exchange,提问作者Anoch Dissanayake
相关产品推荐
相关产品推荐

