getPackForSettings method Null safety

Future<SpeechPackage> getPackForSettings(
  1. EngineSettings settings
)

Get the pack for the current settings

Implementation

Future<SpeechPackage> getPackForSettings(EngineSettings settings) async {
  late SpeechPackage defaultLangPackage;
  late SpeechPackage? settingLangPackage;

  // Search for pack for language and region
  SpeechPackage packForLanguageAndRegion = packages.firstWhere(
    (SpeechPackage pack) {
      String settingLanguage =
          settings.language.toLowerCase().replaceFirst('_', '-');
      String defaultLanguage = EngineConfig.defaultLanguage;
      String packLanguage = pack.lang.toLowerCase();
      String settingRegion = settings.region.toLowerCase();

      // set the generic package for the current language
      if (settingLanguage == packLanguage) {
        settingLangPackage = pack;

        // if no region in settings: match found
        if (settingRegion.isEmpty) {
          return true;
        }
      }

      // set the default language package
      if (defaultLanguage == packLanguage) {
        defaultLangPackage = pack;
      }

      return '$settingLanguage-$settingRegion' == packLanguage;
    },
    // Fallback to package for the setting or default language
    orElse: () => settingLangPackage ?? defaultLangPackage,
  );

  // Has this package been updated
  final isUpdated = _storageCtrl.isUpdated(packForLanguageAndRegion);

  final status = await SpeechPackStatusStorage.instance
          .load(packForLanguageAndRegion.id) ??
      SpeechPackageStatus(id: packForLanguageAndRegion.id);
  activePackageStatus = status.copyWith(isUpdated: isUpdated);

  return packForLanguageAndRegion;
}