【笔记】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;
                  },
                ),
              ),
相关推荐
xuhaoyu_cpp_java2 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
Cloud_Shy6186 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 33 - 35)
开发语言·人工智能·笔记·python·学习方法
做cv的小昊6 小时前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论
星恒随风6 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
伊布拉西莫10 小时前
【流畅的Python】第20章:并发执行器 — 学习笔记
笔记·python·学习
AOwhisky12 小时前
学习自测与解析:MySQL第五、六、七期核心知识点详解
运维·数据库·笔记·学习·mysql·云计算
无限进步_12 小时前
从零实现一个迷你Shell——深入理解Linux命令行解释器
linux·运维·服务器·开发语言·c++·chrome
niuniuyi~12 小时前
QT学习笔记
笔记·qt·学习
咸甜适中12 小时前
rust语言学习笔记Trait(十六)Error(错误)
笔记·学习·rust
加农炮手Jinx12 小时前
Flutter for OpenHarmony:pub_updater 命令行工具自动更新专家(DevOps 运维必备) 深度解析与鸿蒙适配指南
android·运维·网络·flutter·华为·harmonyos·devops