проблема интернационализации при переключении языков - PullRequest
0 голосов
/ 07 сентября 2018

У меня небольшая ошибка с интернационализацией флаттера. Я использовал 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,
                  ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...