问题:
在使用flutter
自动的日历选择组件CupertinoDatePicker
的时候,flutter
默认帮助我们做了国际化显示, 比如us
,年月日,月份是January
…
而有时候我们想使用US
,但又不想使用单词,我查看了官方API
文档没有找到相关开放的配置。
'January','February','March','April','May','June','July','August','September','October','November','December',
解决:
经过分析国际化配置CupertinoLocalizations,发现有DefaultCupertinoLocalizations
和 GlobalCupertinoLocalizations
CupertinoLocalizationAm
相关抽象类和实现类,
所以解决方法应运而生,就是extends
这个默认实现类,重写想要的返回值,经过实践是可行,
下面粘贴一下相关代码,供大家参考:
源码
先建一个实现类,MyDefaultCupertinoLocalizations.dart
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';class MyDefaultCupertinoLocalizations extends DefaultCupertinoLocalizations {static const List<String> _months = <String>['01','02','03','04','05','06','07','08','09','10','11','12',];@overrideString datePickerMonth(int monthIndex) => _months[monthIndex - 1];static Future<CupertinoLocalizations> load(Locale locale) {return SynchronousFuture<CupertinoLocalizations>(MyDefaultCupertinoLocalizations());}static const LocalizationsDelegate<CupertinoLocalizations> delegate =_CupertinoLocalizationsDelegate();
}class _CupertinoLocalizationsDelegateextends LocalizationsDelegate<CupertinoLocalizations> {const _CupertinoLocalizationsDelegate();@overridebool isSupported(Locale locale) => locale.languageCode == 'en';@overrideFuture<CupertinoLocalizations> load(Locale locale) =>MyDefaultCupertinoLocalizations.load(locale);@overridebool shouldReload(_CupertinoLocalizationsDelegate old) => false;@overrideString toString() => 'MyDefaultCupertinoLocalizations.delegate(en_US)';
}
在日历组件里配置这个类,就可以了,本文也到此结束,有问题可评论区讨论。
Localizations.override(context: context,locale: const Locale('en'),delegates: [ MyDefaultCupertinoLocalizations.delegate,],child: CupertinoDatePicker(initialDateTime: initialDateTime,minimumYear: minimumYear,maximumYear: maximumYear,maximumDate: maximumDate,minimumDate: minimumDate,dateOrder: DatePickerDateOrder.dmy,mode: CupertinoDatePickerMode.date,onDateTimeChanged: (newDateTimes) {newDateTime = newDateTimes;},),),