升级Flutter至2.5.0后出现TextTheme无title、MediaQuery无nullOk报错如何解决
问题根因
你列出的几个过时传递依赖和本次报错完全无关,报错的根源是你项目依赖的flutter_widgets:0.1.12包停止维护多年,未适配Flutter 2.5版本的两处API破坏性变更:
- Flutter 2.2及以上版本移除了
MediaQuery.of方法的nullOk参数,替换为独立的MediaQuery.maybeOf方法 - Flutter 2.0及以上版本彻底移除了
TextTheme类中废弃的title、subhead属性,对应替换为headline6、subtitle1
可选解决方案
方案1:替换依赖(最推荐)
flutter_widgets包已有3年以上未更新,完全不兼容新版Flutter,建议查找对应功能的维护中替代包,替换原有依赖后执行flutter clean重新编译即可。
方案2:本地覆盖修复(过渡使用)
如果暂时不想调整业务逻辑替换依赖,可以通过pub的依赖覆盖规则临时修复问题:
- 在项目根目录新建
local_packages/flutter_widgets文件夹,将pub缓存中报错的flutter_widgets-0.1.12版本源码整体复制到该路径 - 修改两处报错源码:
- 打开
lib/src/tagged_text/tagged_text.dart第295行,将MediaQuery.of(context, nullOk: true)修改为MediaQuery.maybeOf(context) - 打开
lib/src/feature_discovery/src/overlay_widgets.dart,将第239行的theme.title改为theme.headline6,第248行的theme.subhead改为theme.subtitle1
- 打开
- 在项目
pubspec.yaml中添加依赖覆盖配置:
dependency_overrides: flutter_widgets: path: ./local_packages/flutter_widgets
- 执行
flutter clean后重新运行项目即可。
方案3:降级Flutter版本(不推荐)
如果不需要使用新版Flutter特性,可将本地Flutter版本回退到开发时的1.x版本,无需修改代码即可正常运行,仅适合短期临时使用。
内容的提问来源于stack exchange,提问作者kinggg
相关产品推荐
相关产品推荐

