feat: add alot
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:kooltab2/utils/app_update_util.dart';
|
||||
import 'package:ota_update/ota_update.dart';
|
||||
|
||||
import '../models/app_error.dart';
|
||||
import '../models/settings.dart';
|
||||
import '../services/settings_service.dart';
|
||||
import '../utils/app_config.dart';
|
||||
import '../utils/app_update_util.dart';
|
||||
|
||||
class SettingsViewModel extends ChangeNotifier {
|
||||
final SettingsService settingsService;
|
||||
@@ -14,7 +15,7 @@ class SettingsViewModel extends ChangeNotifier {
|
||||
AppSettings _settings = AppSettings.defaults;
|
||||
bool _isLoading = false;
|
||||
bool _hasLoaded = false;
|
||||
String? _errorMessage;
|
||||
AppError? _error;
|
||||
|
||||
final AppUpdateUtil _updater = AppUpdateUtil(serverUrl: kUpdateServerUrl);
|
||||
|
||||
@@ -28,7 +29,7 @@ class SettingsViewModel extends ChangeNotifier {
|
||||
|
||||
bool get hasLoaded => _hasLoaded;
|
||||
|
||||
String? get errorMessage => _errorMessage;
|
||||
AppError? get error => _error;
|
||||
|
||||
Future<void> ensureLoaded() async {
|
||||
if (_hasLoaded || _isLoading) return;
|
||||
@@ -39,14 +40,14 @@ class SettingsViewModel extends ChangeNotifier {
|
||||
if (_isLoading) return;
|
||||
|
||||
_isLoading = true;
|
||||
_errorMessage = null;
|
||||
_error = null;
|
||||
notifyListeners();
|
||||
|
||||
try {
|
||||
_settings = await settingsService.getSettings();
|
||||
} catch (e) {
|
||||
debugPrint('SettingsViewModel: load error: $e');
|
||||
_errorMessage = 'Could not load settings.';
|
||||
_error = AppError.loadSettings;
|
||||
} finally {
|
||||
_hasLoaded = true;
|
||||
_isLoading = false;
|
||||
@@ -72,33 +73,33 @@ class SettingsViewModel extends ChangeNotifier {
|
||||
UpdateInfo update, {
|
||||
void Function(double progress)? onProgress,
|
||||
}) async {
|
||||
final url = update.download.startsWith("http")
|
||||
final url = update.download.startsWith('http')
|
||||
? update.download
|
||||
: "$kUpdateServerUrl${update.download}";
|
||||
: '$kUpdateServerUrl${update.download}';
|
||||
|
||||
debugPrint("Download Url: $url");
|
||||
debugPrint('Download Url: $url');
|
||||
|
||||
final stream = OtaUpdate().execute(
|
||||
url,
|
||||
destinationFilename: "update.apk",
|
||||
destinationFilename: 'update.apk',
|
||||
sha256checksum: update.sha256,
|
||||
);
|
||||
|
||||
await for (final event in stream) {
|
||||
debugPrint("OTA: ${event.status} ${event.value}");
|
||||
debugPrint('OTA: ${event.status} ${event.value}');
|
||||
|
||||
if (event.status == OtaStatus.DOWNLOADING) {
|
||||
final progress = double.tryParse(event.value ?? "0") ?? 0;
|
||||
final progress = double.tryParse(event.value ?? '0') ?? 0;
|
||||
|
||||
onProgress?.call(progress / 100);
|
||||
}
|
||||
|
||||
if (event.status == OtaStatus.DOWNLOAD_ERROR) {
|
||||
throw Exception("Download failed: ${event.value}");
|
||||
throw Exception('Download failed: ${event.value}');
|
||||
}
|
||||
|
||||
if (event.status == OtaStatus.INSTALLATION_ERROR) {
|
||||
throw Exception("Installation failed: ${event.value}");
|
||||
throw Exception('Installation failed: ${event.value}');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -121,7 +122,7 @@ class SettingsViewModel extends ChangeNotifier {
|
||||
Future<void> _save(AppSettings updated) async {
|
||||
final previous = _settings;
|
||||
_settings = updated;
|
||||
_errorMessage = null;
|
||||
_error = null;
|
||||
notifyListeners();
|
||||
|
||||
try {
|
||||
@@ -129,7 +130,7 @@ class SettingsViewModel extends ChangeNotifier {
|
||||
} catch (e) {
|
||||
debugPrint('SettingsViewModel: save error: $e');
|
||||
_settings = previous;
|
||||
_errorMessage = 'Could not save settings.';
|
||||
_error = AppError.saveSettings;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user