【笔记】flutter 日历年月日自定义国际化显示

问题:

在使用flutter 自动的日历选择组件CupertinoDatePicker的时候,flutter默认帮助我们做了国际化显示, 比如us ,年月日,月份是January...

而有时候我们想使用US,但又不想使用单词,我查看了官方API文档没有找到相关开放的配置。

bash 复制代码
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December',
解决:

经过分析国际化配置CupertinoLocalizations,发现有DefaultCupertinoLocalizationsGlobalCupertinoLocalizations CupertinoLocalizationAm 相关抽象类和实现类,

所以解决方法应运而生,就是extends这个默认实现类,重写想要的返回值,经过实践是可行,

下面粘贴一下相关代码,供大家参考:

源码
bash 复制代码
先建一个实现类,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',
  ];

  @override
  String datePickerMonth(int monthIndex) => _months[monthIndex - 1];

  static Future<CupertinoLocalizations> load(Locale locale) {
    return SynchronousFuture<CupertinoLocalizations>(
        MyDefaultCupertinoLocalizations());
  }

  static const LocalizationsDelegate<CupertinoLocalizations> delegate =
  _CupertinoLocalizationsDelegate();
}

class _CupertinoLocalizationsDelegate
    extends LocalizationsDelegate<CupertinoLocalizations> {
  const _CupertinoLocalizationsDelegate();

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

  @override
  Future<CupertinoLocalizations> load(Locale locale) =>
      MyDefaultCupertinoLocalizations.load(locale);

  @override
  bool shouldReload(_CupertinoLocalizationsDelegate old) => false;

  @override
  String toString() => 'MyDefaultCupertinoLocalizations.delegate(en_US)';
}

在日历组件里配置这个类,就可以了,本文也到此结束,有问题可评论区讨论。

bash 复制代码
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;
                  },
                ),
              ),
相关推荐
zhangrelay1 小时前
蓝桥云课五分钟-通关自动控制-octave
笔记·学习
Lumos_7772 小时前
Linux -- exec 进程替换
linux·运维·chrome
_李小白2 小时前
【AI大模型学习笔记之平台篇】第六篇:安卓开发AI工具介绍(Android CLI、Android Skill和Android Knowledge Base)
人工智能·笔记·学习
YaBingSec3 小时前
玄机靶场:供应链安全-供应链应急-Part2 通关笔记
java·笔记·安全
qeen873 小时前
【算法笔记】双指针及其经典例题解析
c++·笔记·算法·双指针
MonkeyKing4 小时前
Flutter约束模型(BoxConstraints)与布局体系完全解析
flutter
China_Yanhy4 小时前
生产笔记:AI 集群的极致成本与数据保命指南
人工智能·笔记
云起SAAS4 小时前
小智笔记APP源码 | 8大广告联盟聚合(穿山甲/优量汇/快手/百度) | 应用市场过审极速版 | uni-app全栈商用项目
笔记·uni-app·广告联盟·笔记app
ouliten5 小时前
cuda编程笔记(41)--异步数据拷贝
笔记·cuda
chudonghao5 小时前
[UE学习笔记][基于源码] 运行时网格 PMC / DMC / RMC
笔记·学习·ue5