125 votes

Impossible de modifier la couleur de la bordure des champs de texte

J'essaie de changer la couleur de la bordure de mon site Web. TextField en utilisant un BorderSide mais cela ne fonctionne pas.

Voici mon code ci-dessous.

new TextField(
        decoration: new InputDecoration(
            border: new OutlineInputBorder(
              borderSide: new BorderSide(color: Colors.teal)
            ),
            hintText: 'Tell us about yourself',
            helperText: 'Keep it short, this is just a demo.',
            labelText: 'Life story',
            prefixIcon: const Icon(Icons.person, color: Colors.green,),
            prefixText: ' ',
            suffixText: 'USD',
            suffixStyle: const TextStyle(color: Colors.green)),
       )
)

Une capture d'écran du résultat est présentée ci-dessous.

Screenshot

148voto

JannieT Points 2160

La nouvelle façon de procéder consiste à utiliser enabledBorder comme ça :

new TextField(
  decoration: new InputDecoration(
    enabledBorder: const OutlineInputBorder(
      borderSide: const BorderSide(color: Colors.grey, width: 0.0),
    ),
    focusedBorder: ...
    border: ...
  ),
)

127voto

Napolean Points 383

Cela ne change pas en raison du thème par défaut défini pour l'écran.

Il suffit donc de les modifier pour le widget que vous dessinez en enveloppant votre champ textuel dans le code suivant nouvelle ThemeData()

child: new Theme(
          data: new ThemeData(
            primaryColor: Colors.redAccent,
            primaryColorDark: Colors.red,
          ),
          child: new TextField(
            decoration: new InputDecoration(
                border: new OutlineInputBorder(
                    borderSide: new BorderSide(color: Colors.teal)),
                hintText: 'Tell us about yourself',
                helperText: 'Keep it short, this is just a demo.',
                labelText: 'Life story',
                prefixIcon: const Icon(
                  Icons.person,
                  color: Colors.green,
                ),
                prefixText: ' ',
                suffixText: 'USD',
                suffixStyle: const TextStyle(color: Colors.green)),
          ),
        ));

enter image description here

104voto

Syangden DT Points 231

Je ne sais vraiment pas pourquoi la couleur attribuée à la bordure ne fonctionne pas. Mais vous pouvez contrôler la couleur de la bordure en utilisant d'autres propriétés de la bordure du champ de texte. Il s'agit de :

  1. disabledBorder : Est activé lorsque l'option enabled a la valeur false
  2. enabledBorder : Est activée lorsque enabled vaut true (par défaut, la propriété enabled de TextField vaut true).
  3. errorBorder : Est activé lorsqu'il y a une erreur (par exemple, un échec de validation).
  4. focusedBorder : Est activé lorsque l'on clique sur le champ de texte ou que l'on met l'accent sur celui-ci.
  5. focusedErrorBorder : Est activé lorsqu'il y a une erreur et que nous sommes actuellement concentrés sur ce champ de texte.

Un extrait de code est donné ci-dessous :

TextField(
 enabled: false, // to trigger disabledBorder
 decoration: InputDecoration(
   filled: true,
   fillColor: Color(0xFFF2F2F2),
   focusedBorder: OutlineInputBorder(
     borderRadius: BorderRadius.all(Radius.circular(4)),
     borderSide: BorderSide(width: 1,color: Colors.red),
   ),
   disabledBorder: OutlineInputBorder(
     borderRadius: BorderRadius.all(Radius.circular(4)),
     borderSide: BorderSide(width: 1,color: Colors.orange),
   ),
   enabledBorder: OutlineInputBorder(
     borderRadius: BorderRadius.all(Radius.circular(4)),
     borderSide: BorderSide(width: 1,color: Colors.green),
   ),
   border: OutlineInputBorder(
     borderRadius: BorderRadius.all(Radius.circular(4)),
     borderSide: BorderSide(width: 1,)
   ),
   errorBorder: OutlineInputBorder(
     borderRadius: BorderRadius.all(Radius.circular(4)),
     borderSide: BorderSide(width: 1,color: Colors.black)
   ),
   focusedErrorBorder: OutlineInputBorder(
     borderRadius: BorderRadius.all(Radius.circular(4)),
     borderSide: BorderSide(width: 1,color: Colors.yellowAccent)
   ),
   hintText: "HintText",
   hintStyle: TextStyle(fontSize: 16,color: Color(0xFFB3B1B1)),
   errorText: snapshot.error,
 ),
 controller: _passwordController,
 onChanged: _authenticationFormBloc.onPasswordChanged,
                            obscureText: false,
),

disabledBorder :

disabledBorder


enabledBorder :

enabledBorder

focusedBorder :

focusedBorder

errorBorder :

errorBorder

errorFocusedBorder :

errorFocusedBorder

J'espère que cela vous aidera.

15voto

rafaelcb21 Points 1545

Le code dans lequel vous modifiez la couleur de l'icône primaryColor et primaryColorDark ne change pas la couleur initiale de la bordure, seulement après avoir tapé la couleur reste noire.

L'attribut qui doit être modifié est hintColor

BorderSide ne doit pas être utilisé pour cela, vous devez changer de thème.

Pour que la couleur rouge soit la couleur par défaut pour mettre le thème en MaterialApp(theme: ...) et pour modifier le thème d'un widget spécifique, par exemple en remplaçant la couleur rouge par défaut par la couleur jaune du widget, entoure le widget :

new Theme(
  data: new ThemeData(
    hintColor: Colors.yellow
  ),
  child: ...
)

Vous trouverez ci-dessous le code et le gif :

Notez que si nous définissons le primaryColor couleur noire, en tapant sur le widget, il est sélectionné avec la couleur noire.

Mais pour modifier l'étiquette et le texte à l'intérieur du widget, nous devons définir le thème comme suit InputDecorationTheme

Le widget qui commence par la couleur jaune a son propre thème et le widget qui commence par la couleur rouge a le thème par défaut défini avec la fonction buildTheme()

enter image description here

import 'package:flutter/material.dart';

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

ThemeData buildTheme() {
  final ThemeData base = ThemeData();
  return base.copyWith(
    hintColor: Colors.red,
    primaryColor: Colors.black,
    inputDecorationTheme: InputDecorationTheme(
      hintStyle: TextStyle(
        color: Colors.blue,
      ),
      labelStyle: TextStyle(
        color: Colors.green,
      ),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      theme: buildTheme(),
      home: new HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => new _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String xp = '0';

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(),
      body: new Container(
        padding: new EdgeInsets.only(top: 16.0),
        child: new ListView(
          children: <Widget>[
            new InkWell(
              onTap: () {},
              child: new Theme(
                data: new ThemeData(
                  hintColor: Colors.yellow
                ),
                child: new TextField(
                  decoration: new InputDecoration(
                      border: new OutlineInputBorder(),
                      hintText: 'Tell us about yourself',
                      helperText: 'Keep it short, this is just a demo.',
                      labelText: 'Life story',
                      prefixIcon: const Icon(Icons.person, color: Colors.green,),
                      prefixText: ' ',
                      suffixText: 'USD',
                      suffixStyle: const TextStyle(color: Colors.green)),
                )
              )
            ),
            new InkWell(
              onTap: () {},                
              child: new TextField(
                decoration: new InputDecoration(
                    border: new OutlineInputBorder(
                      borderSide: new BorderSide(color: Colors.teal)
                    ),
                    hintText: 'Tell us about yourself',
                    helperText: 'Keep it short, this is just a demo.',
                    labelText: 'Life story',
                    prefixIcon: const Icon(Icons.person, color: Colors.green,),
                    prefixText: ' ',
                    suffixText: 'USD',
                    suffixStyle: const TextStyle(color: Colors.green)),
              )
            )
          ],
        ),
      )
    );
  }
}

14voto

Reshan Maduka Points 21
enabledBorder: OutlineInputBorder(
  borderRadius: BorderRadius.circular(10.0),
  borderSide: BorderSide(color: Colors.red)
),

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X