我有一个应用程序,其中日期字段可以是有效日期,也可以是null。我发现取消按钮的showDatePicker描述为“ cancel”,令人困惑。用户期望它做什么?这可能意味着没有变化,也可能没有日期。在我的情况下尤其如此,我希望它的意思是“无日期”。我已经复制了“ date_picker.dart”并进行了更改,以为“取消”按钮提供可选的替代文本。
我最初将date_picker.dart更改为允许多个按钮,单击“确定”以外的按钮将返回该按钮的文本。但是,那意味着要返回一个var(动态),我认为这可能是不可接受的。然后,我意识到仅更改“取消”按钮的文本就足够了,更改“ date_picker.dart”所需要做的就是为替代文本提供一个可选参数,以代替“取消”。仅涉及几行代码。更改非常简单。单击取消按钮将返回null。将取消按钮的文本更改为“无日期”将使结果对用户显而易见。
如果不更改程序就无法实现这一目标,那么我将请求在Github上进行更改。
在showDatePicker / date_picker.dart中,目前是否有任何方法可以实现取消按钮的替代文本?
答案 0 :(得分:2)
showDatePicker
给出一个模态,其子级为_DatePickerDialog
类,其子级本身将localizations.cancelButtonLabel
用作“取消”按钮标签。
我们可以通过基于原始英语本地化创建自定义本地化委托来覆盖cancelButtonLabel
属性。
例如这是一个返回默认英语本地化的委托,但重新定义了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,
);
}
);