From 44f323a4d28e0aa7ea16d5a0e28c90478bbc905e Mon Sep 17 00:00:00 2001 From: Frederik Benoist Date: Sun, 16 Jul 2023 10:20:30 +0200 Subject: [PATCH 1/2] refactor: flutter 3.10.6 OK --- android/app/build.gradle | 2 +- android/build.gradle | 2 +- ios/Podfile.lock | 8 ++--- ios/Runner.xcodeproj/project.pbxproj | 1 + lib/main.dart | 6 ++-- lib/network/api_provider.dart | 24 +++++++-------- pubspec.lock | 46 ++++++++++++++-------------- pubspec.yaml | 4 +-- 8 files changed, 48 insertions(+), 45 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 0cbdb6e..3a5430a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -8,7 +8,7 @@ if (localPropertiesFile.exists()) { def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") + throw GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') diff --git a/android/build.gradle b/android/build.gradle index 58a8c74..713d7f6 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -26,6 +26,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index d308160..48b9666 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -78,9 +78,9 @@ DEPENDENCIES: - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - objectbox_flutter_libs (from `.symlinks/plugins/objectbox_flutter_libs/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - sqflite (from `.symlinks/plugins/sqflite/ios`) - wakelock (from `.symlinks/plugins/wakelock/ios`) - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) @@ -120,11 +120,11 @@ EXTERNAL SOURCES: package_info_plus: :path: ".symlinks/plugins/package_info_plus/ios" path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/ios" + :path: ".symlinks/plugins/path_provider_foundation/darwin" permission_handler_apple: :path: ".symlinks/plugins/permission_handler_apple/ios" shared_preferences_foundation: - :path: ".symlinks/plugins/shared_preferences_foundation/ios" + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" sqflite: :path: ".symlinks/plugins/sqflite/ios" wakelock: diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 93b743f..59029e7 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -227,6 +227,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( diff --git a/lib/main.dart b/lib/main.dart index c676a9f..2549e1f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -60,8 +60,10 @@ Future main() async { await package_info_plus().initPackageInfo(); // set device screenWidth/height - SharedPrefs().screenWidth = window.physicalSize.width; - SharedPrefs().screenHeight = window.physicalSize.height; + SharedPrefs().screenWidth = + PlatformDispatcher.instance.views.first.physicalSize.width; + SharedPrefs().screenHeight = + PlatformDispatcher.instance.views.first.physicalSize.height; // initialize directories await directories().initDirectories(); diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index 47278ed..31bea63 100644 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -33,9 +33,9 @@ class ApiProvider { } return await _dio.get(url); - } on DioError catch (e) { + } on DioException catch (e) { //print(e.toString()+' | '+url.toString()); - if (e.type == DioErrorType.badResponse) { + if (e.type == DioExceptionType.badResponse) { int? statusCode = e.response!.statusCode; if (statusCode == STATUS_NOT_FOUND) { throw "Api not found"; @@ -44,9 +44,9 @@ class ApiProvider { } else { throw e.error.toString(); } - } else if (e.type == DioErrorType.connectionTimeout) { + } else if (e.type == DioExceptionType.connectionTimeout) { throw e.message.toString(); - } else if (e.type == DioErrorType.cancel) { + } else if (e.type == DioExceptionType.cancel) { throw 'cancel'; } throw connErr; @@ -62,9 +62,9 @@ class ApiProvider { _dio.options.receiveTimeout = Duration(seconds: 4); return await _dio.post(url, cancelToken: apiToken); - } on DioError catch (e) { + } on DioException catch (e) { //print(e.toString()+' | '+url.toString()); - if (e.type == DioErrorType.badResponse) { + if (e.type == DioExceptionType.badResponse) { int? statusCode = e.response!.statusCode; if (statusCode == STATUS_NOT_FOUND) { throw "Api not found"; @@ -73,9 +73,9 @@ class ApiProvider { } else { throw e.error.toString(); } - } else if (e.type == DioErrorType.connectionTimeout) { + } else if (e.type == DioExceptionType.connectionTimeout) { throw e.message.toString(); - } else if (e.type == DioErrorType.cancel) { + } else if (e.type == DioExceptionType.cancel) { throw 'cancel'; } throw connErr; @@ -92,9 +92,9 @@ class ApiProvider { _dio.options.receiveTimeout = Duration(seconds: 4); return await _dio.post(url, data: data, cancelToken: apiToken); - } on DioError catch (e) { + } on DioException catch (e) { //print(e.toString()+' | '+url.toString()); - if (e.type == DioErrorType.badResponse) { + if (e.type == DioExceptionType.badResponse) { int? statusCode = e.response!.statusCode; if (statusCode == STATUS_NOT_FOUND) { throw "Api not found"; @@ -103,9 +103,9 @@ class ApiProvider { } else { throw e.error.toString(); } - } else if (e.type == DioErrorType.connectionTimeout) { + } else if (e.type == DioExceptionType.connectionTimeout) { throw e.message.toString(); - } else if (e.type == DioErrorType.cancel) { + } else if (e.type == DioExceptionType.cancel) { throw 'cancel'; } throw connErr; diff --git a/pubspec.lock b/pubspec.lock index a98caa4..ef81716 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" audioplayers: dependency: "direct main" description: @@ -261,10 +261,10 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" checked_yaml: dependency: transitive description: @@ -293,10 +293,10 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.17.1" connectivity_plus: dependency: "direct main" description: @@ -397,10 +397,10 @@ packages: dependency: "direct main" description: name: dio - sha256: "0894a098594263fe1caaba3520e3016d8a855caeb010a882273189cca10f11e9" + sha256: a9d76e72985d7087eb7c5e7903224ae52b337131518d127c554b9405936752b8 url: "https://pub.dev" source: hosted - version: "5.1.1" + version: "5.2.1+1" equatable: dependency: transitive description: @@ -609,10 +609,10 @@ packages: dependency: "direct main" description: name: image_gallery_saver - sha256: "009b7722cd8507fd72c7f2cb7cbc46d6e15ad0895469cfcc39a10f86e3556979" + sha256: "0aba74216a4d9b0561510cb968015d56b701ba1bd94aace26aacdd8ae5761816" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.3" image_picker: dependency: "direct main" description: @@ -657,10 +657,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 url: "https://pub.dev" source: hosted - version: "0.17.0" + version: "0.18.0" io: dependency: transitive description: @@ -673,10 +673,10 @@ packages: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.7" json_annotation: dependency: transitive description: @@ -705,10 +705,10 @@ packages: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.15" material_color_utilities: dependency: transitive description: @@ -721,10 +721,10 @@ packages: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" mime: dependency: transitive description: @@ -809,10 +809,10 @@ packages: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" path_provider: dependency: transitive description: @@ -1190,10 +1190,10 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.5.1" timing: dependency: transitive description: @@ -1355,5 +1355,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=2.19.2 <3.0.0" + dart: ">=3.0.0-0 <4.0.0" flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml index 2a3a221..465359b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -32,7 +32,7 @@ dependencies: sdk: flutter # https://pub.dev/packages/dio - dio: 5.1.1 + dio: 5.2.1+1 # https://pub.dev/packages/objectbox objectbox: ^2.0.0 @@ -82,7 +82,7 @@ dependencies: cached_network_image: 3.2.3 # https://pub.dev/packages/intl - intl: 0.17.0 + intl: 0.18.0 # https://pub.dev/packages/carousel_slider carousel_slider: 4.2.1 -- 2.40.1 From 996c717fb9c8093aaa354ae8f7eb180902e956c8 Mon Sep 17 00:00:00 2001 From: Frederik Benoist Date: Mon, 16 Oct 2023 16:47:04 +0200 Subject: [PATCH 2/2] feat: OTA update --- android/app/src/main/AndroidManifest.xml | 10 ++ android/app/src/main/res/xml/filepaths.xml | 4 + lib/config/constant.dart | 4 + lib/network/api_provider.dart | 20 +++ lib/ui/account/tab_account.dart | 3 + lib/ui/appstore/updatecheck.dart | 175 +++++++++++++++++++++ lib/ui/sync/tab_synchro.dart | 41 ++++- macos/Podfile.lock | 14 +- pubspec.lock | 12 +- pubspec.yaml | 7 +- 10 files changed, 280 insertions(+), 10 deletions(-) create mode 100644 android/app/src/main/res/xml/filepaths.xml create mode 100644 lib/ui/appstore/updatecheck.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 965383b..488914e 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -30,6 +30,15 @@ + + + @@ -39,6 +48,7 @@ + diff --git a/android/app/src/main/res/xml/filepaths.xml b/android/app/src/main/res/xml/filepaths.xml new file mode 100644 index 0000000..774ca56 --- /dev/null +++ b/android/app/src/main/res/xml/filepaths.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/lib/config/constant.dart b/lib/config/constant.dart index 7bd69f9..e852b4f 100644 --- a/lib/config/constant.dart +++ b/lib/config/constant.dart @@ -45,3 +45,7 @@ const String LOGIN_API = 'https://mp4.ikksgroup.com' + "/authentication/login"; const String PRODUCT_API = 'https://mp4.ikksgroup.com' + "/example/getProduct"; const String SERVLET_API = 'https://mp4.ikksgroup.com' + "/MobilePortal4_external/UploadPhotoServlet"; + +// https://blogit.q2ii.fr +// https://mp4.ikksgroup.com +const String DOMAIN_CHECK_VERSION = 'https://mp4.ikksgroup.com'; diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index 31bea63..a997956 100644 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -481,4 +481,24 @@ class ApiProvider { void close() { _dio.close(); } + + Future checkAppVersion() async { + try { + final response = await http + .get(Uri.parse(DOMAIN_CHECK_VERSION + '/deploy/mobdr/version.json')); + final data = jsonDecode(response.body); + + if (data.containsKey('latest_version')) { + if (data['latest_version'] != SharedPrefs().appVersion) { + // The versions differ + return true; + } + } + } catch (e) { + print('Error verifying the version : $e'); + } + + // If an error has occurred or if the versions are identical + return false; + } } diff --git a/lib/ui/account/tab_account.dart b/lib/ui/account/tab_account.dart index 3c319df..fae6cf8 100644 --- a/lib/ui/account/tab_account.dart +++ b/lib/ui/account/tab_account.dart @@ -11,6 +11,7 @@ import 'package:mobdr/ui/account/settings.dart'; import 'package:mobdr/ui/account/log.dart'; import 'package:mobdr/ui/general/notification.dart'; import 'package:mobdr/ui/reusable/reusable_widget.dart'; +import 'package:mobdr/ui/appstore/updatecheck.dart'; import 'package:flutter/material.dart'; import 'package:mobdr/ui/authentication/signin.dart'; import 'dart:convert'; @@ -78,6 +79,8 @@ class _TabAccountPageState extends State _reusableWidget.divider1(), _createListMenu('Show logs', LogPage()), _reusableWidget.divider1(), + _createListMenu('Check version', UpdateCheckPage()), + _reusableWidget.divider1(), Container( margin: EdgeInsets.fromLTRB(0, 18, 0, 0), child: GestureDetector( diff --git a/lib/ui/appstore/updatecheck.dart b/lib/ui/appstore/updatecheck.dart new file mode 100644 index 0000000..9e4ea75 --- /dev/null +++ b/lib/ui/appstore/updatecheck.dart @@ -0,0 +1,175 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:ota_update/ota_update.dart'; +import 'package:http/http.dart' as http; + +import 'package:mobdr/service/shared_prefs.dart'; +import 'package:mobdr/config/constant.dart'; + +class UpdateCheckPage extends StatefulWidget { + @override + _UpdateCheckPageState createState() => _UpdateCheckPageState(); +} + +class _UpdateCheckPageState extends State { + OtaEvent? currentEvent = null; + + String _currentVersion = SharedPrefs().appVersion; + String _latestVersion = ''; + String _releaseDate = ''; + List _releaseNotes = []; + String _downloadLink = ''; + String _checksum = ''; + + @override + void initState() { + super.initState(); + _fetchLatestVersion(); + } + + Future _fetchLatestVersion() async { + try { + final response = await http + .get(Uri.parse(DOMAIN_CHECK_VERSION + '/deploy/mobdr/version.json')); + final data = jsonDecode(response.body); + + setState(() { + _latestVersion = data['latest_version']; + _releaseDate = data['release_date']; + _releaseNotes = List.from(data['release_notes']); + _downloadLink = data['download_link']; + _checksum = data['checksum']; + }); + } catch (e) { + print('Error retrieving latest version : $e'); + } + } + + Future _doUpdate() async { + try { + OtaUpdate() + .execute( + _downloadLink, + // OPTIONAL + destinationFilename: 'app_release.apk', + //OPTIONAL, ANDROID ONLY - ABILITY TO VALIDATE CHECKSUM OF FILE: + sha256checksum: _checksum, + ) + .listen( + (OtaEvent event) { + setState(() => currentEvent = event); + }, + ); + } catch (e) { + print('Failed to make OTA update. Details: $e'); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Checking for update'), + ), + body: Center( + child: currentEvent == null + ? Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Current version : ', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + ), + ), + Text( + _currentVersion, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 22, + color: Colors.red, + ), + ), + SizedBox(height: 16), + Text( + 'Version available : ', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + ), + ), + Text( + _latestVersion, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 24, + color: Colors.green, + ), + ), + if (_currentVersion != _latestVersion) ...[ + SizedBox(height: 16), + Text( + 'Publication date : $_releaseDate', + style: TextStyle(fontWeight: FontWeight.bold), + ), + SizedBox(height: 8), + Text( + 'Release notes :', + style: TextStyle(fontWeight: FontWeight.bold), + ), + for (String note in _releaseNotes) ...[ + SizedBox(height: 4), + Text('- $note'), + ], + SizedBox(height: 16), + ElevatedButton( + onPressed: _doUpdate, + child: Text( + 'Update', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + ), + ), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.blue, + ), + ), + ] else ...[ + SizedBox(height: 32), + Text( + 'You have the latest version', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + ), + ), + ], + ], + ) + : Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'OTA status', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 24, + ), + ), + SizedBox(height: 32), + Text('${currentEvent!.status}'), + SizedBox(height: 16), + Text( + '${currentEvent!.value}', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + ), + ) + ], + )), + ); + } +} diff --git a/lib/ui/sync/tab_synchro.dart b/lib/ui/sync/tab_synchro.dart index 252a931..492b291 100644 --- a/lib/ui/sync/tab_synchro.dart +++ b/lib/ui/sync/tab_synchro.dart @@ -7,6 +7,7 @@ import 'package:mobdr/config/global_style.dart'; import 'package:mobdr/main.dart'; import 'package:mobdr/events.dart'; import 'package:mobdr/ui/reusable/reusable_widget.dart'; +import 'package:mobdr/ui/appstore/updatecheck.dart'; import 'package:mobdr/service/shared_prefs.dart'; import 'package:mobdr/network/api_provider.dart'; import 'package:mobdr/db/box_visit_photo.dart'; @@ -71,7 +72,43 @@ class _SynchronizationPageState extends State _isInternetConnexion = true; // synchronization start - startSync(); + await startSync(); + + // Vérifier si une mise à jour est disponible + bool isUpdateAvailable = await _apiProvider.checkAppVersion(); + + if (isUpdateAvailable) { + // Afficher le message de mise à jour + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: Text("New version available"), + content: Text( + "A new version is available. Would you like to install it?"), + actions: [ + TextButton( + child: Text("No"), + onPressed: () { + Navigator.pop(context); // Closes the dialog box + }, + ), + TextButton( + child: Text("Yes"), + onPressed: () { + Navigator.pop(context); // Closes the dialog box + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => UpdateCheckPage()), + ); + }, + ), + ], + ); + }, + ); + } } } @@ -200,7 +237,7 @@ class _SynchronizationPageState extends State } } - void startSync() async { + Future startSync() async { // disable navigation bar buttons eventBus.fire(SynchronizationEvent(true)); diff --git a/macos/Podfile.lock b/macos/Podfile.lock index c77e049..10e64f5 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -1,4 +1,6 @@ PODS: + - audioplayers_darwin (0.0.1): + - FlutterMacOS - connectivity_plus (0.0.1): - FlutterMacOS - ReachabilitySwift @@ -28,13 +30,14 @@ PODS: - FlutterMacOS DEPENDENCIES: + - audioplayers_darwin (from `Flutter/ephemeral/.symlinks/plugins/audioplayers_darwin/macos`) - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`) - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) - FlutterMacOS (from `Flutter/ephemeral`) - objectbox_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/objectbox_flutter_libs/macos`) - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) - - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos`) - - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/macos`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) - wakelock_macos (from `Flutter/ephemeral/.symlinks/plugins/wakelock_macos/macos`) @@ -45,6 +48,8 @@ SPEC REPOS: - ReachabilitySwift EXTERNAL SOURCES: + audioplayers_darwin: + :path: Flutter/ephemeral/.symlinks/plugins/audioplayers_darwin/macos connectivity_plus: :path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos device_info_plus: @@ -56,15 +61,16 @@ EXTERNAL SOURCES: package_info_plus: :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos path_provider_foundation: - :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin shared_preferences_foundation: - :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/macos + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin sqflite: :path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos wakelock_macos: :path: Flutter/ephemeral/.symlinks/plugins/wakelock_macos/macos SPEC CHECKSUMS: + audioplayers_darwin: dcad41de4fbd0099cb3749f7ab3b0cb8f70b810c connectivity_plus: 18d3c32514c886e046de60e9c13895109866c747 device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 diff --git a/pubspec.lock b/pubspec.lock index ef81716..5133d87 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -429,10 +429,10 @@ packages: dependency: transitive description: name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" file: dependency: transitive description: @@ -781,6 +781,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" + ota_update: + dependency: "direct main" + description: + name: ota_update + sha256: "7ce0af2119458cb7cc3122ecdc4e18ec3c0108162bfab9a4b064d686e1a5fc22" + url: "https://pub.dev" + source: hosted + version: "5.1.0" package_config: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 465359b..058fb76 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,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 # 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. -version: 0.0.1+1 +version: 0.2.3+1 environment: sdk: '>=2.19.0 <3.0.0' @@ -99,7 +99,7 @@ dependencies: # https://pub.dev/packages/device_info_plus/ device_info_plus: ^8.2.0 - # https://pwebview_flutterub.dev/packages/webview_flutter/ + # https://pub.dev/packages/webview_flutter/ # MP4 webview_flutter: ^4.2.1 @@ -121,6 +121,9 @@ dependencies: # https://pub.dev/packages/permission_handler permission_handler: 10.3.0 + # https://pub.dev/packages/ota_update + ota_update: ^5.1.0 + # hhttps://pub.dev/packages/timelines #timelines: ^0.1.0 -- 2.40.1