有没有办法为输入装饰前缀图标设置主题?

Posted

技术标签:

【中文标题】有没有办法为输入装饰前缀图标设置主题?【英文标题】:Is there a way to set a theme for the input decoration prefix icon? 【发布时间】:2020-05-05 11:24:25 【问题描述】:

我有一个带有前缀图标的输入字段,但我似乎无法弄清楚如何在未选择该字段时设置主题。这是未选中时的样子

如您所见,图标的颜色为深色,而边框应为浅色。当我选择该字段时,我得到了这个

哪个更好,因为现在我可以真正看到图标了。文档说

The size and color of the prefix icon is configured automatically using an [IconTheme] and therefore does not need to be explicitly given in the icon widget.

但是当我设置图标主题时

iconTheme: IconThemeData(color: _primaryColorLight),
primaryIconTheme: IconThemeData(color: _primaryColorLight),
accentIconTheme: IconThemeData(color: _primaryColorLight),

没有任何变化?

  Widget _buildNameField(BuildContext context) 
    final ThemeData theme = Theme.of(context);
    return TextFormField(
      onSaved: (String value) => _phoneNumber = value,
      keyboardType: TextInputType.text,
      style: theme.textTheme.body1,
      decoration: InputDecoration(
        prefixIcon: Icon(Icons.person),
        hintText: 'Name',
      ),
      validator: (String value) 
        if (value.isEmpty || value.length < 2) return 'Please enter a name with two letters or more';
      ,
    );
  

这是我的姓名字段。现在我当然可以给图标一个颜色。但我碰巧正在使用一个包,它有一个选择菜单,它也使用一个 TextFormField 并且也面临同样的问题。所以我当然可以分叉那个 repo 并改变那里的图标颜色。但这似乎需要付出很多努力,而且相当老套。

那么我该如何设置主题呢?

编辑

文档说 TextFormField 的前缀图标主题来自 IconTheme。

return IconTheme(
  data: theme.iconTheme,
  child: ListTileTheme(
    iconColor: theme.iconTheme.color,
    child: MaterialApp(
      home: TheRootPage(),
      theme: theme,
      debugShowCheckedModeBanner: false,
    ),
  ),
);

这适用于 ListTileTheme 但不适用于 IconTheme 为什么会这样?

【问题讨论】:

【参考方案1】:

答案是根据您的背景颜色将其添加到您的主题数据brightness: Brightness.dark,brightness: Brightness.light,

【讨论】:

我已经设置了亮度,但由于未知原因它仍然对我不起作用

以上是关于有没有办法为输入装饰前缀图标设置主题?的主要内容,如果未能解决你的问题,请参考以下文章

mac安装mysql后启动时,提示输入密码,但是只有密码图标,却没有办法键入密码,怎么解决?

如何将上传图标修复为文件上传输入(材料 UI)

Qt:有没有办法让工具栏图标适应系统主题?

C#以“a”与“an”开头[重复]

手机输入法不见了怎么办

有没有办法专门为三星设备设置和应用程序图标?