Flutter如何类似全局定义TextStyle一样全局定义ButtonStyle?
报错原因
TextButton.styleFrom() 非常量构造函数,返回值无法被 const 修饰,而 TextStyle 自带 const 构造,所以之前的写法可以生效。
解决方案
方案1:用 static final 定义(推荐,写法简单,使用体验和原有 TextStyle 完全一致)
直接把 const 替换为 final 定义全局 ButtonStyle 即可,不需要修改调用逻辑:
abstract class ThemeButton { static final ButtonStyle primaryTextButton = TextButton.styleFrom( primary: Colors.white, backgroundColor: Colors.green[900], textStyle: const TextStyle(fontSize: 18, fontStyle: FontStyle.italic), ); }
调用方式和你之前用全局 TextStyle 完全一致:
TextButton( onPressed: () {}, style: ThemeButton.primaryTextButton, child: const Text("Test!"), )
方案2:用 const ButtonStyle 构造定义(追求极致性能可选)
如果需要常量定义优化性能,可以直接使用 ButtonStyle 的 const 构造,注意颜色不能用 Colors.green[900] 这种非const的下标取值,要换成对应的常量色值:
abstract class ThemeButton { static const ButtonStyle primaryTextButton = ButtonStyle( foregroundColor: MaterialStatePropertyAll(Colors.white), // 0xFF1B5E20 对应 Colors.green[900] 的色值 backgroundColor: MaterialStatePropertyAll(Color(0xFF1B5E20)), textStyle: MaterialStatePropertyAll(TextStyle(fontSize: 18, fontStyle: FontStyle.italic)), ); }
调用方式和方案1完全相同。
内容的提问来源于stack exchange,提问作者Gauerdia
相关产品推荐
相关产品推荐

