首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得原色的文本颜色(onPrimary)?

如何获得原色的文本颜色(onPrimary)?
EN

Stack Overflow用户
提问于 2020-03-25 16:11:25
回答 1查看 1.6K关注 0票数 1

我的主题是这样的:

代码语言:javascript
复制
theme: ThemeData(
  primaryColor: themeModel.primaryColor,
  ...
),

是的,是动态的。

问题是:如果用户设置,比方说,indigo[100],一些项目(如bottomAppBar)在该浅色上有亮图标(能见度很差)。

我认为项目调整他们的文本颜色与给定的颜色属性,但它似乎不是那样的工作。

所以,我必须手动设置那个属性。但是我找不到主颜色上文本颜色的Theme属性(在材料文档中名为onPrimary )。

我发现的是Theme.of(context).colorScheme.onPrimary,但似乎不太好用。它总是返回相同的颜色。

我知道我可以得到原色的对比颜色,并将其设置如下:

代码语言:javascript
复制
theme: ThemeData.from(
  colorScheme: ColorScheme(
    primary: themeModel.primaryColor
    onPrimary: themeModel.onPrimaryColor
    ...
  )
)

但我敢肯定,如果你不通过这些属性,扑扑就会自动生成它们.难到不是么?

我发现的另一件事是Theme.of(context).primaryIconTheme.color那个属性正在返回我正在寻找的颜色。,但是当它的名称声明时,它应该只应用于图标,而不是文本,即使它们可能会返回相同的黑色变体。

我想知道的是

,这是它应该工作的方式吗?,我应该给自己写onPrimary属性吗?代码质量可以用primaryIconTheme.color作为文本颜色吗?还是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-26 08:08:45

默认的ThemeData是ThemeData.light(),primaryColor和accentColor设置为Colors.blue,Card和Scaffold背景设置为Colors.white。有三种类型的textTheme:

  1. textTheme -文本的颜色与卡片和帆布颜色形成对比。基本上,主题自动用于所有文本小部件,它是Scaffold或Card的直接子部件。(在这种情况下,用Colors.white)
  2. primaryTextTheme来对比Colors.black --一个与主颜色形成对比的文本主题。自动用于所有TextWidget,它是使用primaryColor的小部件的直接子级,例如AppBar。(对比Colors.blue)
  3. accentTextTheme的Colors.white--一个与重音颜色形成对比的文本主题。自动用于所有TextWidget,它是使用accentColor的小部件的直接子级,例如FloatingActionButton。(Colors.white to对比度Colors.blue)

如果将primaryColor更改为Colors.white,则primaryTextTheme.color不会自动更改值以形成对比。

代码语言:javascript
复制
ThemeData(
  primaryColor: Colors.white,
  primaryTextTheme: Theme.of(context).primaryTextTheme.apply(
    bodyColor: Colors.black,
    displayColor: Colors.black,
  )
)

希望这对你有任何帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60852766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档