import 'dart:io'; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:github/github.dart'; import 'package:timeago/timeago.dart'; class GithubAPI { final GitHub _github = GitHub(); Future latestReleaseVersion(String org, String repoName) async { try { var latestRelease = await _github.repositories.getLatestRelease( RepositorySlug(org, repoName), ); return latestRelease.tagName; } on Exception { return null; } } Future latestReleaseFile( String extension, String org, String repoName, ) async { try { var latestRelease = await _github.repositories.getLatestRelease( RepositorySlug(org, repoName), ); String? url = latestRelease.assets ?.firstWhere((asset) => asset.name != null && asset.name!.endsWith(extension) && !asset.name!.contains('-sources') && !asset.name!.contains('-javadoc')) .browserDownloadUrl; if (url != null) { return await DefaultCacheManager().getSingleFile(url); } } on Exception { return null; } return null; } Future latestCommitTime(String org, String repoName) async { try { var repo = await _github.repositories.getRepository( RepositorySlug(org, repoName), ); return repo.pushedAt != null ? format(repo.pushedAt!, locale: 'en_short') : ''; } on Exception { return ''; } } Future> getContributors(String org, String repoName) async { return await (_github.repositories.listContributors( RepositorySlug(org, repoName), )).toList(); } Future> getCommits(String org, String repoName) async { return await (_github.repositories.listCommits( RepositorySlug(org, repoName), )).toList(); } }