You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Flutter代码升级至最新版本?解决API变更报错问题

Flutter版本升级后的API适配方案

1. 修复ThemeData中的fontFamily和pageTransitionsTheme参数错误

原错误代码

theme: ThemeData(
  primarySwatch: Colors.purple,
  accentColor: Colors.deepOrange,
  fontFamily: 'Lato',
  pageTransitionsTheme: PageTransitionsTheme(
    builders: {
      TargetPlatform.android: CustomPageTransitionBuilder(),
      TargetPlatform.iOS: CustomPageTransitionBuilder(),
    },
  ),
),

修复后代码

// 配置ThemeData
theme: ThemeData(
  primarySwatch: Colors.purple,
  // 替代旧版accentColor
  colorScheme: ColorScheme.fromSwatch(
    primarySwatch: Colors.purple,
  ).copyWith(secondary: Colors.deepOrange),
  // 全局设置字体
  textTheme: ThemeData.light().textTheme.apply(fontFamily: 'Lato'),
),

// 将页面过渡主题移至MaterialApp层级配置
MaterialApp(
  ...
  pageTransitionsTheme: PageTransitionsTheme(
    builders: {
      TargetPlatform.android: CustomPageTransitionBuilder(),
      TargetPlatform.iOS: CustomPageTransitionBuilder(),
    },
  ),
  theme: ... // 上述修复后的ThemeData
)

变更说明

  • accentColor替代:旧版的accentColor已被ColorScheme.secondary取代,通过ColorScheme.fromSwatch().copyWith()完成设置。
  • fontFamily迁移:ThemeData不再直接支持fontFamily参数,使用textTheme.apply(fontFamily: 'Lato')可快速为所有文本样式统一应用字体;也可针对单个文本样式单独设置。
  • pageTransitionsTheme迁移:该参数已从ThemeData移至MaterialApp的直接参数中,需在MaterialApp层级配置。

2. 修复primaryTextTheme.title未定义错误

原错误代码

color: Theme.of(context).primaryTextTheme.title.color,

修复后代码

根据原title对应的文本场景选择对应新属性:

// 原title用于大标题场景
color: Theme.of(context).primaryTextTheme.titleLarge?.color,

// 原title用于中等标题场景
color: Theme.of(context).primaryTextTheme.titleMedium?.color,

变更说明

Flutter升级后对TextTheme属性做了语义化重命名,核心对应关系:

  • 旧版title → 新版titleLarge(大标题样式)
  • 旧版subtitle → 新版titleMedium(中等标题样式)
  • 旧版body1 → 新版bodyLarge
  • 旧版body2 → 新版bodyMedium
    同时需添加空安全运算符?.适配新版空安全特性。

内容的提问来源于stack exchange,提问作者lovecode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:54:34