|
|
@@ -0,0 +1,362 @@
|
|
|
+// Copyright 2017 The Chromium Authors. All rights reserved.
|
|
|
+// Use of this source code is governed by a BSD-style license that can be
|
|
|
+// found in the LICENSE file.
|
|
|
+
|
|
|
+import 'dart:async';
|
|
|
+
|
|
|
+import 'package:flutter/foundation.dart';
|
|
|
+import 'package:flutter/widgets.dart';
|
|
|
+
|
|
|
+/// Determines the order of the columns inside [CupertinoDatePicker] in
|
|
|
+/// time and date time mode.
|
|
|
+enum DatePickerDateTimeOrder {
|
|
|
+ /// Order of the columns, from left to right: date, hour, minute, am/pm.
|
|
|
+ ///
|
|
|
+ /// Example: [Fri Aug 31 | 02 | 08 | PM].
|
|
|
+ date_time_dayPeriod,
|
|
|
+ /// Order of the columns, from left to right: date, am/pm, hour, minute.
|
|
|
+ ///
|
|
|
+ /// Example: [Fri Aug 31 | PM | 02 | 08].
|
|
|
+ date_dayPeriod_time,
|
|
|
+ /// Order of the columns, from left to right: hour, minute, am/pm, date.
|
|
|
+ ///
|
|
|
+ /// Example: [02 | 08 | PM | Fri Aug 31].
|
|
|
+ time_dayPeriod_date,
|
|
|
+ /// Order of the columns, from left to right: am/pm, hour, minute, date.
|
|
|
+ ///
|
|
|
+ /// Example: [PM | 02 | 08 | Fri Aug 31].
|
|
|
+ dayPeriod_time_date,
|
|
|
+}
|
|
|
+
|
|
|
+/// Determines the order of the columns inside [CupertinoDatePicker] in date mode.
|
|
|
+enum DatePickerDateOrder {
|
|
|
+ /// Order of the columns, from left to right: day, month, year.
|
|
|
+ ///
|
|
|
+ /// Example: [12 | March | 1996]
|
|
|
+ dmy,
|
|
|
+ /// Order of the columns, from left to right: month, day, year.
|
|
|
+ ///
|
|
|
+ /// Example: [March | 12 | 1996]
|
|
|
+ mdy,
|
|
|
+ /// Order of the columns, from left to right: year, month, day.
|
|
|
+ ///
|
|
|
+ /// Example: [1996 | March | 12]
|
|
|
+ ymd,
|
|
|
+ /// Order of the columns, from left to right: year, day, month.
|
|
|
+ ///
|
|
|
+ /// Example: [1996 | 12 | March]
|
|
|
+ ydm,
|
|
|
+}
|
|
|
+
|
|
|
+/// Defines the localized resource values used by the Cupertino widgets.
|
|
|
+///
|
|
|
+/// See also:
|
|
|
+///
|
|
|
+/// * [DefaultCupertinoLocalizations], the default, English-only, implementation
|
|
|
+/// of this interface.
|
|
|
+// TODO(xster): Supply non-english strings.
|
|
|
+abstract class CupertinoLocalizations {
|
|
|
+ /// Year that is shown in [CupertinoDatePicker] spinner corresponding to the
|
|
|
+ /// given year index.
|
|
|
+ ///
|
|
|
+ /// Examples: datePickerYear(1) in:
|
|
|
+ ///
|
|
|
+ /// - US English: 2018
|
|
|
+ /// - Korean: 2018년
|
|
|
+ String datePickerYear(int yearIndex);
|
|
|
+
|
|
|
+ /// Month that is shown in [CupertinoDatePicker] spinner corresponding to
|
|
|
+ /// the given month index.
|
|
|
+ ///
|
|
|
+ /// Examples: datePickerMonth(1) in:
|
|
|
+ ///
|
|
|
+ /// - US English: January
|
|
|
+ /// - Korean: 1월
|
|
|
+ String datePickerMonth(int monthIndex);
|
|
|
+
|
|
|
+ /// Day of month that is shown in [CupertinoDatePicker] spinner corresponding
|
|
|
+ /// to the given day index.
|
|
|
+ ///
|
|
|
+ /// Examples: datePickerDayOfMonth(1) in:
|
|
|
+ ///
|
|
|
+ /// - US English: 1
|
|
|
+ /// - Korean: 1일
|
|
|
+ String datePickerDayOfMonth(int dayIndex);
|
|
|
+
|
|
|
+ /// The medium-width date format that is shown in [CupertinoDatePicker]
|
|
|
+ /// spinner. Abbreviates month and days of week.
|
|
|
+ ///
|
|
|
+ /// Examples:
|
|
|
+ ///
|
|
|
+ /// - US English: Wed Sep 27
|
|
|
+ /// - Russian: ср сент. 27
|
|
|
+ String datePickerMediumDate(DateTime date);
|
|
|
+
|
|
|
+ /// Hour that is shown in [CupertinoDatePicker] spinner corresponding
|
|
|
+ /// to the given hour value.
|
|
|
+ ///
|
|
|
+ /// Examples: datePickerHour(1) in:
|
|
|
+ ///
|
|
|
+ /// - US English: 1
|
|
|
+ /// - Arabic: ٠١
|
|
|
+ String datePickerHour(int hour);
|
|
|
+
|
|
|
+ /// Semantics label for the given hour value in [CupertinoDatePicker].
|
|
|
+ String datePickerHourSemanticsLabel(int hour);
|
|
|
+
|
|
|
+ /// Minute that is shown in [CupertinoDatePicker] spinner corresponding
|
|
|
+ /// to the given minute value.
|
|
|
+ ///
|
|
|
+ /// Examples: datePickerMinute(1) in:
|
|
|
+ ///
|
|
|
+ /// - US English: 01
|
|
|
+ /// - Arabic: ٠١
|
|
|
+ String datePickerMinute(int minute);
|
|
|
+
|
|
|
+ /// Semantics label for the given minute value in [CupertinoDatePicker].
|
|
|
+ String datePickerMinuteSemanticsLabel(int minute);
|
|
|
+
|
|
|
+ /// The order of the date elements that will be shown in [CupertinoDatePicker].
|
|
|
+ DatePickerDateOrder get datePickerDateOrder;
|
|
|
+
|
|
|
+ /// The order of the time elements that will be shown in [CupertinoDatePicker].
|
|
|
+ DatePickerDateTimeOrder get datePickerDateTimeOrder;
|
|
|
+
|
|
|
+ /// The abbreviation for ante meridiem (before noon) shown in the time picker.
|
|
|
+ String get anteMeridiemAbbreviation;
|
|
|
+
|
|
|
+ /// The abbreviation for post meridiem (after noon) shown in the time picker.
|
|
|
+ String get postMeridiemAbbreviation;
|
|
|
+
|
|
|
+ /// The term used by the system to announce dialog alerts.
|
|
|
+ String get alertDialogLabel;
|
|
|
+
|
|
|
+ /// Hour that is shown in [CupertinoCountdownTimerPicker] corresponding to
|
|
|
+ /// the given hour value.
|
|
|
+ ///
|
|
|
+ /// Examples: timerPickerHour(1) in:
|
|
|
+ ///
|
|
|
+ /// - US English: 1
|
|
|
+ /// - Arabic: ١
|
|
|
+ String timerPickerHour(int hour);
|
|
|
+
|
|
|
+ /// Minute that is shown in [CupertinoCountdownTimerPicker] corresponding to
|
|
|
+ /// the given minute value.
|
|
|
+ ///
|
|
|
+ /// Examples: timerPickerMinute(1) in:
|
|
|
+ ///
|
|
|
+ /// - US English: 1
|
|
|
+ /// - Arabic: ١
|
|
|
+ String timerPickerMinute(int minute);
|
|
|
+
|
|
|
+ /// Second that is shown in [CupertinoCountdownTimerPicker] corresponding to
|
|
|
+ /// the given second value.
|
|
|
+ ///
|
|
|
+ /// Examples: timerPickerSecond(1) in:
|
|
|
+ ///
|
|
|
+ /// - US English: 1
|
|
|
+ /// - Arabic: ١
|
|
|
+ String timerPickerSecond(int second);
|
|
|
+
|
|
|
+ /// Label that appears next to the hour picker in
|
|
|
+ /// [CupertinoCountdownTimerPicker] when selected hour value is `hour`.
|
|
|
+ /// This function will deal with pluralization based on the `hour` parameter.
|
|
|
+ String timerPickerHourLabel(int hour);
|
|
|
+
|
|
|
+ /// Label that appears next to the minute picker in
|
|
|
+ /// [CupertinoCountdownTimerPicker] when selected minute value is `minute`.
|
|
|
+ /// This function will deal with pluralization based on the `minute` parameter.
|
|
|
+ String timerPickerMinuteLabel(int minute);
|
|
|
+
|
|
|
+ /// Label that appears next to the minute picker in
|
|
|
+ /// [CupertinoCountdownTimerPicker] when selected minute value is `second`.
|
|
|
+ /// This function will deal with pluralization based on the `second` parameter.
|
|
|
+ String timerPickerSecondLabel(int second);
|
|
|
+
|
|
|
+ /// The term used for cutting
|
|
|
+ String get cutButtonLabel;
|
|
|
+
|
|
|
+ /// The term used for copying
|
|
|
+ String get copyButtonLabel;
|
|
|
+
|
|
|
+ /// The term used for pasting
|
|
|
+ String get pasteButtonLabel;
|
|
|
+
|
|
|
+ /// The term used for selecting everything
|
|
|
+ String get selectAllButtonLabel;
|
|
|
+
|
|
|
+ /// The `CupertinoLocalizations` from the closest [Localizations] instance
|
|
|
+ /// that encloses the given context.
|
|
|
+ ///
|
|
|
+ /// This method is just a convenient shorthand for:
|
|
|
+ /// `Localizations.of<CupertinoLocalizations>(context, CupertinoLocalizations)`.
|
|
|
+ ///
|
|
|
+ /// References to the localized resources defined by this class are typically
|
|
|
+ /// written in terms of this method. For example:
|
|
|
+ ///
|
|
|
+ /// ```dart
|
|
|
+ /// CupertinoLocalizations.of(context).anteMeridiemAbbreviation;
|
|
|
+ /// ```
|
|
|
+ static CupertinoLocalizations of(BuildContext context) {
|
|
|
+ return Localizations.of<CupertinoLocalizations>(context, CupertinoLocalizations);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class _CupertinoLocalizationsDelegate extends LocalizationsDelegate<CupertinoLocalizations> {
|
|
|
+ const _CupertinoLocalizationsDelegate();
|
|
|
+
|
|
|
+ @override
|
|
|
+ bool isSupported(Locale locale) => locale.languageCode == 'en';
|
|
|
+
|
|
|
+ @override
|
|
|
+ Future<CupertinoLocalizations> load(Locale locale) => DefaultCupertinoLocalizations.load(locale);
|
|
|
+
|
|
|
+ @override
|
|
|
+ bool shouldReload(_CupertinoLocalizationsDelegate old) => false;
|
|
|
+
|
|
|
+ @override
|
|
|
+ String toString() => 'DefaultCupertinoLocalizations.delegate(en_US)';
|
|
|
+}
|
|
|
+
|
|
|
+/// US English strings for the cupertino widgets.
|
|
|
+class DefaultCupertinoLocalizations implements CupertinoLocalizations {
|
|
|
+ /// Constructs an object that defines the cupertino widgets' localized strings
|
|
|
+ /// for US English (only).
|
|
|
+ ///
|
|
|
+ /// [LocalizationsDelegate] implementations typically call the static [load]
|
|
|
+ /// function, rather than constructing this class directly.
|
|
|
+ const DefaultCupertinoLocalizations();
|
|
|
+
|
|
|
+ static const List<String> _shortWeekdays = <String>[
|
|
|
+ 'Mon',
|
|
|
+ 'Tue',
|
|
|
+ 'Wed',
|
|
|
+ 'Thu',
|
|
|
+ 'Fri',
|
|
|
+ 'Sat',
|
|
|
+ 'Sun',
|
|
|
+ ];
|
|
|
+
|
|
|
+ static const List<String> _shortMonths = <String>[
|
|
|
+ 'Jan',
|
|
|
+ 'Feb',
|
|
|
+ 'Mar',
|
|
|
+ 'Apr',
|
|
|
+ 'May',
|
|
|
+ 'Jun',
|
|
|
+ 'Jul',
|
|
|
+ 'Aug',
|
|
|
+ 'Sep',
|
|
|
+ 'Oct',
|
|
|
+ 'Nov',
|
|
|
+ 'Dec',
|
|
|
+ ];
|
|
|
+
|
|
|
+ static const List<String> _months = <String>[
|
|
|
+ 'January',
|
|
|
+ 'February',
|
|
|
+ 'March',
|
|
|
+ 'April',
|
|
|
+ 'May',
|
|
|
+ 'June',
|
|
|
+ 'July',
|
|
|
+ 'August',
|
|
|
+ 'September',
|
|
|
+ 'October',
|
|
|
+ 'November',
|
|
|
+ 'December',
|
|
|
+ ];
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @override
|
|
|
+ String datePickerYear(int yearIndex) => yearIndex.toString();
|
|
|
+
|
|
|
+ @override
|
|
|
+ String datePickerMonth(int monthIndex) => _months[monthIndex - 1];
|
|
|
+
|
|
|
+ @override
|
|
|
+ String datePickerDayOfMonth(int dayIndex) => dayIndex.toString();
|
|
|
+
|
|
|
+ @override
|
|
|
+ String datePickerHour(int hour) => hour.toString();
|
|
|
+
|
|
|
+ @override
|
|
|
+ String datePickerHourSemanticsLabel(int hour) => hour.toString() + " o'clock";
|
|
|
+
|
|
|
+ @override
|
|
|
+ String datePickerMinute(int minute) => minute.toString().padLeft(2, '0');
|
|
|
+
|
|
|
+ @override
|
|
|
+ String datePickerMinuteSemanticsLabel(int minute) {
|
|
|
+ if (minute == 1)
|
|
|
+ return '1 minute';
|
|
|
+ return minute.toString() + ' minutes';
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ String datePickerMediumDate(DateTime date) {
|
|
|
+ return '${_shortWeekdays[date.weekday - DateTime.monday]} '
|
|
|
+ '${_shortMonths[date.month - DateTime.january]} '
|
|
|
+ '${date.day.toString().padRight(2)}';
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ DatePickerDateOrder get datePickerDateOrder => DatePickerDateOrder.mdy;
|
|
|
+
|
|
|
+ @override
|
|
|
+ DatePickerDateTimeOrder get datePickerDateTimeOrder => DatePickerDateTimeOrder.date_time_dayPeriod;
|
|
|
+
|
|
|
+ @override
|
|
|
+ String get anteMeridiemAbbreviation => 'AM';
|
|
|
+
|
|
|
+ @override
|
|
|
+ String get postMeridiemAbbreviation => 'PM';
|
|
|
+
|
|
|
+ @override
|
|
|
+ String get alertDialogLabel => 'Alert';
|
|
|
+
|
|
|
+ @override
|
|
|
+ String timerPickerHour(int hour) => hour.toString();
|
|
|
+
|
|
|
+ @override
|
|
|
+ String timerPickerMinute(int minute) => minute.toString();
|
|
|
+
|
|
|
+ @override
|
|
|
+ String timerPickerSecond(int second) => second.toString();
|
|
|
+
|
|
|
+ @override
|
|
|
+ String timerPickerHourLabel(int hour) => hour == 1 ? 'hour' : 'hours';
|
|
|
+
|
|
|
+ @override
|
|
|
+ String timerPickerMinuteLabel(int minute) => 'min';
|
|
|
+
|
|
|
+ @override
|
|
|
+ String timerPickerSecondLabel(int second) => 'sec';
|
|
|
+
|
|
|
+ @override
|
|
|
+ String get cutButtonLabel => 'Cut';
|
|
|
+
|
|
|
+ @override
|
|
|
+ String get copyButtonLabel => 'Copy';
|
|
|
+
|
|
|
+ @override
|
|
|
+ String get pasteButtonLabel => 'Paste';
|
|
|
+
|
|
|
+ @override
|
|
|
+ String get selectAllButtonLabel => 'Select All';
|
|
|
+
|
|
|
+ /// Creates an object that provides US English resource values for the
|
|
|
+ /// cupertino library widgets.
|
|
|
+ ///
|
|
|
+ /// The [locale] parameter is ignored.
|
|
|
+ ///
|
|
|
+ /// This method is typically used to create a [LocalizationsDelegate].
|
|
|
+ static Future<CupertinoLocalizations> load(Locale locale) {
|
|
|
+ return SynchronousFuture<CupertinoLocalizations>(const DefaultCupertinoLocalizations());
|
|
|
+ }
|
|
|
+
|
|
|
+ /// A [LocalizationsDelegate] that uses [DefaultCupertinoLocalizations.load]
|
|
|
+ /// to create an instance of this class.
|
|
|
+ static const LocalizationsDelegate<CupertinoLocalizations> delegate = _CupertinoLocalizationsDelegate();
|
|
|
+}
|