student-legacy/refilc/lib/api/providers/update_provider.dart
Kima 8494e7a753 Revert "rename filcapi to refilcapi"
This reverts commit ed80d3fc6286dc678f15d9971d0db91a7b5be34d.
2024-03-03 23:33:37 +01:00

66 lines
1.7 KiB
Dart

import 'dart:io';
import 'package:refilc/api/client.dart';
import 'package:refilc/models/release.dart';
import 'package:flutter/material.dart';
import 'package:package_info_plus/package_info_plus.dart';
class UpdateProvider extends ChangeNotifier {
// Private
late List<Release> _releases;
bool _available = false;
bool get available => _available && _releases.isNotEmpty;
// Public
List<Release> get releases => _releases;
UpdateProvider({
List<Release> initialReleases = const [],
required BuildContext context,
}) {
_releases = List.castFrom(initialReleases);
}
Future<void> fetch() async {
late String currentVersion;
PackageInfo packageInfo = await PackageInfo.fromPlatform();
currentVersion = packageInfo.version;
if (!Platform.isAndroid) return;
_releases = await FilcAPI.getReleases() ?? [];
_releases.sort((a, b) => -a.version.compareTo(b.version));
// Check for new releases
if (_releases.isNotEmpty) {
if (!_releases.first.prerelease) {
_available = _releases.first.version
.compareTo(Version.fromString(currentVersion)) ==
1;
}
// ignore: avoid_print
if (_available) print("INFO: New update: ${releases.first.version}");
notifyListeners();
}
}
Future<Map> installedVersion() async {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String appName = packageInfo.appName;
String packageName = packageInfo.packageName;
String version = packageInfo.version;
String buildNumber = packageInfo.buildNumber;
Map<String, String> release = {
"app_name": appName,
"package_name": packageName,
"version": version,
"build_number": buildNumber,
};
return release;
}
}