У меня небольшая ошибка с интернационализацией флаттера.
Я использовал 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;
}
}
А вот код TextFormField
TextFormField( decoration: _fieldDecoration(AppLocalizations.of(context).passwordText, Icons.lock),
onSaved: (val) {
_password = val;
},
validator: (val) => val.isEmpty ? AppLocalizations.of(context).insertPasswordText : null,
),