如何覆盖textButtonTheme?

How to overwrite textButtonTheme?

我已经为 TextButton 定义了主题。

theme: ThemeData(
            visualDensity: VisualDensity.adaptivePlatformDensity,
            brightness: Brightness.light,
            scaffoldBackgroundColor: const Color(0xfff9f9f9),
            primaryColor: const Color(0xffff5f62),
            textButtonTheme: TextButtonThemeData(
                style: ButtonStyle(
                    shape: MaterialStateProperty.all(RoundedRectangleBorder(
                        side: const BorderSide(
                          color: Colors.black54,
                        ),
                        borderRadius: BorderRadius.circular(20))),
                    backgroundColor: MaterialStateProperty.all(Colors.white))),
            fontFamily: 'Sarabun',
            textTheme: const TextTheme(
              button: TextStyle(color: Colors.black),
            ),
          ),

但我想使用具有默认外观的 TextButton。如何覆盖它?

使用 .copyWith() 它基本上创建文本样式的副本,但给定的字段替换为新值。

see docs for more explanation

您可以使用 Theme 小部件包装并提供 ThemeData(),这将提供默认外观。

Theme(
  data: ThemeData(),
  child: TextButton(
    onPressed: () {},
    child: Text("wrapped with Theme"),
  ),
),

如果您想自定义初始主题,请使用

Theme(
  data: Theme.of(context).copyWith(//things you like to override.),
  child: TextButton(
    onPressed: () {},
    child: Text("wrapped with Theme"),
  ),
),
 return TextButton(
  onPressed: () {},
  child: Text('TextButton'),
  style: TextButton.styleFrom(),
);