У меня есть экран, который меняет язык при нажатии на соответствующее поле языка, а затем устанавливает новый язык с помощью поставщика blo c! Эта языковая локаль передается в файл main.dart в переменную локаль, с помощью которой приложение решает, из какого файла json загрузить язык. Я столкнулся с проблемой в виде закусочной / текста тоста. Когда пользователь нажимает на кнопку, появляется модальное всплывающее окно подтверждения, после чего экран переходит к предыдущему экрану, на котором отображается снэк-бар с текстом измененного языка, хотя в моем сценарии снэк-бар не отображает текст выбранного языка, а показывает ранее выбранный язык текста. Может кто-нибудь помочь с этим?
файл app.dart
return MaterialApp(
builder: (context, widget) => LoadingContainer(
key: const ValueKey('LoadingContainer'),
child: widget
),
localizationsDelegates: [
const SLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('en'),
Locale('id'),
],
onGenerateRoute: CustomRoute.switcher,
locale: state.locale,
title: 'Test App',
theme: appTheme(context),
initialRoute: RouteList.initial,
routes: Routes.getAll(),
);
Это вызов API, и после успешного завершения вызовет еще один блок c укажите, какой набор состояния отвечает за загрузку новой локали для всего приложения.
Stream<ChangeLanguageState> _mapUpdateProfileToState(
UpdateLanguageThroughAPIEvent event
) async* {
loaderBloc.add(StartLoading());
try {
final updatedCustomerDetails = await customerUsecase.patchCustomerDetails(
event.customerId,
{'languagePreferred': event.locale},
);
languageBloc.add(
SetLanguageToSharedPreferenceEvent(event.updatedLanguage.locale)
);
yield LoadedUpdateLanguageAPIState(
customerDetails: updatedCustomerDetails,
languageList:
_getUpdatedLanguages(
state.languageList,
event.updatedLanguage,
),
);
} catch (_) {
yield ErroredChangeLanguageState(
languageList: event.languageList,
);
} finally {
loaderBloc.add(FinishLoading());
}
}
Этот набор задает локальное хранилище, а также обновляет состояние, через которое приложение знает, какой файл json загружать
Stream<LanguageState> _mapUpdateLocaleToState(
SetLanguageToSharedPreferenceEvent event
) async* {
yield LoadingLocaleState();
final prefs = await SharedPreferences.getInstance();
await prefs.setString('lang', event.locale.toString());
yield LoadedLocaleState(event.locale);
}
Проблема здесь
if (state is LoadedUpdateLanguageAPIState
&& languageState is LoadedLocaleState
) {
Navigator.pop(context);
final String translatedText = S.of(context).translate(
'changeLanguage.snackBar.success'
);
Navigator.of(context).pop(translatedText);
}
после первого появления навигатора в переведенном тексте должен быть загружен текст с последнего выбранного языка, но он берет с ранее выбранного языка