Есть ли способ установить тему для значка префикса оформления ввода? - PullRequest
3 голосов
/ 05 мая 2020

У меня есть поле ввода с префиксом Icon, но я не могу понять, как установить тему, когда поле не выбрано. Вот как это выглядит, когда он не выбран

enter image description here

Как вы можете видеть, значок имеет темный цвет, в то время как он должен иметь светлый цвет, как граница есть. Когда я выбираю поле, я получаю это

enter image description here

Что намного лучше, потому что теперь я действительно вижу значок. В документации написано

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 и также сталкивается с той же проблемой. Так что я мог бы, конечно, форкнуть это репо и изменить там цвет значка. Но это кажется трудоемким и довольно хакерским.

Так как я могу установить это с помощью темы?

Edit

В документации говорится, что тема значка префикса TextFormField происходит от IconTheme.

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

Это работает для ListTileTheme, но не для IconTheme, почему это?

1 Ответ

3 голосов
/ 08 мая 2020

Ответ - добавить это к данным вашей темы brightness: Brightness.dark, и brightness: Brightness.light, в зависимости от цвета фона.

...