如何正确覆盖TextStyle属性?Flutter TextStyle copyWith失效问题
问题原因
用GoogleFonts.roboto()生成的TextStyle,其fontFamily字段已经绑定了对应字重的字体文件名(比如w300对应Roboto-Light),普通的TextStyle.copyWith()仅修改fontWeight参数,但不会触发GoogleFonts加载对应字重的字体文件,导致视觉上没有变化。
解决方案
方案1:使用GoogleFonts的重载方法继承样式并修改字重
直接调用GoogleFonts.roboto(),通过textStyle参数传入原样式,同时指定新的fontWeight,这样会自动加载对应字重的字体:
Text( "myText", style: GoogleFonts.roboto(textStyle: myStyle, fontWeight: FontWeight.w400), ),
方案2:定义基础样式,按需指定字重
先提取无需修改的公共样式属性,再分别生成不同字重的样式,避免重复配置:
// 基础样式(不含fontWeight) final baseStyle = GoogleFonts.roboto( height: 1.2, color: Colors.black54, fontSize: 16, ); // 第一个TextWidget使用w300 Text( "Text with w300", style: GoogleFonts.roboto(textStyle: baseStyle, fontWeight: FontWeight.w300), ), // 第二个TextWidget使用w400 Text( "Text with w400", style: GoogleFonts.roboto(textStyle: baseStyle, fontWeight: FontWeight.w400), ),
内容的提问来源于stack exchange,提问作者pitcairn1987
相关产品推荐
相关产品推荐

