fetchPackages method

Future<List<PackageCategory>> fetchPackages(
  1. List<String> packageNames
)

Fetch categories for multiple packages

Implementation

Future<List<PackageCategory>> fetchPackages(
  List<String> packageNames,
) async {
  if (packageNames.isEmpty) return <PackageCategory>[];

  try {
    final String packagesParam = packageNames.join(',');
    final String url = '$baseUrl/category?packages=$packagesParam';

    final http.Response response = await http.get(Uri.parse(url));

    if (response.statusCode != 200) return <PackageCategory>[];

    final Map<String, dynamic> json = Map<String, dynamic>.from(
        jsonDecode(response.body) ?? <String, dynamic>{});

    final List<dynamic> packages =
        List<dynamic>.from(json['packages'] ?? <dynamic>[]);

    return packages
        .where((dynamic p) => p is Map)
        .map((dynamic p) => PackageCategory.fromJson(
            Map<String, dynamic>.from(p as Map? ?? <String, dynamic>{})))
        .toList();
  } catch (e) {
    return <PackageCategory>[];
  }
}