Compare commits

...

10 Commits

Author SHA1 Message Date
Imran Remtulla
e386b5ab8a Merge pull request #411 from ImranR98/dev
Bugfix: App pinning not working (#410)
2023-04-01 00:24:56 -04:00
Imran Remtulla
abf7be222d Bugfix: App pinning not working (#410) 2023-04-01 00:24:16 -04:00
Imran Remtulla
4c5b9304c0 Merge pull request #409 from ImranR98/dev
Bugfix for prev. commit
2023-03-31 15:40:18 -04:00
Imran Remtulla
4cfe6af044 Bugfix for prev. commit 2023-03-31 15:39:52 -04:00
Imran Remtulla
3f0c4068dd Merge pull request #408 from ImranR98/dev
Bugfix #405 + general categories bugfixes
2023-03-31 15:37:11 -04:00
Imran Remtulla
7981ca29c5 Bugfix #405 + general categories bugfixes 2023-03-31 15:36:51 -04:00
Imran Remtulla
187efa8fc5 Merge pull request #406 from ImranR98/dev
Fixed Mullvad web scraping (again)
2023-03-31 09:25:50 -04:00
Imran Remtulla
cd27ff7f2d Fixed Mullvad web scraping (again) 2023-03-31 09:24:15 -04:00
Imran Remtulla
6f6a25511b Merge pull request #402 from ImranR98/dev
Added "Group by Category" setting
2023-03-30 23:41:06 -04:00
Imran Remtulla
4e17bbcfd1 Added "Group by Category" setting 2023-03-30 23:40:32 -04:00
17 changed files with 213 additions and 64 deletions

View File

@@ -220,6 +220,7 @@
"importFromURLsInFile": "Importieren von URLs aus Datei ( z.B. OPML)", "importFromURLsInFile": "Importieren von URLs aus Datei ( z.B. OPML)",
"versionDetection": "Versionserkennung", "versionDetection": "Versionserkennung",
"standardVersionDetection": "Standardversionserkennung", "standardVersionDetection": "Standardversionserkennung",
"groupByCategory": "Group by Category",
"removeAppQuestion": { "removeAppQuestion": {
"one": "App entfernen?", "one": "App entfernen?",
"other": "App entfernen?" "other": "App entfernen?"

View File

@@ -220,6 +220,7 @@
"importFromURLsInFile": "Import from URLs in File (like OPML)", "importFromURLsInFile": "Import from URLs in File (like OPML)",
"versionDetection": "Version Detection", "versionDetection": "Version Detection",
"standardVersionDetection": "Standard version detection", "standardVersionDetection": "Standard version detection",
"groupByCategory": "Group by Category",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Remove App?", "one": "Remove App?",
"other": "Remove Apps?" "other": "Remove Apps?"

View File

@@ -220,6 +220,7 @@
"importFromURLsInFile": "وارد کردن از آدرس های اینترنتی موجود در فایل (مانند OPML)", "importFromURLsInFile": "وارد کردن از آدرس های اینترنتی موجود در فایل (مانند OPML)",
"versionDetection": "تشخیص نسخه", "versionDetection": "تشخیص نسخه",
"standardVersionDetection": "تشخیص نسخه استاندارد", "standardVersionDetection": "تشخیص نسخه استاندارد",
"groupByCategory": "Group by Category",
"removeAppQuestion": { "removeAppQuestion": {
"one": "برنامه حذف شود؟", "one": "برنامه حذف شود؟",
"other": "برنامه ها حذف شوند؟" "other": "برنامه ها حذف شوند؟"

View File

@@ -220,6 +220,7 @@
"importFromURLsInFile": "Importer à partir d'URL dans un fichier (comme OPML)", "importFromURLsInFile": "Importer à partir d'URL dans un fichier (comme OPML)",
"versionDetection": "Détection des versions", "versionDetection": "Détection des versions",
"standardVersionDetection": "Détection de version standard", "standardVersionDetection": "Détection de version standard",
"groupByCategory": "Group by Category",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Supprimer l'application ?", "one": "Supprimer l'application ?",
"other": "Supprimer les applications ?" "other": "Supprimer les applications ?"

View File

@@ -219,6 +219,7 @@
"importFromURLsInFile": "Importálás fájlban található URL-ből (mint pl. OPML)", "importFromURLsInFile": "Importálás fájlban található URL-ből (mint pl. OPML)",
"versionDetection": "Verzió érzékelés", "versionDetection": "Verzió érzékelés",
"standardVersionDetection": "Alapért. verzió érzékelés", "standardVersionDetection": "Alapért. verzió érzékelés",
"groupByCategory": "Group by Category",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Eltávolítja az alkalmazást?", "one": "Eltávolítja az alkalmazást?",
"other": "Eltávolítja az alkalmazást?" "other": "Eltávolítja az alkalmazást?"

View File

@@ -220,6 +220,7 @@
"importFromURLsInFile": "Importa da URL in file (come OPML)", "importFromURLsInFile": "Importa da URL in file (come OPML)",
"versionDetection": "Rilevamento di versione", "versionDetection": "Rilevamento di versione",
"standardVersionDetection": "Rilevamento di versione standard", "standardVersionDetection": "Rilevamento di versione standard",
"groupByCategory": "Group by Category",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Rimuovere l'App?", "one": "Rimuovere l'App?",
"other": "Rimuovere le App?" "other": "Rimuovere le App?"

View File

@@ -220,6 +220,7 @@
"importFromURLsInFile": "ファイルOPMLなど内のURLからインポート", "importFromURLsInFile": "ファイルOPMLなど内のURLからインポート",
"versionDetection": "バージョン検出", "versionDetection": "バージョン検出",
"standardVersionDetection": "標準のバージョン検出", "standardVersionDetection": "標準のバージョン検出",
"groupByCategory": "Group by Category",
"removeAppQuestion": { "removeAppQuestion": {
"one": "アプリを削除しますか?", "one": "アプリを削除しますか?",
"other": "アプリを削除しますか?" "other": "アプリを削除しますか?"

View File

@@ -220,6 +220,7 @@
"importFromURLsInFile": "Import from URLs in File (like OPML)", "importFromURLsInFile": "Import from URLs in File (like OPML)",
"versionDetection": "Version Detection", "versionDetection": "Version Detection",
"standardVersionDetection": "Standard version detection", "standardVersionDetection": "Standard version detection",
"groupByCategory": "Group by Category",
"removeAppQuestion": { "removeAppQuestion": {
"one": "删除应用?", "one": "删除应用?",
"other": "删除应用?" "other": "删除应用?"

View File

@@ -1,7 +1,6 @@
import 'package:html/parser.dart'; import 'package:html/parser.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:obtainium/app_sources/github.dart'; import 'package:obtainium/app_sources/github.dart';
import 'package:obtainium/app_sources/html.dart';
import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/custom_errors.dart';
import 'package:obtainium/providers/source_provider.dart'; import 'package:obtainium/providers/source_provider.dart';
@@ -29,24 +28,41 @@ class Mullvad extends AppSource {
String standardUrl, String standardUrl,
Map<String, dynamic> additionalSettings, Map<String, dynamic> additionalSettings,
) async { ) async {
var details = await HTML().getLatestAPKDetails( Response res = await get(Uri.parse('$standardUrl/en/download/android'));
'$standardUrl/en/download/android', additionalSettings); if (res.statusCode == 200) {
var fileName = details.apkUrls[0].split('/').last; var versions = parse(res.body)
var versionMatch = RegExp('[0-9]+(\\.[0-9]+)+').firstMatch(fileName); .querySelectorAll('p')
if (versionMatch == null) { .map((e) => e.innerHtml)
throw NoVersionError(); .where((p) => p.contains('Latest version: '))
.map((e) {
var match = RegExp('[0-9]+(\\.[0-9]+)*').firstMatch(e);
if (match == null) {
return '';
} else {
return e.substring(match.start, match.end);
}
})
.where((element) => element.isNotEmpty)
.toList();
if (versions.isEmpty) {
throw NoVersionError();
}
String? changeLog;
try {
changeLog = (await GitHub().getLatestAPKDetails(
'https://github.com/mullvad/mullvadvpn-app',
{'fallbackToOlderReleases': true}))
.changeLog;
} catch (e) {
// Ignore
}
return APKDetails(
versions[0],
['https://mullvad.net/download/app/apk/latest'],
AppNames(name, 'Mullvad-VPN'),
changeLog: changeLog);
} else {
throw getObtainiumHttpError(res);
} }
details.version = fileName.substring(versionMatch.start, versionMatch.end);
details.names = AppNames(name, 'Mullvad-VPN');
try {
details.changeLog = (await GitHub().getLatestAPKDetails(
'https://github.com/mullvad/mullvadvpn-app',
{'fallbackToOlderReleases': true}))
.changeLog;
} catch (e) {
print(e);
// Ignore
}
return details;
} }
} }

View File

@@ -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.11.16'; const String currentVersion = '0.11.20';
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

View File

@@ -187,6 +187,25 @@ class AppsPageState extends State<AppsPage> {
} }
listedApps = [...tempPinned, ...tempNotPinned]; listedApps = [...tempPinned, ...tempNotPinned];
List<String?> getListedCategories() {
var temp = listedApps
.map((e) => e.app.categories.isNotEmpty ? e.app.categories : [null]);
return temp.isNotEmpty
? {
...temp.reduce((v, e) => [...v, ...e])
}.toList()
: [];
}
var listedCategories = getListedCategories();
listedCategories.sort((a, b) {
return a != null && b != null
? a.compareTo(b)
: a == null
? 1
: -1;
});
showChangeLogDialog( showChangeLogDialog(
String? changesUrl, AppSource appSource, String changeLog, int index) { String? changesUrl, AppSource appSource, String changeLog, int index) {
showDialog( showDialog(
@@ -402,17 +421,38 @@ class AppsPageState extends State<AppsPage> {
], ],
); );
var transparent = const Color.fromARGB(0, 0, 0, 0).value; var transparent =
Theme.of(context).colorScheme.background.withAlpha(0).value;
List<double> stops = [
...listedApps[index]
.app
.categories
.asMap()
.entries
.map((e) =>
((e.key / (listedApps[index].app.categories.length - 1))))
.toList(),
1
];
if (stops.length == 2) {
stops[0] = 1;
}
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border.symmetric( gradient: LinearGradient(
vertical: BorderSide( stops: stops,
width: 4, begin: const Alignment(-1, 0),
color: Color(listedApps[index].app.categories.isNotEmpty end: const Alignment(-0.97, 0),
? settingsProvider.categories[ colors: [
listedApps[index].app.categories.first] ?? ...listedApps[index]
transparent .app
: transparent)))), .categories
.map((e) =>
Color(settingsProvider.categories[e] ?? transparent)
.withAlpha(255))
.toList(),
Color(transparent)
])),
child: ListTile( child: ListTile(
tileColor: listedApps[index].app.pinned tileColor: listedApps[index].app.pinned
? Colors.grey.withOpacity(0.1) ? Colors.grey.withOpacity(0.1)
@@ -465,6 +505,28 @@ class AppsPageState extends State<AppsPage> {
)); ));
} }
getCategoryCollapsibleTile(int index) {
var tiles = listedApps
.asMap()
.entries
.where((e) =>
e.value.app.categories.contains(listedCategories[index]) ||
e.value.app.categories.isEmpty && listedCategories[index] == null)
.map((e) => getSingleAppHorizTile(e.key))
.toList();
capFirstChar(String str) => str[0].toUpperCase() + str.substring(1);
return ExpansionTile(
initiallyExpanded: true,
title: Text(
capFirstChar(listedCategories[index] ?? tr('noCategory')),
style: const TextStyle(fontWeight: FontWeight.bold),
),
controlAffinity: ListTileControlAffinity.leading,
trailing: Text(tiles.length.toString()),
children: tiles);
}
getSelectAllButton() { getSelectAllButton() {
return selectedApps.isEmpty return selectedApps.isEmpty
? TextButton.icon( ? TextButton.icon(
@@ -673,14 +735,12 @@ class AppsPageState extends State<AppsPage> {
} }
pinSelectedApps() { pinSelectedApps() {
() { var pinStatus = selectedApps.where((element) => element.pinned).isEmpty;
var pinStatus = selectedApps.where((element) => element.pinned).isEmpty; appsProvider.saveApps(selectedApps.map((e) {
appsProvider.saveApps(selectedApps.map((e) { e.pinned = pinStatus;
e.pinned = pinStatus; return e;
return e; }).toList());
}).toList()); Navigator.of(context).pop();
Navigator.of(context).pop();
};
} }
resetSelectedAppsInstallStatuses() { resetSelectedAppsInstallStatuses() {
@@ -903,6 +963,22 @@ class AppsPageState extends State<AppsPage> {
); );
} }
getDisplayedList() {
return settingsProvider.groupByCategory &&
!(listedCategories.isEmpty ||
(listedCategories.length == 1 && listedCategories[0] == null))
? SliverList(
delegate:
SliverChildBuilderDelegate((BuildContext context, int index) {
return getCategoryCollapsibleTile(index);
}, childCount: listedCategories.length))
: SliverList(
delegate:
SliverChildBuilderDelegate((BuildContext context, int index) {
return getSingleAppHorizTile(index);
}, childCount: listedApps.length));
}
return Scaffold( return Scaffold(
backgroundColor: Theme.of(context).colorScheme.surface, backgroundColor: Theme.of(context).colorScheme.surface,
body: RefreshIndicator( body: RefreshIndicator(
@@ -922,11 +998,7 @@ class AppsPageState extends State<AppsPage> {
child: CustomScrollView(slivers: <Widget>[ child: CustomScrollView(slivers: <Widget>[
CustomAppBar(title: tr('appsString')), CustomAppBar(title: tr('appsString')),
...getLoadingWidgets(), ...getLoadingWidgets(),
SliverList( getDisplayedList()
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return getSingleAppHorizTile(index);
}, childCount: listedApps.length))
])), ])),
persistentFooterButtons: appsProvider.apps.isEmpty persistentFooterButtons: appsProvider.apps.isEmpty
? null ? null

View File

@@ -133,7 +133,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
} }
} }
}); });
settingsProvider.categories = cats; appsProvider.addMissingCategories(settingsProvider);
showError(tr('importedX', args: [plural('apps', value)]), context); showError(tr('importedX', args: [plural('apps', value)]), context);
}); });
} else { } else {

View File

@@ -6,6 +6,7 @@ import 'package:obtainium/components/custom_app_bar.dart';
import 'package:obtainium/components/generated_form.dart'; import 'package:obtainium/components/generated_form.dart';
import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/custom_errors.dart';
import 'package:obtainium/main.dart'; import 'package:obtainium/main.dart';
import 'package:obtainium/providers/apps_provider.dart';
import 'package:obtainium/providers/logs_provider.dart'; import 'package:obtainium/providers/logs_provider.dart';
import 'package:obtainium/providers/settings_provider.dart'; import 'package:obtainium/providers/settings_provider.dart';
import 'package:obtainium/providers/source_provider.dart'; import 'package:obtainium/providers/source_provider.dart';
@@ -262,6 +263,18 @@ class _SettingsPageState extends State<SettingsPage> {
}) })
], ],
), ),
height16,
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(tr('groupByCategory')),
Switch(
value: settingsProvider.groupByCategory,
onChanged: (value) {
settingsProvider.groupByCategory = value;
})
],
),
const Divider( const Divider(
height: 16, height: 16,
), ),
@@ -432,6 +445,7 @@ class _CategoryEditorSelectorState extends State<CategoryEditorSelector> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var settingsProvider = context.watch<SettingsProvider>(); var settingsProvider = context.watch<SettingsProvider>();
var appsProvider = context.watch<AppsProvider>();
storedValues = settingsProvider.categories.map((key, value) => MapEntry( storedValues = settingsProvider.categories.map((key, value) => MapEntry(
key, key,
MapEntry(value, MapEntry(value,
@@ -455,8 +469,9 @@ class _CategoryEditorSelectorState extends State<CategoryEditorSelector> {
if (!isBuilding) { if (!isBuilding) {
storedValues = storedValues =
values['categories'] as Map<String, MapEntry<int, bool>>; values['categories'] as Map<String, MapEntry<int, bool>>;
settingsProvider.categories = settingsProvider.setCategories(
storedValues.map((key, value) => MapEntry(key, value.key)); storedValues.map((key, value) => MapEntry(key, value.key)),
appsProvider: appsProvider);
if (widget.onSelected != null) { if (widget.onSelected != null) {
widget.onSelected!(storedValues.keys widget.onSelected!(storedValues.keys
.where((k) => storedValues[k]!.value) .where((k) => storedValues[k]!.value)

View File

@@ -757,6 +757,18 @@ class AppsProvider with ChangeNotifier {
await intent.launch(); await intent.launch();
} }
addMissingCategories(SettingsProvider settingsProvider) {
var cats = settingsProvider.categories;
apps.forEach((key, value) {
for (var c in value.app.categories) {
if (!cats.containsKey(c)) {
cats[c] = generateRandomLightColor().value;
}
}
});
settingsProvider.setCategories(cats, appsProvider: this);
}
Future<App?> checkUpdate(String appId) async { Future<App?> checkUpdate(String appId) async {
App? currentApp = apps[appId]!.app; App? currentApp = apps[appId]!.app;
SourceProvider sourceProvider = SourceProvider(); SourceProvider sourceProvider = SourceProvider();

View File

@@ -7,6 +7,8 @@ import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:obtainium/app_sources/github.dart'; import 'package:obtainium/app_sources/github.dart';
import 'package:obtainium/main.dart'; import 'package:obtainium/main.dart';
import 'package:obtainium/providers/apps_provider.dart';
import 'package:obtainium/providers/source_provider.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
@@ -139,6 +141,15 @@ class SettingsProvider with ChangeNotifier {
notifyListeners(); notifyListeners();
} }
bool get groupByCategory {
return prefs?.getBool('groupByCategory') ?? false;
}
set groupByCategory(bool show) {
prefs?.setBool('groupByCategory', show);
notifyListeners();
}
String? getSettingString(String settingId) { String? getSettingString(String settingId) {
return prefs?.getString(settingId); return prefs?.getString(settingId);
} }
@@ -151,7 +162,22 @@ class SettingsProvider with ChangeNotifier {
Map<String, int> get categories => Map<String, int> get categories =>
Map<String, int>.from(jsonDecode(prefs?.getString('categories') ?? '{}')); Map<String, int>.from(jsonDecode(prefs?.getString('categories') ?? '{}'));
set categories(Map<String, int> cats) { void setCategories(Map<String, int> cats, {AppsProvider? appsProvider}) {
if (appsProvider != null) {
List<App> changedApps = appsProvider.apps.values
.map((a) {
var n1 = a.app.categories.length;
a.app.categories.removeWhere((c) => !cats.keys.contains(c));
return n1 > a.app.categories.length ? a.app : null;
})
.where((element) => element != null)
.map((e) => e as App)
.toList();
if (changedApps.isNotEmpty) {
appsProvider.saveApps(changedApps,
attemptToCorrectInstallStatus: false);
}
}
prefs?.setString('categories', jsonEncode(cats)); prefs?.setString('categories', jsonEncode(cats));
notifyListeners(); notifyListeners();
} }

View File

@@ -337,10 +337,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: markdown name: markdown
sha256: b3c60dee8c2af50ad0e6e90cceba98e47718a6ee0a7a6772c77846a0cc21f78b sha256: d95a9d12954aafc97f984ca29baaa7690ed4d9ec4140a23ad40580bcdb6c87f5
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.0.1" version: "7.0.2"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
@@ -553,34 +553,34 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: shared_preferences name: shared_preferences
sha256: "78528fd87d0d08ffd3e69551173c026e8eacc7b7079c82eb6a77413957b7e394" sha256: "858aaa72d8f61637d64e776aca82e1c67e6d9ee07979123c5d17115031c1b13b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.20" version: "2.1.0"
shared_preferences_android: shared_preferences_android:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_android name: shared_preferences_android
sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 sha256: "8304d8a1f7d21a429f91dee552792249362b68a331ac5c3c1caf370f658873f6"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.17" version: "2.1.0"
shared_preferences_foundation: shared_preferences_foundation:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_foundation name: shared_preferences_foundation
sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" sha256: cf2a42fb20148502022861f71698db12d937c7459345a1bdaa88fc91a91b3603
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.5" version: "2.2.0"
shared_preferences_linux: shared_preferences_linux:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_linux name: shared_preferences_linux
sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.5" version: "2.2.0"
shared_preferences_platform_interface: shared_preferences_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -593,18 +593,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_web name: shared_preferences_web
sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.6" version: "2.1.0"
shared_preferences_windows: shared_preferences_windows:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_windows name: shared_preferences_windows
sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.5" version: "2.2.0"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@@ -790,10 +790,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_android name: webview_flutter_android
sha256: "34f83c2f0f64c75ad75c77a2ccfc8d2e531afbe8ad41af1fd787d6d33336aa90" sha256: "9e223788e1954087dac30d813dc151f8e12f09f1139f116ce20b5658893f3627"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.4.3" version: "3.4.4"
webview_flutter_platform_interface: webview_flutter_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -835,5 +835,5 @@ packages:
source: hosted source: hosted
version: "6.2.2" version: "6.2.2"
sdks: sdks:
dart: ">=2.18.2 <3.0.0" dart: ">=2.19.0 <3.0.0"
flutter: ">=3.4.0-17.0.pre" flutter: ">=3.4.0-17.0.pre"

View File

@@ -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.11.16+138 # When changing this, update the tag in main() accordingly version: 0.11.20+142 # 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'