Flutter:showDatePicker:取消按钮的替代文本是否可行?

标签 flutter

我有一个应用程序,其中日期字段可以是有效日期或空日期。我发现取消按钮的“取消”的 showDatePicker 描述令人困惑。用户期望它做什么?这可能意味着没有变化,也可能意味着没有日期。在我希望它表示“无日期”的情况下尤其如此。我复制了“date_picker.dart”并将其更改为为“取消”按钮提供可选的替代文本。

我最初更改了 date_picker.dart 以允许多个按钮并单击“确定”以外的按钮将返回按钮的文本。然而,这意味着返回一个 var(动态),我认为这可能是 Not Acceptable 。然后我意识到只需更改取消按钮的文本就足够了,更改“date_picker.dart”所需要做的就是为替代文本提供一个可选参数来代替“取消”。只涉及几行代码。改变非常简单。单击取消按钮返回 null。将取消按钮的文本更改为“无日期”将使结果对用户显而易见。

如果不更改程序就无法实现,那么我会在 Github 上提出更改请求。

目前有没有办法在 showDatePicker/date_picker.dart 中实现取消按钮的替代文本?

最佳答案

showDatePicker 呈现一个模态,子级是 _DatePickerDialog 类,它本身使用 localizations.cancelButtonLabel 作为取消按钮标签。

我们可以通过创建基于原始英语本地化的自定义本地化委托(delegate)来覆盖 cancelButtonLabel 属性。

例如这是一个返回默认英语本地化的委托(delegate),除了 cancelButtonLabel 属性被重新定义:

class CancelButtonLocalizationDelegate extends LocalizationsDelegate<MaterialLocalizations> {
  const CancelButtonLocalizationDelegate();

  @override
  bool isSupported(Locale locale) => locale.languageCode == 'en';

  @override
  Future<MaterialLocalizations> load(Locale locale) => Future.value(CancelButtonLocalization());

  @override
  bool shouldReload(CancelButtonLocalizationDelegate old) => false;
}

class CancelButtonLocalization extends DefaultMaterialLocalizations {
  const CancelButtonLocalization();

  @override
  String get cancelButtonLabel => 'Custom Cancel';
}

使用 Localizations.override 将更改应用于构建器中的日期选择器子项,例如

showDatePicker(
  context: context,
  // ...,
  builder: (context, child) {
    return Localizations.override(
      context: context,
      delegates: [
        CancelButtonLocalizationDelegate(),
      ],
      child: child,
    );
  }
);

关于Flutter:showDatePicker:取消按钮的替代文本是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56341672/

相关文章:

ios - 每当我从Physical iOS和Simulator切换构建时,都必须运行Flutter Clean并删除框架

dart - 在我的 flutter 应用程序中使用 StreamBuilder 和 Navigator,但第一页构建了两次

ios - flutter @Error : Null safety features are disabled for this library

flutter - 为什么 Root Widget 需要构建两次?

Flutter:我可以在 ListView 构建器中启用/禁用 InkWell 吗?

flutter - 如何判断 Flutter 修复是否在稳定版本中可用?

Flutter:加载本地 json 文件返回 null

android - flutter :IconButton onPressed 没有被调用

flutter |如何验证时间选择器

flutter - 导航到新屏幕时保持 AppBar 静态