flutter TextField 彈出復制是英文的問題


1.在 pubspec.yaml 中集成 flutter_localizations;
dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
注意這個會和intl沖突
2.在 MaterialApp 中設置本地化代理和支持的語言類型; return MaterialApp( localizationsDelegates: [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], supportedLocales: [ const Locale(‘zh‘, ‘CN‘), const Locale(‘en‘, ‘US‘), ] }

 

接着報了一個出錯:長按報錯The getter 'cutButtonLabel' was called on null
新建一個dart文件CupertinoLocalizationsDelegate
import 'package:flutter/foundation.dart' show SynchronousFuture;
import 'package:flutter/cupertino.dart';

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

@override
bool isSupported(Locale locale) =>
<String>['en', 'zh'].contains(locale.languageCode);

@override
SynchronousFuture<_DefaultCupertinoLocalizations> load(Locale locale) {
return SynchronousFuture<_DefaultCupertinoLocalizations>(
_DefaultCupertinoLocalizations(locale.languageCode));
}

@override
bool shouldReload(CupertinoLocalizationsDelegate old) => false;
}

class _DefaultCupertinoLocalizations extends CupertinoLocalizations {
_DefaultCupertinoLocalizations(this._languageCode)
: assert(_languageCode != null);

final DefaultCupertinoLocalizations _en =
const DefaultCupertinoLocalizations();
final String _languageCode;

final Map<String, Map<String, String>> _dict = <String, Map<String, String>>{
'en': <String, String>{
'alert': 'Alert',
'copy': 'Copy',
'paste': 'Paste',
'cut': 'Cut',
'selectAll': 'Select all',
'today': 'today'
},
'zh': <String, String>{
'alert': '警告',
'copy': '復制',
'paste': '粘貼',
'cut': '剪切',
'selectAll': '選擇全部',
'today': '今天'
}
};

@override
String get alertDialogLabel => _get('alert');

@override
String get anteMeridiemAbbreviation => _en.anteMeridiemAbbreviation;

@override
String get postMeridiemAbbreviation => _en.postMeridiemAbbreviation;

@override
String get copyButtonLabel => _get('copy');

@override
String get cutButtonLabel => _get('cut');

@override
String get pasteButtonLabel => _get('paste');

@override
String get selectAllButtonLabel => _get('selectAll');

@override
DatePickerDateOrder get datePickerDateOrder => _en.datePickerDateOrder;

@override
DatePickerDateTimeOrder get datePickerDateTimeOrder =>
_en.datePickerDateTimeOrder;

@override
String datePickerDayOfMonth(int dayIndex) =>
_en.datePickerDayOfMonth(dayIndex);

@override
String datePickerHour(int hour) => _en.datePickerHour(hour);

@override
String datePickerHourSemanticsLabel(int hour) =>
_en.datePickerHourSemanticsLabel(hour);

@override
String datePickerMediumDate(DateTime date) => _en.datePickerMediumDate(date);

@override
String datePickerMinute(int minute) => _en.datePickerMinute(minute);

@override
String datePickerMinuteSemanticsLabel(int minute) =>
_en.datePickerMinuteSemanticsLabel(minute);

@override
String datePickerMonth(int monthIndex) => _en.datePickerMonth(monthIndex);

@override
String datePickerYear(int yearIndex) => _en.datePickerYear(yearIndex);

@override
String timerPickerHour(int hour) => _en.timerPickerHour(hour);

@override
String timerPickerHourLabel(int hour) => _en.timerPickerHourLabel(hour);

@override
String timerPickerMinute(int minute) => _en.timerPickerMinute(minute);

@override
String timerPickerMinuteLabel(int minute) =>
_en.timerPickerMinuteLabel(minute);

@override
String timerPickerSecond(int second) => _en.timerPickerSecond(second);

@override
String timerPickerSecondLabel(int second) =>
_en.timerPickerSecondLabel(second);

String _get(String key) {
return _dict[_languageCode][key];
}

@override
String get todayLabel => _get("today");
}
使用方法:
localizationsDelegates: [ //此處 CupertinoLocalizationsDelegate(), GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], supportedLocales: [ const Locale('zh'), const Locale('en') ]);
 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM