如何将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
相关产品推荐
相关产品推荐

