Style on text field and button are applied differently.

For example:

On text field style is applied like

style: TextStyle(color: icolor)

On button style is applied like

style: ElevatedButton.styleFrom({primary: icolor}),

I was trying if a container style can be applied to a widget inside but that does not work.

Is there a common syntax to style each widget?

Thanks!


Solution 1: Krunal Nizama

You can create your custom text or button.

For example, you can create custom Text as below:

import 'package:flutter/material.dart';

class CustomText extends StatelessWidget {
  final String data;
  final Color? textColor;
  final double? fontSize;
  final FontWeight? fontWeight;
  final String? fontFamily;

  CustomText(
    this.data, {
    this.textColor,
    this.fontSize,
    this.fontWeight,
    this.fontFamily,
  });

  @override
  Widget build(BuildContext context) {
    return Text(
      data,
      style: TextStyle(
        color: textColor ?? Colors.black,
        fontSize: fontSize ?? 20,
        fontWeight: fontWeight,
        fontFamily: fontFamily ?? 'regular',
      ),
    );
  }
}

Then you can use CustomText("any value"). Same way you can crete your button class so you don't need to define styles every time.


Solution 2: pranav malayil

Create a common widget class so that you can use it everywhere


Solution 3: Babiosik

Use Theme and Theme data in MaterialApp widget or as independent. More in official docs

MaterialApp(
  title: appName,
  theme: ThemeData(
    // Define the default brightness and colors.
    brightness: Brightness.dark,
    primaryColor: Colors.lightBlue[800],

    // Define the default font family.
    fontFamily: 'Georgia',

    // Define the default `TextTheme`. Use this to specify the default
    // text styling for headlines, titles, bodies of text, and more.
    textTheme: const TextTheme(
      headline1: TextStyle(fontSize: 72.0, fontWeight: FontWeight.bold),
      headline6: TextStyle(fontSize: 36.0, fontStyle: FontStyle.italic),
      bodyText2: TextStyle(fontSize: 14.0, fontFamily: 'Hind'),
    ),
  ),
  home: const MyHomePage(
    title: appName,
  ),
);

MaterialApp set global theme and this theme is auto applied to all app. Also you can create static ThemeData if you do not want use Theme.of(context). But usually create widgets that create the right widgets with a suitable theme as it is easier.

class MyText extends StatelessWidget {
  const MyText({Key? key, required this.text}) : super(key: key);
  final String text;
  @override
  Widget build(BuildContext context) {
    return Text(
      text,
      style: TextStyle(color: Colors.red),
    );
  }
}