From 10bdcd00acfa727a11f3963e5425669dca6dbae4 Mon Sep 17 00:00:00 2001 From: JankoLancer Date: Sun, 28 Nov 2021 01:41:34 +0100 Subject: [PATCH] Add fallback preloaded data --- lib/src/easy_localization_app.dart | 18 +++++++++++++++--- lib/src/easy_localization_controller.dart | 7 +++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/src/easy_localization_app.dart b/lib/src/easy_localization_app.dart index 98f120a0..1a39eb9a 100644 --- a/lib/src/easy_localization_app.dart +++ b/lib/src/easy_localization_app.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/src/easy_localization_controller.dart'; import 'package:easy_logger/easy_logger.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; @@ -75,6 +76,10 @@ class EasyLocalization extends StatefulWidget { /// @Default value `errorWidget = ErrorWidget()` final Widget Function(FlutterError? message)? errorWidget; + /// Data for fallback localte that is also startup locale + /// Use this to fix startup black screen + final Map? fallbackLocaleData; + EasyLocalization({ Key? key, required this.child, @@ -87,6 +92,7 @@ class EasyLocalization extends StatefulWidget { this.assetLoader = const RootBundleAssetLoader(), this.saveLocale = true, this.errorWidget, + this.fallbackLocaleData, }) : assert(supportedLocales.isNotEmpty), assert(path.isNotEmpty), super(key: key) { @@ -126,6 +132,7 @@ class _EasyLocalizationState extends State { useOnlyLangCode: widget.useOnlyLangCode, useFallbackTranslations: widget.useFallbackTranslations, path: widget.path, + fallbackLocaleData: widget.fallbackLocaleData, onLoadError: (FlutterError e) { setState(() { translationsLoadError = e; @@ -251,16 +258,21 @@ class _EasyLocalizationDelegate extends LocalizationsDelegate { bool isSupported(Locale locale) => supportedLocales!.contains(locale); @override - Future load(Locale value) async { + Future load(Locale value) { EasyLocalization.logger.debug('Load Localization Delegate'); if (localizationController!.translations == null) { - await localizationController!.loadTranslations(); + return localizationController!.loadTranslations().then((value) { + Localization.load(value, + translations: localizationController!.translations, + fallbackTranslations: localizationController!.fallbackTranslations); + return Future.value(Localization.instance); + }); } Localization.load(value, translations: localizationController!.translations, fallbackTranslations: localizationController!.fallbackTranslations); - return Future.value(Localization.instance); + return SynchronousFuture(Localization.instance); } @override diff --git a/lib/src/easy_localization_controller.dart b/lib/src/easy_localization_controller.dart index 0b8a5a22..fd8524a6 100644 --- a/lib/src/easy_localization_controller.dart +++ b/lib/src/easy_localization_controller.dart @@ -19,6 +19,8 @@ class EasyLocalizationController extends ChangeNotifier { final bool useFallbackTranslations; final bool saveLocale; final bool useOnlyLangCode; + final Map? fallbackLocaleData; + Translations? _translations, _fallbackTranslations; Translations? get translations => _translations; Translations? get fallbackTranslations => _fallbackTranslations; @@ -31,6 +33,7 @@ class EasyLocalizationController extends ChangeNotifier { required this.path, required this.useOnlyLangCode, required this.onLoadError, + this.fallbackLocaleData, Locale? startLocale, Locale? fallbackLocale, Locale? forceLocale, // used for testing @@ -52,6 +55,10 @@ class EasyLocalizationController extends ChangeNotifier { (locale) => _checkInitLocale(locale, _deviceLocale), orElse: () => _getFallbackLocale(supportedLocales, fallbackLocale)); } + + if (fallbackLocaleData != null) { + _translations = Translations(fallbackLocaleData); + } } //Get fallback Locale