From 524fecb0791316135b5739797baf9e12f4706d3a Mon Sep 17 00:00:00 2001 From: Bo Lopker Date: Sun, 14 Apr 2024 21:17:19 -0700 Subject: [PATCH] Try to fix timing issue (#30) * Try to fix timing issue * Remove inkwell, add timer resets, other small UI tweaks * New assist icon * Bail on read if we're writing * Update deps, get building --- .vscode/settings.json | 5 +- README.md | 2 + ios/Podfile.lock | 14 +-- ios/Runner.xcodeproj/project.pbxproj | 18 ++++ lib/bike.dart | 47 ++++++--- lib/bike.g.dart | 2 +- lib/repository.dart | 10 +- lib/widgets.dart | 4 +- pubspec.lock | 152 +++++++++++++-------------- pubspec.yaml | 2 +- 10 files changed, 150 insertions(+), 106 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index b5791dd..bc885f4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,13 +1,16 @@ { "cSpell.words": [ + "autorenew", "Autovalidate", "bikesdb", "Buildless", "cupertino", + "ebike", "newmode", "nobg", + "phonelink", "Riverpod", "settingsdb", "superduper" ] -} +} \ No newline at end of file diff --git a/README.md b/README.md index 579cd86..f98f2e9 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,8 @@ Make sure only one app is connected to the bike at a time. If you have the offic You can also try restarting the bike and your phone. +Finally, older bike firmware may not be supported. Make sure your bike is up to date. + ### How does Background Lock work and how is it different from the setting lock? The setting lock feature tells Superduper to ignore whatever the bike is set to and use the settings you have set in the app. This is useful for when the bike starts up and settings reset, like lights and mode. However, the app only enforces the setting lock when the app is open. If you close the app, the bike will go back to whatever settings it was set to. To use it, long press the setting button you want to lock. diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 556ac76..adc6217 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -9,7 +9,7 @@ PODS: - FlutterMacOS - permission_handler_apple (9.3.0): - Flutter - - Protobuf (3.25.3) + - Protobuf (3.26.1) - reactive_ble_mobile (0.0.1): - Flutter - Protobuf (~> 3.5) @@ -17,7 +17,7 @@ PODS: - shared_preferences_foundation (0.0.1): - Flutter - FlutterMacOS - - SwiftProtobuf (1.25.2) + - SwiftProtobuf (1.26.0) - url_launcher_ios (0.0.1): - Flutter @@ -55,16 +55,16 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6 + device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_foreground_task: 21ef182ab0a29a3005cc72cd70e5f45cb7f7f817 path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c - permission_handler_apple: 036b856153a2b1f61f21030ff725f3e6fece2b78 - Protobuf: 8e9074797a13c484a79959fdb819ef4ae6da7dbe + permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 + Protobuf: a53f5173a603075b3522a5c50be63a67a5f3353a reactive_ble_mobile: 9ce6723d37ccf701dbffd202d487f23f5de03b4c shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695 - SwiftProtobuf: 407a385e97fd206c4fbe880cc84123989167e0d1 - url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812 + SwiftProtobuf: 5e8349171e7c2f88f5b9e683cb3cb79d1dc780b3 + url_launcher_ios: 6116280ddcfe98ab8820085d8d76ae7449447586 PODFILE CHECKSUM: c4c93c5f6502fe2754f48404d3594bf779584011 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 41e84e3..f6cca7d 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -139,6 +139,7 @@ 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, BFD4B700FC4EAC4DE1687B9D /* [CP] Embed Pods Frameworks */, + BB6265DBB98517D490E8FF6E /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -251,6 +252,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + BB6265DBB98517D490E8FF6E /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; BFD4B700FC4EAC4DE1687B9D /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/lib/bike.dart b/lib/bike.dart index 7e19bfc..08edcf9 100644 --- a/lib/bike.dart +++ b/lib/bike.dart @@ -23,6 +23,7 @@ part 'bike.g.dart'; class Bike extends _$Bike { Timer? _updateDebounce; Timer? _updateTimer; + bool _writing = false; @override BikeState build(String id) { @@ -30,9 +31,7 @@ class Bike extends _$Bike { _updateTimer?.cancel(); _updateDebounce?.cancel(); }); - _updateTimer = Timer.periodic(const Duration(seconds: 10), (timer) { - updateStateData(); - }); + _resetReadTimer(); var bike = ref.watch(databaseProvider).getBike(id); if (bike != null) { return bike; @@ -40,13 +39,32 @@ class Bike extends _$Bike { return BikeState.defaultState(id); } + _resetReadTimer() { + if (_updateTimer?.isActive ?? false) { + _updateTimer?.cancel(); + } + _updateTimer = Timer.periodic(const Duration(seconds: 5), (timer) { + if (_writing) { + return; + } + updateStateData(); + }); + } + + _resetDebounce() { + if (_updateDebounce?.isActive ?? false) _updateDebounce?.cancel(); + _resetReadTimer(); + } + Future updateStateData({force = false}) async { var status = ref.read(connectionStatusProvider); if (status != DeviceConnectionState.connected) { return; } - if (_updateDebounce?.isActive ?? false) _updateDebounce?.cancel(); + _resetDebounce(); + _writing = false; _updateDebounce = Timer(const Duration(seconds: 2), () async { + _resetReadTimer(); var data = await ref .read(bluetoothRepositoryProvider) .readCurrentState(state.id); @@ -73,7 +91,8 @@ class Bike extends _$Bike { }); } - void writeStateData(BikeState newState, {saveToBike = true}) { + void writeStateData(BikeState newState, {saveToBike = true}) async { + _resetDebounce(); if (state.id != newState.id) { throw Exception('Bike id mismatch'); } @@ -82,9 +101,9 @@ class Bike extends _$Bike { if (status != DeviceConnectionState.connected) { return; } - ref - .read(bluetoothRepositoryProvider) - .write(newState.id, data: newState.toWriteData()); + _writing = true; + final repo = ref.read(bluetoothRepositoryProvider); + await repo.write(newState.id, data: newState.toWriteData()); } ref.read(databaseProvider).addBike(newState); state = newState; @@ -225,7 +244,6 @@ class BikePageState extends ConsumerState { Center( child: Column( children: [ - const SizedBox(height: 10), InkWell( onTap: () { showModalBottomSheet( @@ -239,7 +257,7 @@ class BikePageState extends ConsumerState { "Help", style: Theme.of(context) .textTheme - .bodyMedium! + .bodySmall! .copyWith(color: const Color(0xff4A80F0)), ), ), @@ -397,8 +415,11 @@ class BackgroundLockControlWidget extends ConsumerWidget { height: 10, ), Text( - "Background Lock tries to keep your settings locked even when the app is closed. It may cause battery drain.", - style: Theme.of(context).textTheme.bodySmall, + "Background Lock may cause battery drain. See Help for more info.", + style: Theme.of(context) + .textTheme + .bodySmall! + .copyWith(color: Colors.grey), textAlign: TextAlign.center, ), ], @@ -422,7 +443,7 @@ class AssistControlWidget extends ConsumerWidget { colorIndex: bike.color, title: "Assist", metric: bike.assist.toString(), - titleIcon: Icons.admin_panel_settings_outlined, + titleIcon: Icons.autorenew, selected: bike.assist == 0 ? false : true, onTap: () { bikeControl.toggleAssist(); diff --git a/lib/bike.g.dart b/lib/bike.g.dart index 84cca1b..4eb5957 100644 --- a/lib/bike.g.dart +++ b/lib/bike.g.dart @@ -6,7 +6,7 @@ part of 'bike.dart'; // RiverpodGenerator // ************************************************************************** -String _$bikeHash() => r'9267e4513a7935871ec5a1caff5a8f28b6fe7693'; +String _$bikeHash() => r'3a6d72cdd91f3bbbae3d30e3f798ad906f4c9b83'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/repository.dart b/lib/repository.dart index fb28071..11517ac 100644 --- a/lib/repository.dart +++ b/lib/repository.dart @@ -59,14 +59,14 @@ class ConnectionHandler { if (connectedId == event?.id) { return; } - disconect(); + disconnect(); connectedId = db.currentBike?.id; connect(); }); connectedId = db.currentBike?.id; Future.delayed(const Duration(seconds: 1), () => connect()); reconnectTimer = - Timer.periodic(const Duration(seconds: 10), (t) => reconect()); + Timer.periodic(const Duration(seconds: 10), (t) => reconnect()); } void dispose() { @@ -92,11 +92,11 @@ class ConnectionHandler { _connectionSub = ref.read(bluetoothRepositoryProvider).connect(id).listen((event) { connNotify.set(event.connectionState); - debugPrint("conectionSub: $event"); + debugPrint("connectionSub: $event"); }); } - void reconect() { + void reconnect() { // print('reconnecting...'); var conn = ref.read(connectionStatusProvider); if (connectedId != null && conn == DeviceConnectionState.disconnected) { @@ -104,7 +104,7 @@ class ConnectionHandler { } } - void disconect() { + void disconnect() { connectedId = null; _connectionSub?.cancel(); var connNotify = ref.read(connectionStatusProvider.notifier); diff --git a/lib/widgets.dart b/lib/widgets.dart index 40de36a..8278ae1 100644 --- a/lib/widgets.dart +++ b/lib/widgets.dart @@ -43,10 +43,10 @@ class DiscoverCard extends StatelessWidget { } return Material( color: Colors.transparent, - child: InkWell( + child: GestureDetector( onTap: onTap, onLongPress: onLongPress, - child: Ink( + child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(26), gradient: LinearGradient( diff --git a/pubspec.lock b/pubspec.lock index 5249c01..8392f19 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.0" async: dependency: transitive description: @@ -93,10 +93,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21" + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" url: "https://pub.dev" source: hosted - version: "2.4.8" + version: "2.4.9" build_runner_core: dependency: transitive description: @@ -117,10 +117,10 @@ packages: dependency: transitive description: name: built_value - sha256: a3ec2e0f967bc47f69f95009bb93db936288d61d5343b9436e378b28a2f830c6 + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb url: "https://pub.dev" source: hosted - version: "8.9.0" + version: "8.9.2" characters: dependency: transitive description: @@ -205,42 +205,42 @@ packages: dependency: "direct dev" description: name: custom_lint - sha256: f89ff83efdba7c8996e86bb3bad0b759d58f9b19ae4d0e277a386ddd8b481217 + sha256: "7c0aec12df22f9082146c354692056677f1e70bc43471644d1fdb36c6fdda799" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.4" custom_lint_builder: dependency: transitive description: name: custom_lint_builder - sha256: "3a14687fc71a5e2124a29722106f7b7e67dd5a6d58e33f2859650b46acff1d54" + sha256: d7dc41e709dde223806660268678be7993559e523eb3164e2a1425fd6f7615a9 url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.6.4" custom_lint_core: dependency: transitive description: name: custom_lint_core - sha256: "1e9128e095ad5e0973469bdaac1ead8bfc86c485954c23cf617299de5e6fa029" + sha256: a85e8f78f4c52f6c63cdaf8c872eb573db0231dcdf3c3a5906d493c1f8bc20e6 url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.6.3" dart_style: dependency: transitive description: name: dart_style - sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.6" device_info_plus: dependency: "direct main" description: name: device_info_plus - sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110" + sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91 url: "https://pub.dev" source: hosted - version: "9.1.2" + version: "10.1.0" device_info_plus_platform_interface: dependency: transitive description: @@ -314,10 +314,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 + sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" flutter_localizations: dependency: transitive description: flutter @@ -327,10 +327,10 @@ packages: dependency: "direct main" description: name: flutter_markdown - sha256: "21b085a1c185e46701373866144ced56cfb7a0c33f63c916bb8fe2d0c1491278" + sha256: "04c4722cc36ec5af38acc38ece70d22d3c2123c61305d555750a091517bbe504" url: "https://pub.dev" source: hosted - version: "0.6.19" + version: "0.6.23" flutter_reactive_ble: dependency: "direct main" description: @@ -343,10 +343,10 @@ packages: dependency: "direct main" description: name: flutter_riverpod - sha256: "4bce556b7ecbfea26109638d5237684538d4abc509d253e6c5c4c5733b360098" + sha256: "0f1974eff5bbe774bf1d870e406fc6f29e3d6f1c46bd9c58e7172ff68a785d7d" url: "https://pub.dev" source: hosted - version: "2.4.10" + version: "2.5.1" flutter_test: dependency: "direct dev" description: flutter @@ -369,10 +369,10 @@ packages: dependency: "direct dev" description: name: freezed - sha256: "57247f692f35f068cae297549a46a9a097100685c6780fe67177503eea5ed4e5" + sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 url: "https://pub.dev" source: hosted - version: "2.4.7" + version: "2.5.2" freezed_annotation: dependency: "direct main" description: @@ -385,18 +385,18 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" functional_data: dependency: transitive description: name: functional_data - sha256: aefdec4365452283b2a7cf420a3169654d51d3e9553069a22d76680d7a9d7c3d + sha256: "76d17dc707c40e552014f5a49c0afcc3f1e3f05e800cd6b7872940bfe41a5039" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" glob: dependency: transitive description: @@ -545,10 +545,10 @@ packages: dependency: transitive description: name: markdown - sha256: "1b134d9f8ff2da15cb298efe6cd8b7d2a78958c1b00384ebcbdf13fe340a6c90" + sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051 url: "https://pub.dev" source: hosted - version: "7.2.1" + version: "7.2.2" matcher: dependency: transitive description: @@ -601,18 +601,18 @@ packages: dependency: transitive description: name: path_provider - sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b + sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.4" path_provider_foundation: dependency: transitive description: @@ -649,10 +649,10 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: "74e962b7fad7ff75959161bb2c0ad8fe7f2568ee82621c9c2660b751146bfe44" + sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" url: "https://pub.dev" source: hosted - version: "11.3.0" + version: "11.3.1" permission_handler_android: dependency: transitive description: @@ -665,10 +665,10 @@ packages: dependency: transitive description: name: permission_handler_apple - sha256: bdafc6db74253abb63907f4e357302e6bb786ab41465e8635f362ee71fd8707b + sha256: e9ad66020b89ff1b63908f247c2c6f931c6e62699b756ef8b3c4569350cd8662 url: "https://pub.dev" source: hosted - version: "9.4.0" + version: "9.4.4" permission_handler_html: dependency: transitive description: @@ -681,10 +681,10 @@ packages: dependency: transitive description: name: permission_handler_platform_interface - sha256: "23dfba8447c076ab5be3dee9ceb66aad345c4a648f0cac292c77b1eb0e800b78" + sha256: "48d4fcf201a1dad93ee869ab0d4101d084f49136ec82a8a06ed9cfeacab9fd20" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "4.2.1" permission_handler_windows: dependency: transitive description: @@ -721,10 +721,10 @@ packages: dependency: transitive description: name: pointycastle - sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" + sha256: "70fe966348fe08c34bf929582f1d8247d9d9408130723206472b4687227e4333" url: "https://pub.dev" source: hosted - version: "3.7.4" + version: "3.8.0" pool: dependency: transitive description: @@ -777,10 +777,10 @@ packages: dependency: transitive description: name: riverpod - sha256: "548e2192eb7aeb826eb89387f814edb76594f3363e2c0bb99dd733d795ba3589" + sha256: f21b32ffd26a36555e501b04f4a5dca43ed59e16343f1a30c13632b2351dfa4d url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.5.1" riverpod_analyzer_utils: dependency: transitive description: @@ -793,26 +793,26 @@ packages: dependency: "direct main" description: name: riverpod_annotation - sha256: "77e5d51afa4fa3e67903fb8746f33d368728d7051a0b6c292bcee60aeba46d95" + sha256: e5e796c0eba4030c704e9dae1b834a6541814963292839dcf9638d53eba84f5c url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.5" riverpod_generator: dependency: "direct dev" description: name: riverpod_generator - sha256: "359068f04879347ae4edbe66c81cc95f83fa1743806d1a0c86e55dd3c33ebb32" + sha256: d451608bf17a372025fc36058863737636625dfdb7e3cbf6142e0dfeb366ab22 url: "https://pub.dev" source: hosted - version: "2.3.11" + version: "2.4.0" riverpod_lint: dependency: "direct dev" description: name: riverpod_lint - sha256: e9bbd02e9e89e18eecb183bbca556d7b523a0669024da9b8167c08903f442937 + sha256: "3c67c14ccd16f0c9d53e35ef70d06cd9d072e2fb14557326886bbde903b230a5" url: "https://pub.dev" source: hosted - version: "2.3.9" + version: "2.3.10" rxdart: dependency: transitive description: @@ -825,18 +825,18 @@ packages: dependency: transitive description: name: shared_preferences - sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.2.2" shared_preferences_foundation: dependency: transitive description: @@ -865,10 +865,10 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.0" shared_preferences_windows: dependency: transitive description: @@ -1014,26 +1014,26 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c + sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" url: "https://pub.dev" source: hosted - version: "6.2.4" + version: "6.2.6" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745 + sha256: "360a6ed2027f18b73c8d98e159dda67a61b7f2e0f6ec26e86c3ada33b0621775" url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.3.1" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5" url: "https://pub.dev" source: hosted - version: "6.2.4" + version: "6.2.5" url_launcher_linux: dependency: transitive description: @@ -1062,10 +1062,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "3692a459204a33e04bc94f5fb91158faf4f2c8903281ddd82915adecdb1a901d" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.0" url_launcher_windows: dependency: transitive description: @@ -1078,10 +1078,10 @@ packages: dependency: transitive description: name: uuid - sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8 + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" url: "https://pub.dev" source: hosted - version: "4.3.3" + version: "4.4.0" vector_math: dependency: transitive description: @@ -1110,34 +1110,34 @@ packages: dependency: transitive description: name: web - sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.4.2" + version: "0.5.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" + sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "2.4.5" win32: dependency: transitive description: name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + sha256: "0a989dc7ca2bb51eac91e8fd00851297cfffd641aa7538b165c62637ca0eaa4a" url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.4.0" win32_registry: dependency: transitive description: name: win32_registry - sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" + sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" xdg_directories: dependency: transitive description: @@ -1163,5 +1163,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0-279.1.beta <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.19.0" diff --git a/pubspec.yaml b/pubspec.yaml index 425cd68..299b274 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 - device_info_plus: ^9.0.0 + device_info_plus: ^10.0.0 flutter_foreground_task: ^6.0.0 flutter_markdown: ^0.6.13 flutter_reactive_ble: ^5.0.3