为何无法在Flutter代码中使用primarySwatch设置Text组件样式?
解决Flutter中Text组件无法使用primarySwatch设置样式的问题
你直接把Theme.of(context).primarySwatch赋值给Text的style属性是不行的,因为**primarySwatch是MaterialColor类型**,而Text组件的style需要的是TextStyle类型,两者类型不匹配,所以样式不会生效。
解决方法
有几种方式可以实现你想要的效果:
方法1:使用primarySwatch的具体色调设置文字颜色
通过primarySwatch的色调(比如.shade500,这是该色系的默认主色调)来构建TextStyle:
title: Text( transactions[index].title, style: TextStyle(color: Theme.of(context).primarySwatch.shade500), ),
方法2:直接使用主题的primaryColor
primarySwatch会自动生成对应的primaryColor,你可以直接调用:
title: Text( transactions[index].title, style: TextStyle(color: Theme.of(context).primaryColor), ),
方法3:复用你定义的textTheme样式
你已经在主题里定义了titleMedium样式,也可以直接复用:
title: Text( transactions[index].title, style: Theme.of(context).textTheme.titleMedium, ),
修改后的完整ListView代码示例
ListView.builder( itemCount: transactions.length, itemBuilder: (context, index) { return ListTile( leading: CircleAvatar( radius: 30, child: Container( padding: EdgeInsets.all(10), child: FittedBox(child: Text('\$${transactions[index].amount}'))), ), // 这里用方法1的示例,你可以根据需求替换成其他方法 title: Text( transactions[index].title, style: TextStyle(color: Theme.of(context).primarySwatch.shade500), ), ); }, )
内容的提问来源于stack exchange,提问作者LeThanhDat
相关产品推荐
相关产品推荐

