import 'dart:async'; import 'package:aitrainer_app/localization/app_language.dart'; import 'package:aitrainer_app/localization/app_localization.dart'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/cupertino.dart'; import 'package:meta/meta.dart'; part 'settings_event.dart'; part 'settings_state.dart'; class SettingsBloc extends Bloc { String language; Locale _locale; BuildContext context; SettingsBloc({this.context}) : super(SettingsInitial()); void setLocale(Locale locale) { _locale = locale; } Locale getLocale() { return _locale; } @override Stream mapEventToState( SettingsEvent event, ) async* { if (event is SettingsChangeLanguage) { yield SettingsLoading(); await _changeLang( event.language); yield SettingsReady(_locale); } else if ( event is SettingsGetLanguage) { await AppLanguage().fetchLocale(); _locale = AppLanguage().appLocal; yield SettingsReady(_locale); } } Future _changeLang( String lang ) async{ print("_change to $lang"); switch ( lang ) { case "English": case "en": case "Angol": _locale = Locale('en'); break; case "Hungarian": case "Magyar": case "hu": _locale = Locale('hu'); break; } this.language = lang; AppLanguage().changeLanguage(_locale); await loadLang(); } Future loadLang() async{ if ( _locale != null ) { print(" -- Loading lang $_locale"); if (context != null) { AppLocalizations.of(context).setLocale(_locale); await AppLocalizations.of(context).load(); } else { print("no context, does not load"); } } else { print("no locale, does not load"); } } }