只为成功找方法,不为失败找理由。

博客园 首页 新随笔 联系 订阅 管理
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')
        ]);
 

  

 

posted on 2020-04-17 22:02  诗意的活着  阅读(1811)  评论(0编辑  收藏  举报