Материализации не найдено. Для виджетов панели приложений требуется, чтобы после перевода произошла ошибка предка виджета Localizations. - PullRequest
0 голосов
/ 20 июня 2020

Я пробовал это ответ и это тоже .

Исключение ошибки, которое я получаю на консоли: Console error

Before I try doing translation this is the app state below

App error on screen

Immediately I try to translate the I get this error on the screen and the app bar completely disappears.

This is my translation function

void _changeLanguage(AppLocalModel languageCode, BuildContext context) async {
    Locale _temp;
    switch (languageCode.languageCode) {
      case ENGLISH:
        _temp = Locale(languageCode.languageCode, "US");
        break;
      case JUKUN:
        _temp = Locale(languageCode.languageCode, "NG");
        break;
      case TIV:
        _temp = Locale(languageCode.languageCode, "NG");
        break;
      case AGATU:
        _temp = Locale(languageCode.languageCode, "NG");
        break;
      case HAUSA:
        _temp = Locale(languageCode.languageCode, "NG");
        break;
      default:
        _temp = Locale(languageCode.languageCode, "US");
    }
    App.setLocale(context, _temp);

    setState(() {});
  }

and this is my main()

A point to note is my Main app is a stateful widget because I have a screen that only displays at first launch

void main() {

  runApp(App());
}

class App extends StatefulWidget {
  static void setLocale(BuildContext context, Locale locale) {
    _App _app = context.findAncestorStateOfType<_App>();
    _app.setLocale(locale);

  }

  _App createState() => _App();
}

class _App extends State {

  Locale _locale;
  void setLocale(Locale locale) {
    setState(() {
      _locale = locale;
    });
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    getLocale().then((locale) {
      this._locale = locale;
    });
  }

  @override
  void initState() {
    super.initState();

    getLocale().then((locale) {
      this._locale = locale;
    });
  }
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My app',
      locale: _locale,
      // actions: ActionsWidget,
      localizationsDelegates: [
        // ... app-specific localization delegate[s] here
        AppLocalization.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      localeResolutionCallback: (deviceLocale, supportedLocale) {
        for (var locale in supportedLocale) {
          if (locale.languageCode == deviceLocale.languageCode &&
              locale.countryCode == deviceLocale.countryCode) {
            return deviceLocale;
          }
        }
        return supportedLocale.first;
      },
      supportedLocales: [
        const Locale(ENGLISH, "US"), // English
        const Locale(HAUSA, "NG"), // Housa
        const Locale(AGATU, "NG"), // Hebrew
        const Locale(JUKUN, "NG"), // Jukun
        const Locale(TIV, "NG"), // Tiv
        // ... other locales the app supports
      ],
      home: Welcome(),
      );
    }
}

Ошибка эмулятора

...