You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Flutter中AboutDialog的按钮标签?

直接修改AboutDialog按钮标签的两种可行方案

不用自定义Dialog也能实现需求,核心是通过修改MaterialLocalizations的closeButtonLabel值覆盖默认文本,下面是两种常用方案:

方案一:全局替换(适配多语言场景)

如果需要全局统一修改所有使用closeButtonLabel的组件文本,或者要做多语言适配,可以自定义MaterialLocalizations的实现:

  1. 自定义MaterialLocalizations子类,重写closeButtonLabel方法:
class CustomMaterialLocalizations extends DefaultMaterialLocalizations {
  CustomMaterialLocalizations(Locale locale) : super(locale);

  @override
  String get closeButtonLabel {
    // 根据当前语言返回对应文本,示例:中文返回"关闭",英文返回"Done"
    switch (locale.languageCode) {
      case 'zh':
        return '关闭';
      case 'en':
        return 'Done';
      default:
        return super.closeButtonLabel;
    }
  }
}
  1. 实现对应的LocalizationsDelegate:
class CustomMaterialLocalizationsDelegate extends LocalizationsDelegate<MaterialLocalizations> {
  const CustomMaterialLocalizationsDelegate();

  @override
  bool isSupported(Locale locale) => ['zh', 'en'].contains(locale.languageCode);

  @override
  Future<MaterialLocalizations> load(Locale locale) async {
    return CustomMaterialLocalizations(locale);
  }

  @override
  bool shouldReload(covariant LocalizationsDelegate<MaterialLocalizations> old) => false;
}
  1. 在MaterialApp中配置自定义delegate(需放在默认delegate前面,确保优先生效):
MaterialApp(
  localizationsDelegates: const [
    CustomMaterialLocalizationsDelegate(),
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
    GlobalCupertinoLocalizations.delegate,
  ],
  supportedLocales: const [
    Locale('zh'),
    Locale('en'),
  ],
  // 其他配置项...
)

方案二:局部替换(仅修改当前AboutDialog)

如果只需要修改这个AboutDialog的按钮文本,不想影响全局组件,可以用Localizations.override包裹AboutDialog,临时替换本地化字符串:

showDialog(
  context: context,
  builder: (context) {
    return Localizations.override(
      context: context,
      delegates: [
        LocalizationsDelegate<MaterialLocalizations>.override(
          locale: Localizations.localeOf(context),
          create: (locale) => _TempMaterialLocalizations(locale),
        ),
      ],
      child: const AboutDialog(
        // AboutDialog的配置内容...
      ),
    );
  },
);

// 临时子类,仅用于修改当前Dialog的按钮文本
class _TempMaterialLocalizations extends DefaultMaterialLocalizations {
  _TempMaterialLocalizations(Locale locale) : super(locale);

  @override
  String get closeButtonLabel => '自定义关闭'; // 替换成你需要的文本
}

这两种方案都能直接复用AboutDialog的默认逻辑,无需自己编写完整的Dialog结构。

内容的提问来源于stack exchange,提问作者Yuki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:26:05