仅在启用 darkTheme 时将边框颜色应用于 TextField

Posted

技术标签:

【中文标题】仅在启用 darkTheme 时将边框颜色应用于 TextField【英文标题】:Applying borderSide color to TextField only when darkTheme is enabled 【发布时间】:2022-01-04 00:55:37 【问题描述】:

我想知道当启用darkTheme 时,是否有办法将特定颜色应用于TextField()enabledBorder。这是我的TextField()

TextField(
  obscureText: true,
  decoration: InputDecoration(
    border: OutlineInputBorder(),
    labelText: 'Password',
  ),
),

但是,在我的深色主题中使用以下代码将为每个启用的Border 应用边框颜色,出于显而易见的原因,我想避免这种情况:

inputDecorationTheme: InputDecorationTheme(
  enabledBorder: OutlineInputBorder(
  borderSide: BorderSide(color: Colors.grey[700]!)
  )
),

我也确实希望在使用常规主题时应用相同的颜色,所以我不能只将它应用到TextField()。我该怎么做才能解决这个问题?

【问题讨论】:

【参考方案1】:

您可以在 TextField 中检查主题是否为 darkTheme 并相应地赋予边框颜色。 首先我们得到当前的主题数据。将以下代码放在 build 中:

ThemeData themeData = Theme.of(context);

现在我们可以检查 Brightness 的值以确定是否启用了深色主题。如果启用深色主题,则亮度的值将是浅色。所以你的 TextField 将是:

TextField(
  obscureText: true,
  decoration: InputDecoration(
    enabledBorder: Theme.of(context).brightness == Brightness.light ? OutlineInputBorder(
        borderSide: BorderSide(color: Colors.grey[700]!)
    ) : InputBorder.none,
    labelText: 'Password',
  ),
),

【讨论】:

themeData 以这种方式未定义,我可以使用其他东西吗?另外,这不会使边框在浅色模式下透明吗? 那你是如何定义你的主题的? 我有一个 theme.dart 文件,代码如下:ThemeData themeDark(BuildContext context) return ThemeData.dark().copyWith( primaryColor: blueColor, [...] ), ); 我已经更新了我的答案,现在它不会在浅色主题上显示不可见的边框! 当然,没问题!【参考方案2】:

Suvash 的回答启发了我下面的代码:

TextField(
  obscureText: true,
  decoration: Theme.of(context).scaffoldBackgroundColor == bgColorDark
  ? InputDecoration(
    enabledBorder: OutlineInputBorder(
    borderSide: BorderSide(color: Colors.grey[700]!)
    ),
    border: OutlineInputBorder(),
    labelText: 'Password',
  )
  : InputDecoration(
    border: OutlineInputBorder(),
    labelText: 'Password',
  ),
),

请注意,bgColorDark 是在我的深色主题中使用的深色背景色。我知道这会造成一些代码重复,但我认为这更容易阅读。

【讨论】:

以上是关于仅在启用 darkTheme 时将边框颜色应用于 TextField的主要内容,如果未能解决你的问题,请参考以下文章

如何将渐变边框颜色应用于 UIButton?

以编程方式将渐变边框颜色应用于 UIButton

vba如何对选取区域设置边框线颜色,边框包括外部边框和内部的。

word边框+底纹

仅在顶部/底部/左侧/右侧启用悬停

如何仅在表格内应用边框?