我有一个应用程序,其中日期字段可以是有效日期或空日期。我发现取消按钮的“取消”的 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/