Flutter - 如何更改 TextField 提示颜色?

Posted

技术标签:

【中文标题】Flutter - 如何更改 TextField 提示颜色?【英文标题】:Flutter - How to change TextField hint color? 【发布时间】:2019-05-09 18:50:23 【问题描述】:

我有点困惑如何更改文本字段的提示颜色。有人可以指导我怎么做。谢谢

child: TextField(
   style: TextStyle(fontSize: 20),
   decoration: InputDecoration(
                  hintText: "Password",
                  border: new OutlineInputBorder(
                            borderSide: new BorderSide(
                              color: Colors.teal,
                            ),
                          ),
                   prefixIcon: const Icon(
                            Icons.security,
                            color: Colors.white,
                          ),
                ),
   ),

【问题讨论】:

【参考方案1】:

您可以使用hintStyle: 在InputDecoration

TextField(
        style: TextStyle(fontSize: 20),
        decoration: InputDecoration(
          hintText: "Password",
          hintStyle: TextStyle(fontSize: 20.0, color: Colors.redAccent),
          border: OutlineInputBorder(
            borderSide: BorderSide(
              color: Colors.teal,
            ),
          ),
          prefixIcon: const Icon(
            Icons.security,
            color: Colors.white,
          ),
        ),
      ),

【讨论】:

输入聚焦的时候呢?将提示文本颜色更改为其他颜色? @VincentJ.Michuki 请参阅下面的答案。【参考方案2】:

作为已接受答案的补充,要更新重点提示装饰,您必须更新应用程序的主题。

@override
  Widget build(BuildContext context) 
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
          primaryColor: Colors.white,
          inputDecorationTheme: const InputDecorationTheme(
            labelStyle: TextStyle(color: Colors.black),
            hintStyle: TextStyle(color: Colors.grey),
          )),
      home: MainScreen(),
    );
  

【讨论】:

另一种方法,可以使用像这样的焦点节点hintStyle: TextStyle(color: focusNode.hasFocus ? Color(0xff7FBBCA) : Colors.black45)【参考方案3】:

在挖掘了用于确定标签颜色的 InputDecorator 的源代码后,这是我发现的。

TextStyle _getFloatingLabelStyle(ThemeData themeData) 
  final Color color = decoration.errorText != null
    ? decoration.errorStyle?.color ?? themeData.errorColor
    : _getActiveColor(themeData);
  final TextStyle style = themeData.textTheme.subtitle1.merge(widget.baseStyle);
  return style
    .copyWith(color: decoration.enabled ? color : themeData.disabledColor)
    .merge(decoration.labelStyle);


Color _getActiveColor(ThemeData themeData) 
  if (isFocused) 
    switch (themeData.brightness) 
      case Brightness.dark:
        return themeData.accentColor;
      case Brightness.light:
        return themeData.primaryColor;
    
  
  return themeData.hintColor;

简而言之,要更改提示颜色,请使用 Theme 和 ThemeData 设置 hintColor。

另一个提示:要更改标签颜色,请设置primaryColor浅色主题,或为深色主题设置accentColor。

ThemeData.dark().copyWith(
  primaryColor: Colors.red,
  accentColor: Colors.white,
  hintColor: Colors.pink,
)

【讨论】:

【参考方案4】:

同时更改提示样式和标签样式

TextFormField(
              decoration: InputDecoration(
                hintText: 'username@mail.com',
                labelText: 'Email',
               hintStyle: TextStyle(color: Colors.white), # change to your color
                labelStyle: TextStyle(color: Colors.white), # change color
             ))

【讨论】:

【参考方案5】:
TextField(
   decoration: InputDecoration(
   hintText: 'your hint',
   hintStyle: Theme.of(context).textTheme.caption.copyWith(
   fontSize: 20,
   fontWeight: FontWeight.w600,
   color: ColorConstants.kTextColor,  <--- // Set Your Own Color
   ),

【讨论】:

另外,您可以查看此页面以获取更多示例。 medium.com/flutter-community/…【参考方案6】:

如果你想改变应用中所有TextField Widget的hintColor,你可以在Theme中应用。

示例代码:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData.light().copyWith(
        hintColor: Colors.orange,
      ),
      home: Scaffold(
        body: Column(children: [
          TextField(
            decoration: InputDecoration(
              hintText: "Email",
            ),
          ),
          TextField(
            decoration: InputDecoration(
              hintText: "Password",
            ),
          ),
        ]),
      ),
    );
  

【讨论】:

以上是关于Flutter - 如何更改 TextField 提示颜色?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter中如何同步两个TextField

在 Flutter 中保留方向更改时的 TextField 值

如何在 Flutter 的 TextField 中禁用预测文本?

Flutter ListView 项目根据 TextField 中添加的数字进行更改

在 TextInputType 更改后控制器重置的 Flutter TextField

如何在 Flutter 中使用参数更改英雄动画的持续时间