Dart 切换语言时的国际化问题

Dart 切换语言时的国际化问题,dart,internationalization,flutter,Dart,Internationalization,Flutter,我有一个小错误与颤振。 我使用了formTextFields,当验证不满足时,它们会显示一些提示,如“Insert username”或“Insert password”。现在,当我在应用程序中切换语言时,我遇到的问题是,这些字符串不会立即更改,但只有在我再次按下登录按钮(并使用验证函数)后才会更改。其他一切都会改变,但这些暗示不会改变 这是我设置国际化的区域设置文件: import 'package:flutter/material.dart'; import 'package:intl/i

我有一个小错误与颤振。 我使用了
formTextFields
,当验证不满足时,它们会显示一些提示,如“
Insert username
”或“
Insert password
”。现在,当我在应用程序中切换语言时,我遇到的问题是,这些字符串不会立即更改,但只有在我再次按下登录按钮(并使用验证函数)后才会更改。其他一切都会改变,但这些暗示不会改变

这是我设置国际化的区域设置文件:

import 'package:flutter/material.dart';

import 'package:intl/intl.dart';
import 'dart:async';

import 'package:mobile/l10n/messages_all.dart';

class AppLocalizations {

  static Future<AppLocalizations> load(Locale locale) {
    final String name =
        locale.countryCode.isEmpty ? locale.languageCode : locale.toString();


    final String localeName = Intl.canonicalizedLocale(name);


    return initializeMessages(localeName).then((bool _) {
      Intl.defaultLocale = localeName;
      return AppLocalizations();
    });
  }


  static AppLocalizations of(BuildContext context) {
    return Localizations.of<AppLocalizations>(context, AppLocalizations);
  }



  String get loginText {
    return Intl.message('Login',
        //name should be the same as the actual variable name because this
        //will be the key to associate these values
        name: 'loginText',
        //The description is optional
        desc: "if you see the world 'login', call this one!");
  }

  String get usernameText{
    return Intl.message('Username',
    name: 'usernameText',
    );
  }


  String get passwordText{
    return Intl.message('Password',
    name: 'passwordText'
    );
  }


  String get insertUsernameText{
    return Intl.message('Insert username',
        name: 'insertUsernameText'
    );

  }

  String get insertPasswordText{
    return Intl.message('Insert password',
        name: 'insertPasswordText'
    );
  }


}


class AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
  const AppLocalizationsDelegate();


  @override
  bool isSupported(Locale locale) {
    // TODO: implement isSupported
    return ['en', 'de', 'ja'].contains(locale.languageCode);
  }

  //calls app locations method created up top
  @override
  Future<AppLocalizations> load(Locale locale) {
    return AppLocalizations.load(locale);
  }


  @override
  shouldReload(AppLocalizationsDelegate old) {
    return false;
  }
}
此AppLocalizations代码在我的应用程序中运行良好。请根据代码进行一些更改

导入'dart:async';
导入“package:COMO/constants/string_constant.dart”;
进口“包装:颤振/基础.dart”;
进口“包装:颤振/材料.省道”;
进口“包装:颤振/基础.飞镖”展示同步未来;
类应用程序本地化{
应用程序本地化(this.locale);
最终地点;
的静态应用程序本地化(BuildContext上下文){
返回本地化(上下文、应用本地化);
}
静态映射_LocalizedValue={
"嗯":{
//节包含签名字符串;
“登录”:“登录”,
“电子邮件地址”:“电子邮件地址”,
“密码”:“密码”,
'LOGIN':'LOGIN',
“忘记密码?”:“忘记密码”,
“注册”:“注册”,
“lbSignUpStr”:“没有帐户吗?”,
'errorEnterMail':'请输入电子邮件',
'errorEnterPwd':'请输入密码',
'errorInvalidPwd':'Invalid Password',
'errorInvalidMail':'Invalid Email',
//节包含注册字符串;
“名字”:“名字”,
“姓氏”:“姓氏”,
'电话号码':'电话号码(*)',
“创建帐户”:“创建帐户”,
“signUpAgreementStart”:StringConstant.terms和ConditionStrStart,
“signUpAgreementEnd”:StringConstant.terms和ConditionStrengd,
'errorEnterFname':'Please Enter First Name',
'ErrorEnterName':'请输入姓氏',
'errorEnterPhoneNo':“请输入电话号码”,
//节包含抽屉字符串;
“writeToUs”:“写信给我们”,
“Como位置”:“Como位置”,
“评价应用程序”:“评价应用程序”,
“whyComo”:“Why..Como..”,
“服务费率”:“服务费率”,
“followUs”:“跟随我们:”,
},
“ar”:{
“登录”:“登录”,
“电子邮件地址”:“电子邮件地址”,
“密码”:“密码”,
“登录”:“登录”,
“忘记密码?”:“忘记密码”,
‘注册’:‘注册’,
“lbSignUpStr”:“lbSignUpStr”,
“误报邮件”:“误报邮件”,
“errorEnterPwd”:“errorEnterPwd”;“errorEnterPwd”;“errorEnterPwd”;“errorEnterPwd”;“errorEnterPwd”;“errorEnterPwd”;“errorEnterPwd”,
“errorInvalidPwd”:“errorInvalidPwd”,
“错误无效邮件”:“错误无效邮件”,
“名字”:“名字”,
‘姓’:‘姓’,
‘电话号码’:‘电话号码’,
“CreateCount”:“CreateCount”,
“签约协议开始”如下:“签约协议开始”,
“签署协议结束”:“签署协议”,
“错误输入名称”:“错误输入名称”,
“错误输入名”:“错误输入名”,
“错误输入电话号码”:“错误输入电话号码”,
//节包含抽屉字符串;
“书面的”:“书面的”,
“共定位”:“共定位”,
“rateTheApp”:“rateTheApp”,
‘whyComo’:‘whyComo’、‘whyComo’、‘whyComo’、‘whyComo’、‘whyComo’、‘whyComo’、‘whyComo’、‘whyComo’、‘whyComo’、‘whyComo’、‘whyComo’、‘whyComo’、‘whyComo’,
‘服务费率’:‘服务费率’,
“followUs”:“followUs:”,
},
};
//登录UI本地化功能
字符串获取签名{
返回_localizedValues[locale.languageCode]['Sign-in'];
}
字符串get errorEnterMail{
返回_localizedValues[locale.languageCode]['errorEnterMail'];
}
字符串get errorEnterPwd{
返回_localizedValues[locale.languageCode]['errorEnterPwd'];
}
字符串get errorInvalidPwd{
返回_localizedValues[locale.languageCode]['errorInvalidPwd'];
}
字符串get errorInvalidMail{
返回_localizedValues[locale.languageCode]['errorInvalidMail'];
}
字符串获取电子邮件地址{
返回_localizedValues[locale.languageCode]['Email Address'];
}
字符串获取密码{
返回_localizedValues[locale.languageCode]['Password'];
}
字符串获取登录{
返回_localizedValues[locale.languageCode]['LOGIN'];
}
字符串获取放弃密码{
返回_localizedValues[locale.languageCode][“忘记密码?”];
}
字符串获得注册{
返回_localizedValues[locale.languageCode]['Sign Up'];
}
字符串获取lbSignUpStr{
返回_localizedValues[locale.languageCode]['lbSignUpStr'];
}
//注册用户界面本地化功能
字符串获取名字{
返回_localizedValues[locale.languageCode]['First Name'];
}
字符串获取lastName{
返回_localizedValues[locale.languageCode]['Last Name'];
}
字符串获取电话号码{
返回_localizedValues[locale.languageCode]['phoneNo'];
}
字符串获取createAccount{
返回_localizedValues[locale.languageCode]['createAccount'];
}
字符串get signUpAgreementStart{
返回_localizedValues[locale.languageCode]['signUpAgreementStart'];
}
字符串get signUpAgreementEnd{
返回_localizedValues[locale.languageCode]['signUpAgreementEnd'];
}
字符串获取errorEnterFirstname{
返回_localizedValues[locale.languageCode]['errorEnterFname'];
}
字符串获取错误EnterLastName{
返回_localizedValues[locale.languageCode]['ErrorEnterName'];
}
字符串获取错误EnterPhoneNo{
返回_localizedValues[locale.languageCode]['errorEnterPhoneNo'];
}
//抽屉用户界面定位功能
字符串被写入{
TextFormField( decoration: _fieldDecoration(AppLocalizations.of(context).passwordText, Icons.lock),
                    onSaved: (val) {
                      _password = val;
                    },
                    validator: (val) => val.isEmpty ? AppLocalizations.of(context).insertPasswordText : null,
                  ),
import 'dart:async';
import 'package:COMO/constants/string_constant.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart' show SynchronousFuture;

class AppLocalizations {
  AppLocalizations(this.locale);

  final Locale locale;

  static AppLocalizations of(BuildContext context) {
    return Localizations.of<AppLocalizations>(context, AppLocalizations);
  }

  static Map<String, Map<String, String>> _localizedValues = {
    'en': {
      // Section contains SignIn Strings ;
      'Sign in': 'Sign in',
      'Email Address': 'Email Address',
      'Password': 'Password',
      'LOGIN': 'LOGIN',
      'Forgot Password?': 'Forgot Password',
      'Sign Up': 'Sign Up',
      'lbSignUpStr': 'Do not have an account?',
      'errorEnterMail': 'Please Enter Email',
      'errorEnterPwd': 'Please Enter Password',
      'errorInvalidPwd': 'Invalid Password',
      'errorInvalidMail': 'Invalid Email',

      // Section contains SignUp Strings ;
      'First Name': 'First Name',
      'Last Name': 'Last Name',
      'phoneNo': 'Phone Number(*)',
      'createAccount': 'CREATE ACCOUNT',
      'signUpAgreementStart': StringConstant.TermsAndConditionStrStart,
      'signUpAgreementEnd': StringConstant.TermsAndConditionStrEnd,
      'errorEnterFname': 'Please Enter First Name',
      'errorEnterLname': 'Please Enter Last Name',
      'errorEnterPhoneNo': "Please Enter Phone Number",

      // Section contains Drawer Strings ;

      'writeToUs': 'Write To Us',
      'comoLocation': 'Como Location',
      'rateTheApp': 'Rate the App',
      'whyComo': 'Why..Como..',
      'serviceRate': 'Service Rate',
      'followUs': 'Follow us on:',


    },
    'ar': {
      'Sign in': 'تسجيل الدخول',
      'Email Address': 'عنوان بريد الكتروني',
      'Password': 'كلمه السر',
      'LOGIN': 'تسجيل الدخول',
      'Forgot Password?': 'هل نسيت كلمة المرور؟',
      'Sign Up': 'سجل',
      'lbSignUpStr': 'لا تملك حساب؟',
      'errorEnterMail': 'الرجاء إدخال البريد الإلكتروني',
      'errorEnterPwd': 'من فضلك أدخل كلمة المرور',
      'errorInvalidPwd': 'رمز مرور خاطئ',
      'errorInvalidMail': 'بريد إلكتروني خاطئ',
      'First Name': 'الاسم الاول',
      'Last Name': 'الكنية',
      'phoneNo': 'رقم الهاتف(*)',
      'createAccount': 'إنشاء حساب',
      'signUpAgreementStart': 'بإنشاء حسابك ، أنت توافق على موقعنا',
      'signUpAgreementEnd': 'البنود و الظروف',
      'errorEnterFname': 'الرجاء إدخال الاسم الأول',
      'errorEnterLname': 'الرجاء إدخال الاسم الأخير',
      'errorEnterPhoneNo': "الرجاء إدخال رقم الهاتف",

      // Section contains Drawer Strings ;

      'writeToUs': 'اكتب لنا ',
      'comoLocation': 'كومو الموقع',
      'rateTheApp': 'قيم التطبيق',
      'whyComo': 'لماذا .. كومو ..',
      'serviceRate': 'معدل خدمة',
      'followUs': 'اتبعنا:',
    },
  };

  // Login UI Localization functions
  String get lbSignIn {
    return _localizedValues[locale.languageCode]['Sign in'];
  }

  String get errorEnterMail {
    return _localizedValues[locale.languageCode]['errorEnterMail'];
  }

  String get errorEnterPwd {
    return _localizedValues[locale.languageCode]['errorEnterPwd'];
  }

  String get errorInvalidPwd {
    return _localizedValues[locale.languageCode]['errorInvalidPwd'];
  }

  String get errorInvalidMail {
    return _localizedValues[locale.languageCode]['errorInvalidMail'];
  }

  String get emailAddress {
    return _localizedValues[locale.languageCode]['Email Address'];
  }

  String get password {
    return _localizedValues[locale.languageCode]['Password'];
  }

  String get login {
    return _localizedValues[locale.languageCode]['LOGIN'];
  }

  String get forgotPassword {
    return _localizedValues[locale.languageCode]['Forgot Password?'];
  }

  String get signUp {
    return _localizedValues[locale.languageCode]['Sign Up'];
  }

  String get lbSignUpStr {
    return _localizedValues[locale.languageCode]['lbSignUpStr'];
  }

  // Sign Up UI Localization Function
  String get firstName {
    return _localizedValues[locale.languageCode]['First Name'];
  }

  String get lastName {
    return _localizedValues[locale.languageCode]['Last Name'];
  }

  String get phoneNo {
    return _localizedValues[locale.languageCode]['phoneNo'];
  }

  String get createAccount {
    return _localizedValues[locale.languageCode]['createAccount'];
  }

  String get signUpAgreementStart {
    return _localizedValues[locale.languageCode]['signUpAgreementStart'];
  }

  String get signUpAgreementEnd {
    return _localizedValues[locale.languageCode]['signUpAgreementEnd'];
  }

  String get errorEnterFirstname {
    return _localizedValues[locale.languageCode]['errorEnterFname'];
  }

  String get errorEnterLastname {
    return _localizedValues[locale.languageCode]['errorEnterLname'];
  }

  String get errorEnterPhoneNo {
    return _localizedValues[locale.languageCode]['errorEnterPhoneNo'];
  }

  // Drawer UI Localization Function
  String get writeToUs {
    return _localizedValues[locale.languageCode]['writeToUs'];
  }
  String get comoLocation {
    return _localizedValues[locale.languageCode]['comoLocation'];
  }
  String get rateTheApp {
    return _localizedValues[locale.languageCode]['rateTheApp'];
  }

  String get whyComo {
    return _localizedValues[locale.languageCode]['whyComo'];
  }
  String get serviceRate {
    return _localizedValues[locale.languageCode]['serviceRate'];
  }

  String get followUs {
    return _localizedValues[locale.languageCode]['followUs'];
  }
}
GlobalKey<FormState> _formKey=GlobalKey<FormState> ();
  Form(
    key: _formKey,
    ..
)
@override
  Widget build(BuildContext context) {
    if(!isvalidTextFields)
      if(_formKey.currentState!=null)
      _formKey.currentState.validate();
       ..
}