Search code examples
flutterdartflutter-layout

Set TextFromField style in Theme


So in my flutter app, I create TextFormField to use as an input like so (and return it in a scaffold):

final password = TextFormField(
      controller: passController,
      autofocus: false,
      obscureText: true,
      decoration: InputDecoration(hintText: 'Password'),
      style: new TextStyle(color: Colors.orange),
);

I would like to change the style property inside a themeData, but I couldn't find which property to specify.

The closest one I could get to was textTheme: new TextTheme(body1: new TextStyle(color: Colors.orange)), but this one does nothing to my TextFormField.

How can I set the TextFormField style? Please help, I'm really new to Dart and also programming. I'm currently 13 and I have nobody to help me out with these types of things.

P.S: The complete code is on GitHub if needed: https://github.com/Legolaszstudio/novynotifier


Solution

  • Uhm! That's a long question. TextFormField are subclass of the TextField. The default style of TextField could be found from source below.

    final TextStyle style = themeData.textTheme.subhead.merge(widget.style);
    

    So, you have 2 solutions for your source code.

    Solution 1

    • Delete style property are inputted to password.
    final password = TextFormField(
      controller: passController,
      autofocus: false,
      obscureText: true,
      decoration: InputDecoration(hintText: 'Password'),
      style: new TextStyle(color: Colors.orange), // ★ => Delete this.
    );
    
    • Define a custom subhead style from DataTheme and input into Material app.
    MaterialApp(
      theme: ThemeData(
        textTheme: TextTheme(
          subhead: TextStyle(color: Colors.orange),
        ),
      ),
      home: null,
    )
    

    Solution 2

    • Define a custom subhead style from DataTheme and input into Material app.
    MaterialApp(
      theme: ThemeData(
        textTheme: TextTheme(
          subhead: TextStyle(color: Colors.orange),
        ),
      ),
      home: null,
    )
    
    • Copy this subhead style into password
    final themes = Theme.of(context);
    final password = TextFormField(
      controller: passController,
      autofocus: false,
      obscureText: true,
      decoration: InputDecoration(hintText: 'Password'),
      style: themes.textTheme.subhead, // ★ => Update this.
    );