fetchLanguagesViaSocket function

Future<List<LanguageOption>> fetchLanguagesViaSocket(
  1. Socket socket, {
  2. String displayLocale = 'en',
})

Fetch supported languages via socket

Implementation

Future<List<LanguageOption>> fetchLanguagesViaSocket(
  io.Socket socket, {
  String displayLocale = 'en',
}) async {
  final completer = Completer<List<LanguageOption>>();

  final timeout = Timer(const Duration(seconds: 5), () {
    if (!completer.isCompleted) {
      completer.complete(getSupportedLanguages(displayLocale: displayLocale));
    }
  });

  socket.emitWithAck('translation:getLanguages', {
    'displayLocale': displayLocale,
  }, ack: (response) {
    timeout.cancel();
    if (!completer.isCompleted) {
      if (response is Map<String, dynamic> && response['languages'] is List) {
        final languages = (response['languages'] as List)
            .map((l) => LanguageOption.fromMap(l as Map<String, dynamic>))
            .toList();
        completer.complete(languages);
      } else {
        completer.complete(getSupportedLanguages(displayLocale: displayLocale));
      }
    }
  });

  return completer.future;
}