getInstalledBanks static method

Future<List<C2bmemberModel>> getInstalledBanks(
  1. C2bmembersModel c2bmembersModel, {
  2. bool useAndroidLocalIcons = false,
  3. bool useAndroidLocalNames = false,
})

Получение списка банков, установленных на устройстве пользователя: IOS/Android передаем модель json, который приходит с https://qr.nspk.ru/proxyapp/c2bmembers.json (C2bmembersModel)

Implementation

static Future<List<C2bmemberModel>> getInstalledBanks(
    C2bmembersModel c2bmembersModel, {
  bool useAndroidLocalIcons = false,
  bool useAndroidLocalNames = false,
}) async {

  final c2bmembersInstalled = <C2bmemberModel>[];
  if (Platform.isIOS) {
    /// Оставляем только schema для проверки присутствия на устройстве
    late final List<String> schemaApplications;
    schemaApplications = c2bmembersModel.c2bmembersModel.map((c2bmember) => c2bmember.schema).toList();

    /// получаем список schema установленных банков

    final List<String> installedApplications = (await _channel.invokeMethod('getInstalledBanks', {
      'schema_applications': schemaApplications,
    }) as List)
        .map((installed) => installed as String)
        .toList();

    /// сравниваем список schema с c2bmembersModel, который пришел с ссылки https://qr.nspk.ru/proxyapp/c2bmembers.json
    for (int c2bmembersModelIndex = 0;
        c2bmembersModelIndex < c2bmembersModel.c2bmembersModel.length;
        c2bmembersModelIndex++) {
      for (int indexInstalledSchema = 0;
          indexInstalledSchema < installedApplications.length;
          indexInstalledSchema++) {
        final schemaOrPackageName = c2bmembersModel.c2bmembersModel[c2bmembersModelIndex].schema;
        if (schemaOrPackageName == installedApplications[indexInstalledSchema]) {
          c2bmembersInstalled.add(c2bmembersModel.c2bmembersModel[c2bmembersModelIndex]);
        }
      }
    }
  } else {
    /// Оставляем только schema для проверки присутствия на устройстве
    late final List<String> packageNamesApplications =
        c2bmembersModel.c2bmembersModel.map((c2bmember) => c2bmember.packageName).toList();

    /// получаем список schema установленных банков
    final List<C2bmemberModelAndroidLocalData> installedApplications =
        (await _channel.invokeMethod('getInstalledBanks', {
      'application_package_names': packageNamesApplications,
      'use_android_local_icons': useAndroidLocalIcons,
      'use_android_local_names': useAndroidLocalNames,
    }) as List)
            .map((installed) => C2bmemberModelAndroidLocalData.fromJson(installed as Map<dynamic, dynamic>))
            .toList();

    /// сравниваем список schema с c2bmembersModel, который пришел с ссылки https://qr.nspk.ru/proxyapp/c2bmembers.json
    for (int c2bmembersModelIndex = 0;
        c2bmembersModelIndex < c2bmembersModel.c2bmembersModel.length;
        c2bmembersModelIndex++) {
      for (int indexInstalledSchema = 0;
          indexInstalledSchema < installedApplications.length;
          indexInstalledSchema++) {
        final packageName = c2bmembersModel.c2bmembersModel[c2bmembersModelIndex].packageName;
        if (packageName == installedApplications[indexInstalledSchema].packageName) {
          c2bmembersModel.c2bmembersModel[c2bmembersModelIndex].bitmap =
              installedApplications[indexInstalledSchema].bitmap;
          c2bmembersModel.c2bmembersModel[c2bmembersModelIndex].localName =
              installedApplications[indexInstalledSchema].localName;
          c2bmembersInstalled.add(c2bmembersModel.c2bmembersModel[c2bmembersModelIndex]);
        }
      }
    }
  }
  return c2bmembersInstalled;
}