flutter 从FlatButton迁移到TextButton时如何指定disabledTextColor

mlmc2os5  于 2023-06-07  发布在  Flutter
关注(0)|答案(2)|浏览(158)

考虑以下为FlatButton指定disabledTextColor的代码:

FlatButton.icon(
  icon: const Icon(Icons.check_box),
  label: const Text('Foo'),
  disabledTextColor: Colors.black,
  onPressed: null,
),

如何将disabledTextColor转换为TextButton的等价形式?
我想我需要覆盖style,但我似乎无法让TextButton.styleFrom工作,而Theme.of(context).textButtonTheme.stylenull

t1rydlwq

t1rydlwq1#

以下是等效的:

FlatButton.icon(
              icon: const Icon(Icons.check_box),
              label: const Text('FlatButton'),
              disabledTextColor: Colors.black,
              onPressed: null,
            ),
            TextButton.icon(
              icon: const Icon(Icons.check_box),
              label: const Text('TextButton'),
              style: ButtonStyle(
                foregroundColor: MaterialStateProperty.all(Colors.black),
              ),
              onPressed: null,
            ),

在这种情况下,由于onPressednull,按钮将 * 始终 * 被 * 禁用 *,因此foregroundColor在 * 所有 * 情况下都可以简单地为黑色。但是,如果您有不同的场景,style可以执行以下操作:

style: ButtonStyle(
    foregroundColor: MaterialStateProperty.resolveWith<Color>(
      (Set<MaterialState> states) => states.contains(MaterialState.disabled) ? Colors.black : null,
    ),
  ),

移植到新材质按钮及其主题-移植自定义禁用颜色的按钮提供了更多详细信息。

6qqygrtg

6qqygrtg2#

ButtonStyle之前定义onPressed

Widget build(BuildContext context) {
    final onPressed = something == true ? (){...} : null;  

    final flatButtonStyle = TextButton.styleFrom(
        foregroundColor: onPressed == null ? Colors.grey : Colors.white
    ...

return TextButton(
      onPressed: onPressed,
      style: flatButtonStyle,

       ...

相关问题