TextField長按后報(bào)錯(cuò) The getter 'pasteButtonLabel' was called on null.
因?yàn)樵O(shè)置中文后TextField長按調(diào)用的cupertino語言配置命浴,而flutter的cupertino_*.arb(flutter/packages/flutter_localizations/lib/src/l10n)文件只對英文進(jìn)行了支持所以導(dǎo)致的報(bào)錯(cuò)哈雏。
解決辦法自定義一個(gè)LocalizationsDelegate類來對cupertino做中文支持,直接上源碼,如下:
///設(shè)置語言中文
locale = const Locale('zh', 'CN'),
localizationsDelegates = const [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
///自定義代理和敬,見下段代碼
CommonLocalizationsDelegate(),
],
supportedLocales = [
const Locale('en', 'US'),
const Locale('zh', 'CN'),
],
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
///語言(主要解決cupertino控件不能顯示中文的問題)
class CommonLocalizationsDelegate
extends LocalizationsDelegate<CupertinoLocalizations> {
const CommonLocalizationsDelegate();
@override
bool isSupported(Locale locale) =>
<String>['zh', 'CN'].contains(locale.languageCode);
@override
SynchronousFuture<_DefaultCupertinoLocalizations> load(Locale locale) {
return SynchronousFuture<_DefaultCupertinoLocalizations>(
_DefaultCupertinoLocalizations(locale.languageCode));
}
@override
bool shouldReload(CommonLocalizationsDelegate old) => false;
}
class _DefaultCupertinoLocalizations extends CupertinoLocalizations {
_DefaultCupertinoLocalizations(this._languageCode)
: assert(_languageCode != null);
final String _languageCode;
static const List<String> _shortWeekdays = <String>[
'周一',
'周二',
'周三',
'周四',
'周五',
'周六',
'周日',
];
static const List<String> _shortMonths = <String>[
'一月',
'二月',
'三月',
'四月',
'五月',
'六月',
'七月',
'八月',
'九月',
'十月',
'十一月',
'十二月',
];
static const List<String> _months = <String>[
'一月',
'二月',
'三月',
'四月',
'五月',
'六月',
'七月',
'八月',
'九月',
'十月',
'十一月',
'十二月',
];
@override
String get alertDialogLabel => '提醒';
@override
String get anteMeridiemAbbreviation => "上午";
@override
String get postMeridiemAbbreviation => "下午";
@override
String get copyButtonLabel => "復(fù)制";
@override
String get cutButtonLabel => "剪切";
@override
String get pasteButtonLabel => "粘貼";
@override
String get selectAllButtonLabel => "全選";
@override
DatePickerDateOrder get datePickerDateOrder => DatePickerDateOrder.ymd;
@override
DatePickerDateTimeOrder get datePickerDateTimeOrder =>
DatePickerDateTimeOrder.date_time_dayPeriod;
@override
String datePickerDayOfMonth(int dayIndex) => dayIndex.toString();
@override
String datePickerHour(int hour) => hour.toString();
@override
String datePickerHourSemanticsLabel(int hour) => hour.toString();
@override
String datePickerMediumDate(DateTime date) {
return '${_shortWeekdays[date.weekday - DateTime.monday]} '
'${_shortMonths[date.month - DateTime.january]} '
'${date.day.toString().padRight(2)}';
}
@override
String datePickerMinute(int minute) => minute.toString().padLeft(2, '0');
@override
String datePickerMinuteSemanticsLabel(int minute) {
if (minute == 1) return '1 分鐘';
return minute.toString() + ' 分鐘';
}
@override
String datePickerMonth(int monthIndex) => _months[monthIndex - 1];
@override
String datePickerYear(int yearIndex) => yearIndex.toString();
@override
String timerPickerHour(int hour) => hour.toString();
@override
String timerPickerHourLabel(int hour) => '時(shí)';
@override
String timerPickerMinute(int minute) => minute.toString();
@override
String timerPickerMinuteLabel(int minute) => '分';
@override
String timerPickerSecond(int second) => second.toString();
@override
String timerPickerSecondLabel(int second) => '秒';
}
愿一切順利,大家多多留言點(diǎn)贊。