mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 05:23:28 +01:00 
			
		
		
		
	Compare commits
	
		
			27 Commits
		
	
	
		
			v0.13.10-b
			...
			v0.13.14-b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 3f4c6a1b76 | ||
|  | 60ad3199ca | ||
|  | 1984ffb1c0 | ||
|  | 7877a14f07 | ||
|  | 568a94968b | ||
|  | a6a68af24e | ||
|  | 5cdd110544 | ||
|  | 5bbe306f8f | ||
|  | 48acbc563a | ||
|  | ab1f7e7179 | ||
|  | 667e909a70 | ||
|  | bcc0d280ab | ||
|  | da027b7734 | ||
|  | 09056665c2 | ||
|  | f4c3951f6d | ||
|  | 00f42bb881 | ||
|  | d8408a26c2 | ||
|  | ede54531c8 | ||
|  | 0fa0a4b19a | ||
|  | af5ea3db0f | ||
|  | e75ca05aa4 | ||
|  | 3483190b78 | ||
|  | 69656e65c3 | ||
|  | e6c6841fac | ||
|  | 16d63a4416 | ||
|  | 2eaf443359 | ||
|  | 5979957d60 | 
| @@ -32,9 +32,6 @@ Currently supported App sources: | |||||||
| [<img src="https://github.com/machiav3lli/oandbackupx/blob/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png" | [<img src="https://github.com/machiav3lli/oandbackupx/blob/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png" | ||||||
|     alt="Get it on GitHub" |     alt="Get it on GitHub" | ||||||
|     height="80">](https://github.com/ImranR98/Obtainium/releases) |     height="80">](https://github.com/ImranR98/Obtainium/releases) | ||||||
| [<img src="https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png" |  | ||||||
|      alt="Get it on IzzyOnDroid" |  | ||||||
|      height="80">](https://apt.izzysoft.de/fdroid/index/apk/dev.imranr.obtainium) |  | ||||||
|  |  | ||||||
| ## Limitations | ## Limitations | ||||||
| - Auto (unattended) updates are unsupported due to a lack of any capable Flutter plugin. | - Auto (unattended) updates are unsupported due to a lack of any capable Flutter plugin. | ||||||
|   | |||||||
| @@ -228,12 +228,12 @@ | |||||||
|     "dontShowAgain": "دوباره این را نشان نده", |     "dontShowAgain": "دوباره این را نشان نده", | ||||||
|     "dontShowTrackOnlyWarnings": "هشدار 'فقط ردیابی' را نشان ندهید", |     "dontShowTrackOnlyWarnings": "هشدار 'فقط ردیابی' را نشان ندهید", | ||||||
|     "dontShowAPKOriginWarnings": "هشدارهای منبع APK را نشان ندهید", |     "dontShowAPKOriginWarnings": "هشدارهای منبع APK را نشان ندهید", | ||||||
|     "moveNonInstalledAppsToBottom": "Move Non-Installed Apps to Bottom of Apps View", |     "moveNonInstalledAppsToBottom": "برنامه های نصب نشده را به نمای پایین برنامه ها منتقل کنید", | ||||||
|     "gitlabPATLabel": "GitLab Personal Access Token (Enables Search)", |     "gitlabPATLabel": "رمز دسترسی شخصی GitLab (جستجو را فعال می کند)", | ||||||
|     "about": "About", |     "about": "درباره", | ||||||
|     "requiresCredentialsInSettings": "This needs additional credentials (in Settings)", |     "requiresCredentialsInSettings": "این به اعتبارنامه های اضافی نیاز دارد (در تنظیمات)", | ||||||
|     "checkOnStart": "Check Once on Start", |     "checkOnStart": "بررسی در شروع", | ||||||
|     "tryInferAppIdFromCode": "Try inferring App ID from source code", |     "tryInferAppIdFromCode": "شناسه برنامه را از کد منبع استنباط کنید", | ||||||
|     "removeAppQuestion": { |     "removeAppQuestion": { | ||||||
|         "one": "برنامه حذف شود؟", |         "one": "برنامه حذف شود؟", | ||||||
|         "other": "برنامه ها حذف شوند؟" |         "other": "برنامه ها حذف شوند؟" | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ | |||||||
|     "fallbackToOlderReleases": "Откатиться к более старым версиям", |     "fallbackToOlderReleases": "Откатиться к более старым версиям", | ||||||
|     "filterReleaseTitlesByRegEx": "Фильтровать заголовки релизов с помощью регулярного выражения", |     "filterReleaseTitlesByRegEx": "Фильтровать заголовки релизов с помощью регулярного выражения", | ||||||
|     "invalidRegEx": "Неверное регулярное выражение", |     "invalidRegEx": "Неверное регулярное выражение", | ||||||
|     "noDescription": "Нет описания" |     "noDescription": "Нет описания", | ||||||
|     "cancel": "Отмена", |     "cancel": "Отмена", | ||||||
|     "continue": "Продолжить", |     "continue": "Продолжить", | ||||||
|     "requiredInBrackets": "(Обязательно)", |     "requiredInBrackets": "(Обязательно)", | ||||||
| @@ -68,7 +68,7 @@ | |||||||
|     "removeSelectedAppsQuestion": "Удалить выбранные приложения?", |     "removeSelectedAppsQuestion": "Удалить выбранные приложения?", | ||||||
|     "removeSelectedApps": "Удалить выбранные приложения", |     "removeSelectedApps": "Удалить выбранные приложения", | ||||||
|     "updateX": "Обновить {}", |     "updateX": "Обновить {}", | ||||||
|     "installX": "Установить {}" |     "installX": "Установить {}", | ||||||
|     "markXTrackOnlyAsUpdated": "Отметить {}\n(Только для отслеживания)\nкак обновленное", |     "markXTrackOnlyAsUpdated": "Отметить {}\n(Только для отслеживания)\nкак обновленное", | ||||||
|     "changeX": "Изменить {}", |     "changeX": "Изменить {}", | ||||||
|     "installUpdateApps": "Установить/Обновить приложения", |     "installUpdateApps": "Установить/Обновить приложения", | ||||||
| @@ -90,7 +90,7 @@ | |||||||
|     "filterActive": "Фильтр *", |     "filterActive": "Фильтр *", | ||||||
|     "filterApps": "Фильтровать приложения", |     "filterApps": "Фильтровать приложения", | ||||||
|     "appName": "Название приложения", |     "appName": "Название приложения", | ||||||
|     "author": "Автор" |     "author": "Автор", | ||||||
|     "upToDateApps": "Приложения со свежими обновлениями", |     "upToDateApps": "Приложения со свежими обновлениями", | ||||||
|     "nonInstalledApps": "Неустановленные приложения", |     "nonInstalledApps": "Неустановленные приложения", | ||||||
|     "importExport": "Импорт/экспорт", |     "importExport": "Импорт/экспорт", | ||||||
| @@ -207,7 +207,7 @@ | |||||||
|     "categoryDeleteWarning": "Все приложения в удаленных категориях будут помечены как без категории.", |     "categoryDeleteWarning": "Все приложения в удаленных категориях будут помечены как без категории.", | ||||||
|     "addCategory": "Добавить категорию", |     "addCategory": "Добавить категорию", | ||||||
|     "label": "Метка", |     "label": "Метка", | ||||||
|     "language": "Язык" |     "language": "Язык", | ||||||
|     "copiedToClipboard": "Скопировано в буфер обмена", |     "copiedToClipboard": "Скопировано в буфер обмена", | ||||||
|     "storagePermissionDenied": "Отказано в доступе к хранилищу", |     "storagePermissionDenied": "Отказано в доступе к хранилищу", | ||||||
|     "selectedCategorizeWarning": "Это заменит все текущие настройки категорий для выбранных приложений.", |     "selectedCategorizeWarning": "Это заменит все текущие настройки категорий для выбранных приложений.", | ||||||
|   | |||||||
| @@ -135,7 +135,7 @@ | |||||||
|     "showWebInAppView": "在应用详情页显示来源网页", |     "showWebInAppView": "在应用详情页显示来源网页", | ||||||
|     "pinUpdates": "将待更新应用置顶", |     "pinUpdates": "将待更新应用置顶", | ||||||
|     "updates": "更新", |     "updates": "更新", | ||||||
|     "sourceSpecific": "来源相关", |     "sourceSpecific": "来源", | ||||||
|     "appSource": "源代码", |     "appSource": "源代码", | ||||||
|     "noLogs": "无日志", |     "noLogs": "无日志", | ||||||
|     "appLogs": "日志", |     "appLogs": "日志", | ||||||
| @@ -229,11 +229,11 @@ | |||||||
|     "dontShowTrackOnlyWarnings": "不显示“仅追踪”模式警告", |     "dontShowTrackOnlyWarnings": "不显示“仅追踪”模式警告", | ||||||
|     "dontShowAPKOriginWarnings": "不显示 APK 文件来源警告", |     "dontShowAPKOriginWarnings": "不显示 APK 文件来源警告", | ||||||
|     "moveNonInstalledAppsToBottom": "将未安装应用置底", |     "moveNonInstalledAppsToBottom": "将未安装应用置底", | ||||||
|     "gitlabPATLabel": "GitLab 个人访问令牌(用于搜索)", |     "gitlabPATLabel": "GitLab 个人访问令牌(用于搜索应用)", | ||||||
|     "about": "相关文档", |     "about": "相关文档", | ||||||
|     "requiresCredentialsInSettings": "此功能需要额外的凭据(在“设置”中添加)", |     "requiresCredentialsInSettings": "此功能需要额外的凭据(在“设置”中添加)", | ||||||
|     "checkOnStart": "启动时进行一次检查", |     "checkOnStart": "启动时进行一次检查", | ||||||
|     "tryInferAppIdFromCode": "Try inferring App ID from source code", |     "tryInferAppIdFromCode": "尝试从源代码推断应用 ID", | ||||||
|     "removeAppQuestion": { |     "removeAppQuestion": { | ||||||
|         "one": "是否删除应用?", |         "one": "是否删除应用?", | ||||||
|         "other": "是否删除应用?" |         "other": "是否删除应用?" | ||||||
|   | |||||||
| @@ -37,8 +37,10 @@ class APKPure extends AppSource { | |||||||
|     String appId = (await tryInferringAppId(standardUrl))!; |     String appId = (await tryInferringAppId(standardUrl))!; | ||||||
|     String host = Uri.parse(standardUrl).host; |     String host = Uri.parse(standardUrl).host; | ||||||
|     var res = await sourceRequest('$standardUrl/download'); |     var res = await sourceRequest('$standardUrl/download'); | ||||||
|     if (res.statusCode == 200) { |     var resChangelog = await sourceRequest(standardUrl); | ||||||
|  |     if (res.statusCode == 200 && resChangelog.statusCode == 200) { | ||||||
|       var html = parse(res.body); |       var html = parse(res.body); | ||||||
|  |       var htmlChangelog = parse(resChangelog.body); | ||||||
|       String? version = html.querySelector('span.info-sdk span')?.text.trim(); |       String? version = html.querySelector('span.info-sdk span')?.text.trim(); | ||||||
|       if (version == null) { |       if (version == null) { | ||||||
|         throw NoVersionError(); |         throw NoVersionError(); | ||||||
| @@ -68,8 +70,11 @@ class APKPure extends AppSource { | |||||||
|           Uri.parse(standardUrl).pathSegments.reversed.last; |           Uri.parse(standardUrl).pathSegments.reversed.last; | ||||||
|       String appName = |       String appName = | ||||||
|           html.querySelector('h1.info-title')?.text.trim() ?? appId; |           html.querySelector('h1.info-title')?.text.trim() ?? appId; | ||||||
|  |       String? changeLog = htmlChangelog.querySelector("div.whats-new-info p:not(.date)")?.innerHtml | ||||||
|  |           .trim().replaceAll("<br>", "  \n"); | ||||||
|       return APKDetails(version, apkUrls, AppNames(author, appName), |       return APKDetails(version, apkUrls, AppNames(author, appName), | ||||||
|           releaseDate: releaseDate); |           releaseDate: releaseDate, | ||||||
|  |           changeLog: changeLog); | ||||||
|     } else { |     } else { | ||||||
|       throw getObtainiumHttpError(res); |       throw getObtainiumHttpError(res); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -111,8 +111,7 @@ class HTML extends AppSource { | |||||||
|           .where((element) => |           .where((element) => | ||||||
|               Uri.parse(element).path.toLowerCase().endsWith('.apk')) |               Uri.parse(element).path.toLowerCase().endsWith('.apk')) | ||||||
|           .toList(); |           .toList(); | ||||||
|       links.sort( |       links.sort((a, b) => compareAlphaNumeric(a, b)); | ||||||
|           (a, b) => compareAlphaNumeric(a.split('/').last, b.split('/').last)); |  | ||||||
|       if (additionalSettings['apkFilterRegEx'] != null) { |       if (additionalSettings['apkFilterRegEx'] != null) { | ||||||
|         var reg = RegExp(additionalSettings['apkFilterRegEx']); |         var reg = RegExp(additionalSettings['apkFilterRegEx']); | ||||||
|         links = links.where((element) => reg.hasMatch(element)).toList(); |         links = links.where((element) => reg.hasMatch(element)).toList(); | ||||||
| @@ -121,12 +120,11 @@ class HTML extends AppSource { | |||||||
|         throw NoReleasesError(); |         throw NoReleasesError(); | ||||||
|       } |       } | ||||||
|       var rel = links.last; |       var rel = links.last; | ||||||
|       var apkName = rel.split('/').last; |       var version = rel.hashCode.toString(); | ||||||
|       var version = apkName.substring(0, apkName.length - 4); |  | ||||||
|       List<String> apkUrls = |       List<String> apkUrls = | ||||||
|           [rel].map((e) => ensureAbsoluteUrl(e, uri)).toList(); |           [rel].map((e) => ensureAbsoluteUrl(e, uri)).toList(); | ||||||
|       return APKDetails( |       return APKDetails(version, apkUrls.map((e) => MapEntry(e, e)).toList(), | ||||||
|           version, getApkUrlsFromUrls(apkUrls), AppNames(uri.host, tr('app'))); |           AppNames(uri.host, tr('app'))); | ||||||
|     } else { |     } else { | ||||||
|       throw getObtainiumHttpError(res); |       throw getObtainiumHttpError(res); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ import 'package:easy_localization/src/easy_localization_controller.dart'; | |||||||
| // ignore: implementation_imports | // ignore: implementation_imports | ||||||
| import 'package:easy_localization/src/localization.dart'; | import 'package:easy_localization/src/localization.dart'; | ||||||
|  |  | ||||||
| const String currentVersion = '0.13.10'; | const String currentVersion = '0.13.14'; | ||||||
| const String currentReleaseTag = | const String currentReleaseTag = | ||||||
|     'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES |     'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,5 +1,3 @@ | |||||||
| import 'dart:ui'; |  | ||||||
|  |  | ||||||
| import 'package:easy_localization/easy_localization.dart'; | import 'package:easy_localization/easy_localization.dart'; | ||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:flutter/services.dart'; | import 'package:flutter/services.dart'; | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ import 'package:flutter_fgbg/flutter_fgbg.dart'; | |||||||
| import 'package:obtainium/providers/source_provider.dart'; | import 'package:obtainium/providers/source_provider.dart'; | ||||||
| import 'package:http/http.dart'; | import 'package:http/http.dart'; | ||||||
| import 'package:android_intent_plus/android_intent.dart'; | import 'package:android_intent_plus/android_intent.dart'; | ||||||
| import 'package:archive/archive_io.dart'; | import 'package:flutter_archive/flutter_archive.dart'; | ||||||
|  |  | ||||||
| class AppInMemory { | class AppInMemory { | ||||||
|   late App app; |   late App app; | ||||||
| @@ -264,7 +264,7 @@ class AppsProvider with ChangeNotifier { | |||||||
|       } else { |       } else { | ||||||
|         // Assume XAPK |         // Assume XAPK | ||||||
|         String xapkDirPath = '${downloadedFile.path}-dir'; |         String xapkDirPath = '${downloadedFile.path}-dir'; | ||||||
|         unzipFile(downloadedFile.path, '${downloadedFile.path}-dir'); |         await unzipFile(downloadedFile.path, '${downloadedFile.path}-dir'); | ||||||
|         xapkDir = Directory(xapkDirPath); |         xapkDir = Directory(xapkDirPath); | ||||||
|         var apks = xapkDir |         var apks = xapkDir | ||||||
|             .listSync() |             .listSync() | ||||||
| @@ -334,22 +334,22 @@ class AppsProvider with ChangeNotifier { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   void unzipFile(String filePath, String destinationPath) { |   Future<void> unzipFile(String filePath, String destinationPath) async { | ||||||
|     final inputStream = InputFileStream(filePath); |     await ZipFile.extractToDirectory(zipFile: File(filePath), destinationDir: Directory(destinationPath)); | ||||||
|     final archive = ZipDecoder().decodeBuffer(inputStream); |  | ||||||
|     extractArchiveToDisk(archive, destinationPath); |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   Future<void> installXApkDir(DownloadedXApkDir dir, |   Future<void> installXApkDir(DownloadedXApkDir dir, | ||||||
|       {bool silent = false}) async { |       {bool silent = false}) async { | ||||||
|     try { |     try { | ||||||
|       var somethingInstalled = false; |       var somethingInstalled = false; | ||||||
|       for (var apk in dir.extracted |       for (var file in dir.extracted.listSync(recursive: true, followLinks: false).whereType<File>()) { | ||||||
|           .listSync() |         if (file.path.toLowerCase().endsWith('.apk')) { | ||||||
|           .where((f) => f is File && f.path.toLowerCase().endsWith('.apk'))) { |           somethingInstalled = somethingInstalled || | ||||||
|         somethingInstalled = somethingInstalled || |               await installApk(DownloadedApk(dir.appId, file), silent: silent); | ||||||
|             await installApk(DownloadedApk(dir.appId, apk as File), |         } | ||||||
|                 silent: silent); |         else if (file.path.toLowerCase().endsWith('.obb')) { | ||||||
|  |           await moveObbFile(file, dir.appId); | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|       if (somethingInstalled) { |       if (somethingInstalled) { | ||||||
|         dir.file.delete(recursive: true); |         dir.file.delete(recursive: true); | ||||||
| @@ -388,6 +388,21 @@ class AppsProvider with ChangeNotifier { | |||||||
|     return installed; |     return installed; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   Future<void> moveObbFile(File file, String appId) async { | ||||||
|  |     if(!file.path.toLowerCase().endsWith('.obb')) return; | ||||||
|  |  | ||||||
|  |     // TODO: Does not support Android 11+ | ||||||
|  |     if ((await DeviceInfoPlugin().androidInfo).version.sdkInt <= 29) { | ||||||
|  |       await Permission.storage.request(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     String obbDirPath = "/storage/emulated/0/Android/obb/$appId"; | ||||||
|  |     Directory(obbDirPath).createSync(recursive: true); | ||||||
|  |  | ||||||
|  |     String obbFileName = file.path.split("/").last; | ||||||
|  |     await file.copy("$obbDirPath/$obbFileName"); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   void uninstallApp(String appId) async { |   void uninstallApp(String appId) async { | ||||||
|     var intent = AndroidIntent( |     var intent = AndroidIntent( | ||||||
|         action: 'android.intent.action.DELETE', |         action: 'android.intent.action.DELETE', | ||||||
| @@ -770,8 +785,10 @@ class AppsProvider with ChangeNotifier { | |||||||
|       if (attemptToCorrectInstallStatus) { |       if (attemptToCorrectInstallStatus) { | ||||||
|         app = getCorrectedInstallStatusAppIfPossible(app, info) ?? app; |         app = getCorrectedInstallStatusAppIfPossible(app, info) ?? app; | ||||||
|       } |       } | ||||||
|       File('${(await getAppsDir()).path}/${app.id}.json') |       if (!onlyIfExists || this.apps.containsKey(app.id)) { | ||||||
|           .writeAsStringSync(jsonEncode(app.toJson())); |         File('${(await getAppsDir()).path}/${app.id}.json') | ||||||
|  |             .writeAsStringSync(jsonEncode(app.toJson())); | ||||||
|  |       } | ||||||
|       try { |       try { | ||||||
|         this.apps.update( |         this.apps.update( | ||||||
|             app.id, (value) => AppInMemory(app, value.downloadProgress, info), |             app.id, (value) => AppInMemory(app, value.downloadProgress, info), | ||||||
|   | |||||||
							
								
								
									
										104
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -35,7 +35,7 @@ packages: | |||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.0.7" |     version: "2.0.7" | ||||||
|   archive: |   archive: | ||||||
|     dependency: "direct main" |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: archive |       name: archive | ||||||
|       sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a" |       sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a" | ||||||
| @@ -174,10 +174,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: dynamic_color |       name: dynamic_color | ||||||
|       sha256: "74dff1435a695887ca64899b8990004f8d1232b0e84bfc4faa1fdda7c6f57cc1" |       sha256: de4798a7069121aee12d5895315680258415de9b00e717723a1bd73d58f0126d | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.6.5" |     version: "1.6.6" | ||||||
|   easy_localization: |   easy_localization: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -231,6 +231,14 @@ packages: | |||||||
|     description: flutter |     description: flutter | ||||||
|     source: sdk |     source: sdk | ||||||
|     version: "0.0.0" |     version: "0.0.0" | ||||||
|  |   flutter_archive: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: flutter_archive | ||||||
|  |       sha256: aec85d1da65e5b33a529db00a86df0b8e92bda78088a7cfaeeba5187701d0d85 | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "5.0.0" | ||||||
|   flutter_fgbg: |   flutter_fgbg: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -251,18 +259,18 @@ packages: | |||||||
|     dependency: "direct dev" |     dependency: "direct dev" | ||||||
|     description: |     description: | ||||||
|       name: flutter_lints |       name: flutter_lints | ||||||
|       sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c |       sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.0.1" |     version: "2.0.2" | ||||||
|   flutter_local_notifications: |   flutter_local_notifications: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: flutter_local_notifications |       name: flutter_local_notifications | ||||||
|       sha256: "812791d43ccfc1b443a0d39fa02a206fc228c597e28ff9337e09e3ca8d370391" |       sha256: "3cc40fe8c50ab8383f3e053a499f00f975636622ecdc8e20a77418ece3b1e975" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "14.1.1" |     version: "15.1.0+1" | ||||||
|   flutter_local_notifications_linux: |   flutter_local_notifications_linux: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -288,10 +296,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: flutter_markdown |       name: flutter_markdown | ||||||
|       sha256: dc6d5258653f6857135b32896ccda7f7af0c54dcec832495ad6835154c6c77c0 |       sha256: "4b1bfbb802d76320a1a46d9ce984106135093efd9d969765d07c2125af107bdf" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "0.6.15" |     version: "0.6.17" | ||||||
|   flutter_plugin_android_lifecycle: |   flutter_plugin_android_lifecycle: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -330,10 +338,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: http |       name: http | ||||||
|       sha256: "4c3f04bfb64d3efd508d06b41b825542f08122d30bda4933fb95c069d22a4fa3" |       sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.0.0" |     version: "1.1.0" | ||||||
|   http_parser: |   http_parser: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -514,42 +522,42 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: permission_handler |       name: permission_handler | ||||||
|       sha256: "1b6b3e73f0bcbc856548bbdfb1c33084a401c4f143e220629a9055233d76c331" |       sha256: "415af30ba76a84faccfe1eb251fe1e4fdc790f876924c65ad7d6ed7a1404bcd6" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "10.3.0" |     version: "10.4.2" | ||||||
|   permission_handler_android: |   permission_handler_android: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: permission_handler_android |       name: permission_handler_android | ||||||
|       sha256: "8f6a95ccbca13766882f95d32684d7c9bfe6c45650c32bedba948ef1c6a4ddf7" |       sha256: "3b61f3da3b1c83bc3fb6a2b431e8dab01d0e5b45f6a3d9c7609770ec88b2a89e" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "10.2.3" |     version: "10.3.0" | ||||||
|   permission_handler_apple: |   permission_handler_apple: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: permission_handler_apple |       name: permission_handler_apple | ||||||
|       sha256: "08dcb6ce628ac0b257e429944b4c652c2a4e6af725bdf12b498daa2c6b2b1edb" |       sha256: "7a187b671a39919462af2b5e813148365b71a615979165a119868d667fe90c03" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "9.1.0" |     version: "9.1.3" | ||||||
|   permission_handler_platform_interface: |   permission_handler_platform_interface: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: permission_handler_platform_interface |       name: permission_handler_platform_interface | ||||||
|       sha256: de20a5c3269229c1ae2e5a6b822f6cb59578b23e8255c93fbeebfc82116e6b11 |       sha256: "463a07cb7cc6c758a7a1c7da36ce666bb80a0b4b5e92df0fa36872e0ed456993" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "3.10.0" |     version: "3.11.1" | ||||||
|   permission_handler_windows: |   permission_handler_windows: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: permission_handler_windows |       name: permission_handler_windows | ||||||
|       sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b |       sha256: cc074aace208760f1eee6aa4fae766b45d947df85bc831cde77009cdb4720098 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "0.1.2" |     version: "0.1.3" | ||||||
|   petitparser: |   petitparser: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -618,58 +626,58 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: shared_preferences |       name: shared_preferences | ||||||
|       sha256: "396f85b8afc6865182610c0a2fc470853d56499f75f7499e2a73a9f0539d23d0" |       sha256: "0344316c947ffeb3a529eac929e1978fcd37c26be4e8468628bac399365a3ca1" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.1.2" |     version: "2.2.0" | ||||||
|   shared_preferences_android: |   shared_preferences_android: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: shared_preferences_android |       name: shared_preferences_android | ||||||
|       sha256: "6478c6bbbecfe9aced34c483171e90d7c078f5883558b30ec3163cf18402c749" |       sha256: fe8401ec5b6dcd739a0fe9588802069e608c3fdbfd3c3c93e546cf2f90438076 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.1.4" |     version: "2.2.0" | ||||||
|   shared_preferences_foundation: |   shared_preferences_foundation: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: shared_preferences_foundation |       name: shared_preferences_foundation | ||||||
|       sha256: e014107bb79d6d3297196f4f2d0db54b5d1f85b8ea8ff63b8e8b391a02700feb |       sha256: b046999bf0ff58f04c364491bb803dcfa8f42e47b19c75478f53d323684a8cc1 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.2.2" |     version: "2.3.1" | ||||||
|   shared_preferences_linux: |   shared_preferences_linux: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: shared_preferences_linux |       name: shared_preferences_linux | ||||||
|       sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa" |       sha256: "71d6806d1449b0a9d4e85e0c7a917771e672a3d5dc61149cc9fac871115018e1" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.2.0" |     version: "2.3.0" | ||||||
|   shared_preferences_platform_interface: |   shared_preferences_platform_interface: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: shared_preferences_platform_interface |       name: shared_preferences_platform_interface | ||||||
|       sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d |       sha256: "23b052f17a25b90ff2b61aad4cc962154da76fb62848a9ce088efe30d7c50ab1" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.2.0" |     version: "2.3.0" | ||||||
|   shared_preferences_web: |   shared_preferences_web: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: shared_preferences_web |       name: shared_preferences_web | ||||||
|       sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" |       sha256: "7347b194fb0bbeb4058e6a4e87ee70350b6b2b90f8ac5f8bd5b3a01548f6d33a" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.1.0" |     version: "2.2.0" | ||||||
|   shared_preferences_windows: |   shared_preferences_windows: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: shared_preferences_windows |       name: shared_preferences_windows | ||||||
|       sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173" |       sha256: f95e6a43162bce43c9c3405f3eb6f39e5b5d11f65fab19196cf8225e2777624d | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.2.0" |     version: "2.3.0" | ||||||
|   sky_engine: |   sky_engine: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: flutter |     description: flutter | ||||||
| @@ -767,10 +775,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: url_launcher |       name: url_launcher | ||||||
|       sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3 |       sha256: "781bd58a1eb16069412365c98597726cd8810ae27435f04b3b4d3a470bacd61e" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "6.1.11" |     version: "6.1.12" | ||||||
|   url_launcher_android: |   url_launcher_android: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -815,18 +823,18 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: url_launcher_web |       name: url_launcher_web | ||||||
|       sha256: "6bb1e5d7fe53daf02a8fee85352432a40b1f868a81880e99ec7440113d5cfcab" |       sha256: cc26720eefe98c1b71d85f9dc7ef0cada5132617046369d9dc296b3ecaa5cbb4 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.0.17" |     version: "2.0.18" | ||||||
|   url_launcher_windows: |   url_launcher_windows: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: url_launcher_windows |       name: url_launcher_windows | ||||||
|       sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771" |       sha256: "7967065dd2b5fccc18c653b97958fdf839c5478c28e767c61ee879f4e7882422" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "3.0.6" |     version: "3.0.7" | ||||||
|   uuid: |   uuid: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -855,10 +863,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: webview_flutter_android |       name: webview_flutter_android | ||||||
|       sha256: "532135f6f6b8030cd039f30eab23f340d650350e29f38e9b37d2eaad028f1018" |       sha256: "1c93e96f3069bacdc734fad6b7e1d3a480fd516a3ae5b8858becf7f07515a2f3" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "3.8.0" |     version: "3.8.2" | ||||||
|   webview_flutter_platform_interface: |   webview_flutter_platform_interface: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -871,18 +879,18 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: webview_flutter_wkwebview |       name: webview_flutter_wkwebview | ||||||
|       sha256: ecc9e9ea15216afc5ba3b1f14aa19414ceba526e57b19cebd970bfa91a0f4058 |       sha256: a8d7e8b4be2a79e83b70235369971ec97d14df4cdbb40d305a8eeae67d8e6432 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "3.5.0" |     version: "3.6.2" | ||||||
|   win32: |   win32: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: win32 |       name: win32 | ||||||
|       sha256: "1414f27dd781737e51afa9711f2ac2ace6ab4498ee98e20863fa5505aa00c58c" |       sha256: dfdf0136e0aa7a1b474ea133e67cb0154a0acd2599c4f3ada3b49d38d38793ee | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "5.0.4" |     version: "5.0.5" | ||||||
|   win32_registry: |   win32_registry: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -917,4 +925,4 @@ packages: | |||||||
|     version: "3.1.2" |     version: "3.1.2" | ||||||
| sdks: | sdks: | ||||||
|   dart: ">=3.0.0 <4.0.0" |   dart: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.4.0-17.0.pre" |   flutter: ">=3.10.0" | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev | |||||||
| # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | ||||||
| # In Windows, build-name is used as the major, minor, and patch parts | # In Windows, build-name is used as the major, minor, and patch parts | ||||||
| # of the product and file versions while build-number is used as the build suffix. | # of the product and file versions while build-number is used as the build suffix. | ||||||
| version: 0.13.10+174 # When changing this, update the tag in main() accordingly | version: 0.13.14+178 # When changing this, update the tag in main() accordingly | ||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: '>=2.18.2 <3.0.0' |   sdk: '>=2.18.2 <3.0.0' | ||||||
| @@ -38,7 +38,7 @@ dependencies: | |||||||
|   cupertino_icons: ^1.0.5 |   cupertino_icons: ^1.0.5 | ||||||
|   path_provider: ^2.0.11 |   path_provider: ^2.0.11 | ||||||
|   flutter_fgbg: ^0.2.0 # Try removing reliance on this |   flutter_fgbg: ^0.2.0 # Try removing reliance on this | ||||||
|   flutter_local_notifications: ^14.0.0+1 |   flutter_local_notifications: ^15.1.0+1 | ||||||
|   provider: ^6.0.3 |   provider: ^6.0.3 | ||||||
|   http: ^1.0.0 |   http: ^1.0.0 | ||||||
|   webview_flutter: ^4.0.0 |   webview_flutter: ^4.0.0 | ||||||
| @@ -63,7 +63,7 @@ dependencies: | |||||||
|   easy_localization: ^3.0.1 |   easy_localization: ^3.0.1 | ||||||
|   android_intent_plus: ^4.0.0 |   android_intent_plus: ^4.0.0 | ||||||
|   flutter_markdown: ^0.6.14 |   flutter_markdown: ^0.6.14 | ||||||
|   archive: ^3.3.7 |   flutter_archive: ^5.0.0 | ||||||
|  |  | ||||||
|  |  | ||||||
| dev_dependencies: | dev_dependencies: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user