initTranslation<T extends MlTranslation> static method

(T, TranslationLanguage?) initTranslation<T extends MlTranslation>(
  1. T translation
)

Implementation

static (T, TranslationLanguage?) initTranslation<T extends MlTranslation>(
  T translation,
) {
  if (box == null || !box!.isOpen) {
    throw Exception('''
Translator has not been initialized.

void main() async {
WidgetsFlutterBinding.ensureInitialized();

await Translator.init();

runApp(const MyApp());
}

''');
  }

  final source = (box!.get(kSource) as Map?)?.cast<String, dynamic>();

  // Save translation source to db if it is first run.
  if (source == null) {
    box!
      ..put(kSource, translation.toJson())
      ..put(kSourceLanguage, translation.sourceLanguage);

    return (translation, null);
  }

  MlTranslation? sourceTranslation;

  try {
    sourceTranslation = translation.fromJson(source);
  } catch (_) {
    sourceTranslation = null;
  }

  // Translation source has been changed
  if (sourceTranslation != translation) {
    // Target language name
    final targetLanguage = box!.get(kTargetLanguage) as String?;

    box!
      ..put(kSource, translation.toJson())
      ..put(kSourceLanguage, translation.sourceLanguage);

    if (targetLanguage != null) {
      TranslationLanguage? translationLanguage;

      try {
        translationLanguage = TranslationLanguage.fromJson(targetLanguage);
      } catch (_) {
        translationLanguage = null;
      }

      return (translation, translationLanguage);
    }
  } else {
    final target = (box!.get(kTarget) as Map?)?.cast<String, dynamic>();

    if (target != null) {
      final targetTranslation = translation.fromJson(target) as T;

      return (targetTranslation, null);
    }
  }

  return (translation, null);
}