【笔记】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;
                  },
                ),
              ),
相关推荐
tingshuo291710 小时前
S001 【模板】从前缀函数到KMP应用 字符串匹配 字符串周期
笔记
火柴就是我15 小时前
让我们实现一个更好看的内部阴影按钮
android·flutter
王晓枫15 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
shankss1 天前
Flutter 下拉刷新库 pull_to_refresh_plus 设计与实现分析
flutter
忆江南2 天前
iOS 深度解析
flutter·ios
明君879972 天前
Flutter 实现 AI 聊天页面 —— 记一次 Markdown 数学公式显示的踩坑之旅
前端·flutter
恋猫de小郭2 天前
移动端开发稳了?AI 目前还无法取代客户端开发,小红书的论文告诉你数据
前端·flutter·ai编程
MakeZero2 天前
Flutter那些事-交互式组件
flutter
shankss2 天前
pull_to_refresh_simple
flutter
shankss2 天前
Flutter 下拉刷新库新特性:智能预加载 (enableSmartPreload) 详解
flutter