From ac41a05658b7f46f0ab9aaa6f3d51c0fcc5abad9 Mon Sep 17 00:00:00 2001 From: jfbriere Date: Mon, 8 Apr 2024 16:45:34 -0400 Subject: [PATCH] fix unnecessary rebuilds when using ModalRoute.of() with flutter 3.19.x. ref: https://github.com/flutter/flutter/pull/145389 --- .github/workflows/ci.yml | 4 +- .github/workflows/release.yml | 2 +- lib/group/group_screen.dart | 3 +- lib/home/home_screen.dart | 14 ++-- lib/profile/profile.dart | 9 +-- lib/search/search.dart | 3 +- lib/status.dart | 3 +- lib/subscriptions/_groups.dart | 3 +- lib/subscriptions/_list.dart | 4 +- lib/trends/_list.dart | 6 +- lib/tweet/tweet.dart | 20 ++--- lib/user.dart | 3 +- lib/utils/route_util.dart | 15 ++++ pubspec.lock | 144 ++++++++++++++++++++------------- 14 files changed, 137 insertions(+), 96 deletions(-) create mode 100644 lib/utils/route_util.dart diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 44b89f7b..b270c25f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,7 @@ jobs: - name: Install and set up Flutter uses: subosito/flutter-action@v2 with: - flutter-version: '3.16.9' + flutter-version: '3.19.5' channel: 'stable' cache: true @@ -107,7 +107,7 @@ jobs: # - name: Install and set up Flutter # uses: subosito/flutter-action@v2 # with: -# flutter-version: '3.16.9' +# flutter-version: '3.19.5' # channel: 'stable' # # - name: Build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 27bcd866..e01e87a4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,7 @@ jobs: - name: Install and set up Flutter uses: subosito/flutter-action@v2 with: - flutter-version: '3.16.9' + flutter-version: '3.19.5' channel: 'stable' - name: Set up signing key diff --git a/lib/group/group_screen.dart b/lib/group/group_screen.dart index 8867a54d..34df0e56 100644 --- a/lib/group/group_screen.dart +++ b/lib/group/group_screen.dart @@ -13,6 +13,7 @@ import 'package:squawker/group/_settings.dart'; import 'package:squawker/ui/errors.dart'; import 'package:squawker/utils/data_service.dart'; import 'package:squawker/utils/iterables.dart'; +import 'package:squawker/utils/route_util.dart'; class GroupScreenArguments { final String id; @@ -31,7 +32,7 @@ class GroupScreen extends StatelessWidget { @override Widget build(BuildContext context) { - final args = ModalRoute.of(context)!.settings.arguments as GroupScreenArguments; + final args = getNamedRouteArguments(routeGroup) as GroupScreenArguments; return SubscriptionGroupScreen( scrollController: ScrollController(), id: args.id, name: args.name, actions: const []); diff --git a/lib/home/home_screen.dart b/lib/home/home_screen.dart index 37d54434..6254fb1e 100644 --- a/lib/home/home_screen.dart +++ b/lib/home/home_screen.dart @@ -24,6 +24,7 @@ import 'package:squawker/ui/errors.dart'; import 'package:squawker/ui/physics.dart'; import 'package:squawker/utils/data_service.dart'; import 'package:squawker/utils/debounce.dart'; +import 'package:squawker/utils/route_util.dart'; import 'package:pref/pref.dart'; import 'package:provider/provider.dart'; import 'package:receive_sharing_intent/receive_sharing_intent.dart'; @@ -42,7 +43,7 @@ List createCommonAppBarActions(BuildContext context) { return [ IconButton( icon: const Icon(Symbols.search), - onPressed: () => Navigator.pushNamed(context, routeSearch, arguments: SearchArguments(0, focusInputOnOpen: true)), + onPressed: () => pushNamedRoute(context, routeSearch, SearchArguments(0, focusInputOnOpen: true)), ), IconButton( icon: const Icon(Symbols.settings), @@ -105,8 +106,7 @@ class _HomeScreenState extends State<_HomeScreen> { // Assume it's a username if there's only one segment (or two segments with the second empty, meaning the URI ends with /) if (link.pathSegments.length == 1 || (link.pathSegments.length == 2 && link.pathSegments.last.isEmpty)) { - Navigator.pushNamed(context, routeProfile, - arguments: ProfileScreenArguments.fromScreenName(link.pathSegments.first)); + pushNamedRoute(context, routeProfile, ProfileScreenArguments.fromScreenName(link.pathSegments.first)); return; } @@ -132,11 +132,7 @@ class _HomeScreenState extends State<_HomeScreen> { var username = link.pathSegments[0]; var statusId = link.pathSegments[2]; - Navigator.pushNamed(context, routeStatus, - arguments: StatusScreenArguments( - id: statusId, - username: username, - )); + pushNamedRoute(context, routeStatus, StatusScreenArguments(id: statusId, username: username,)); return; } @@ -147,7 +143,7 @@ class _HomeScreenState extends State<_HomeScreen> { // https://twitter.com/i/topics/tweet/1447290060123033601 if (segment2 == 'topics' && segment3 == 'tweet') { - Navigator.pushNamed(context, routeStatus, arguments: StatusScreenArguments(id: segment4, username: null)); + pushNamedRoute(context, routeStatus, StatusScreenArguments(id: segment4, username: null)); return; } } diff --git a/lib/profile/profile.dart b/lib/profile/profile.dart index b8e1bb35..92fae5bb 100644 --- a/lib/profile/profile.dart +++ b/lib/profile/profile.dart @@ -18,6 +18,7 @@ import 'package:squawker/ui/errors.dart'; import 'package:squawker/ui/physics.dart'; import 'package:squawker/user.dart'; import 'package:squawker/utils/urls.dart'; +import 'package:squawker/utils/route_util.dart'; import 'package:intl/intl.dart'; import 'package:measure_size/measure_size.dart'; import 'package:pref/pref.dart'; @@ -59,7 +60,7 @@ class ProfileScreen extends StatelessWidget { @override Widget build(BuildContext context) { - final args = ModalRoute.of(context)!.settings.arguments as ProfileScreenArguments; + final args = getNamedRouteArguments(routeProfile) as ProfileScreenArguments; return Provider( create: (context) { @@ -209,15 +210,13 @@ class _ProfileScreenBodyState extends State with TickerProvid var onTap = () async {}; if (type == '#') { onTap = () async { - Navigator.pushNamed(context, routeSearch, - arguments: SearchArguments(1, focusInputOnOpen: false, query: full)); + pushNamedRoute(context, routeSearch, SearchArguments(1, focusInputOnOpen: false, query: full)); }; } if (type == '@') { onTap = () async { - Navigator.pushNamed(context, routeProfile, - arguments: ProfileScreenArguments.fromScreenName(full.substring(1))); + pushNamedRoute(context, routeProfile, ProfileScreenArguments.fromScreenName(full.substring(1))); }; } diff --git a/lib/search/search.dart b/lib/search/search.dart index 8b38d71c..1b555495 100644 --- a/lib/search/search.dart +++ b/lib/search/search.dart @@ -17,6 +17,7 @@ import 'package:squawker/tweet/tweet.dart'; import 'package:squawker/ui/errors.dart'; import 'package:squawker/user.dart'; import 'package:squawker/utils/notifiers.dart'; +import 'package:squawker/utils/route_util.dart'; import 'package:pref/pref.dart'; import 'package:provider/provider.dart'; @@ -33,7 +34,7 @@ class SearchScreen extends StatelessWidget { @override Widget build(BuildContext context) { - final arguments = ModalRoute.of(context)!.settings.arguments as SearchArguments; + final arguments = getNamedRouteArguments(routeSearch) as SearchArguments; return _SearchScreen( initialTab: arguments.initialTab, query: arguments.query, focusInputOnOpen: arguments.focusInputOnOpen); diff --git a/lib/status.dart b/lib/status.dart index 9fe40299..57728750 100644 --- a/lib/status.dart +++ b/lib/status.dart @@ -6,6 +6,7 @@ import 'package:squawker/generated/l10n.dart'; import 'package:squawker/profile/profile.dart'; import 'package:squawker/tweet/conversation.dart'; import 'package:squawker/ui/errors.dart'; +import 'package:squawker/utils/route_util.dart'; import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; import 'package:pref/pref.dart'; import 'package:provider/provider.dart'; @@ -28,7 +29,7 @@ class StatusScreen extends StatelessWidget { @override Widget build(BuildContext context) { - final args = ModalRoute.of(context)!.settings.arguments as StatusScreenArguments; + final args = getNamedRouteArguments(routeStatus) as StatusScreenArguments; return _StatusScreen(username: args.username, id: args.id); } diff --git a/lib/subscriptions/_groups.dart b/lib/subscriptions/_groups.dart index 6ffcbf16..c4a2f237 100644 --- a/lib/subscriptions/_groups.dart +++ b/lib/subscriptions/_groups.dart @@ -15,6 +15,7 @@ import 'package:squawker/group/group_screen.dart'; import 'package:squawker/subscriptions/users_model.dart'; import 'package:squawker/user.dart'; import 'package:squawker/utils/ui_util.dart'; +import 'package:squawker/utils/route_util.dart'; import 'package:provider/provider.dart'; Future openSubscriptionGroupDialog(BuildContext context, String? id, String name, String icon) { @@ -43,7 +44,7 @@ class _SubscriptionGroupsState extends State { child: InkWell( onTap: () { // Open page with the group's feed - Navigator.pushNamed(context, routeGroup, arguments: GroupScreenArguments(id: id, name: name)); + pushNamedRoute(context, routeGroup, GroupScreenArguments(id: id, name: name)); }, onLongPress: onLongPress, child: Column( diff --git a/lib/subscriptions/_list.dart b/lib/subscriptions/_list.dart index d61cce61..862add27 100644 --- a/lib/subscriptions/_list.dart +++ b/lib/subscriptions/_list.dart @@ -7,6 +7,7 @@ import 'package:squawker/database/entities.dart'; import 'package:squawker/search/search.dart'; import 'package:squawker/subscriptions/users_model.dart'; import 'package:squawker/ui/errors.dart'; +import 'package:squawker/utils/route_util.dart'; import 'package:squawker/user.dart'; import 'package:provider/provider.dart'; import 'package:squawker/generated/l10n.dart'; @@ -109,8 +110,7 @@ class SubscriptionUsersListState extends State { child: FollowButton(user: user), ), onTap: () { - Navigator.pushNamed(context, routeSearch, - arguments: SearchArguments(1, focusInputOnOpen: false, query: user.id)); + pushNamedRoute(context, routeSearch, SearchArguments(1, focusInputOnOpen: false, query: user.id)); }, ); }, diff --git a/lib/trends/_list.dart b/lib/trends/_list.dart index f465c886..7d894a23 100644 --- a/lib/trends/_list.dart +++ b/lib/trends/_list.dart @@ -7,6 +7,7 @@ import 'package:squawker/search/search.dart'; import 'package:squawker/trends/trends_model.dart'; import 'package:squawker/ui/errors.dart'; import 'package:squawker/ui/physics.dart'; +import 'package:squawker/utils/route_util.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; @@ -76,9 +77,8 @@ class _TrendsListState extends State { numberFormat.format(trend.tweetVolume), ), ), - onTap: () => Navigator.pushNamed(context, routeSearch, - arguments: - SearchArguments(1, focusInputOnOpen: false, query: Uri.decodeQueryComponent(trend.query!)))); + onTap: () => pushNamedRoute(context, routeSearch, SearchArguments(1, focusInputOnOpen: false, query: Uri.decodeQueryComponent(trend.query!))) + ); }, ); }, diff --git a/lib/tweet/tweet.dart b/lib/tweet/tweet.dart index bd6c3740..994cdfa2 100644 --- a/lib/tweet/tweet.dart +++ b/lib/tweet/tweet.dart @@ -24,6 +24,7 @@ import 'package:squawker/user.dart'; import 'package:squawker/utils/data_service.dart'; import 'package:squawker/utils/iterables.dart'; import 'package:squawker/utils/misc.dart'; +import 'package:squawker/utils/route_util.dart'; import 'package:squawker/utils/translation.dart'; import 'package:squawker/utils/urls.dart'; import 'package:html_unescape/html_unescape.dart'; @@ -108,8 +109,7 @@ class TweetTileState extends State with SingleTickerProviderStateMixi getNewEntity: (Hashtag hashtag) { return TweetHashtag( hashtag, - () => Navigator.pushNamed(context, routeSearch, - arguments: SearchArguments(1, focusInputOnOpen: false, query: '#${hashtag.text}'))); + () => pushNamedRoute(context, routeSearch, SearchArguments(1, focusInputOnOpen: false, query: '#${hashtag.text}'))); }); entities = _populateEntities( @@ -117,8 +117,7 @@ class TweetTileState extends State with SingleTickerProviderStateMixi source: tweet.entities?.userMentions, getNewEntity: (UserMention mention) { return TweetUserMention(mention, () { - Navigator.pushNamed(context, routeProfile, - arguments: ProfileScreenArguments(mention.idStr, mention.screenName)); + pushNamedRoute(context, routeProfile, ProfileScreenArguments(mention.idStr, mention.screenName)); }); }); @@ -203,8 +202,7 @@ class TweetTileState extends State with SingleTickerProviderStateMixi } void onClickOpenTweet(TweetWithCard tweet) { - Navigator.pushNamed(context, routeStatus, - arguments: StatusScreenArguments(id: tweet.idStr!, username: tweet.user!.screenName!)); + pushNamedRoute(context, routeStatus, StatusScreenArguments(id: tweet.idStr!, username: tweet.user!.screenName!)); } List convertTextPartsToTweetEntities(List parts) { @@ -417,8 +415,7 @@ class TweetTileState extends State with SingleTickerProviderStateMixi if (this.tweet.retweetedStatusWithCard != null) { retweetBanner = _TweetTileLeading( icon: Symbols.repeat, - onTap: () => Navigator.pushNamed(context, routeProfile, - arguments: ProfileScreenArguments.fromScreenName(this.tweet.user!.screenName!)), + onTap: () => pushNamedRoute(context, routeProfile, ProfileScreenArguments.fromScreenName(this.tweet.user!.screenName!)), children: [ TextSpan( text: L10n.of(context) @@ -444,8 +441,7 @@ class TweetTileState extends State with SingleTickerProviderStateMixi ), )); } else { - Navigator.pushNamed(context, routeStatus, - arguments: StatusScreenArguments(id: replyToId, username: replyTo)); + pushNamedRoute(context, routeStatus, StatusScreenArguments(id: replyToId, username: replyTo)); } }, icon: Symbols.reply_rounded, @@ -586,9 +582,7 @@ class TweetTileState extends State with SingleTickerProviderStateMixi if (currentUsername != null && tweet.user!.screenName!.endsWith(currentUsername!)) { return; } - - Navigator.pushNamed(context, routeProfile, - arguments: ProfileScreenArguments(tweet.user!.idStr, tweet.user!.screenName)); + pushNamedRoute(context, routeProfile, ProfileScreenArguments(tweet.user!.idStr, tweet.user!.screenName)); }, title: Row( children: [ diff --git a/lib/user.dart b/lib/user.dart index 47b5a9de..7ad24d22 100644 --- a/lib/user.dart +++ b/lib/user.dart @@ -13,6 +13,7 @@ import 'package:squawker/subscriptions/users_model.dart'; import 'package:multi_select_flutter/multi_select_flutter.dart'; import 'package:provider/provider.dart'; import 'package:squawker/utils/data_service.dart'; +import 'package:squawker/utils/route_util.dart'; import 'group/_feed.dart'; @@ -96,7 +97,7 @@ class UserTile extends StatelessWidget { child: FollowButton(user: user), ), onTap: () { - Navigator.pushNamed(context, routeProfile, arguments: ProfileScreenArguments(user.id, user.screenName)); + pushNamedRoute(context, routeProfile, ProfileScreenArguments(user.id, user.screenName)); }, ); } diff --git a/lib/utils/route_util.dart b/lib/utils/route_util.dart new file mode 100644 index 00000000..c0f6fd62 --- /dev/null +++ b/lib/utils/route_util.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:squawker/utils/data_service.dart'; + +Future pushNamedRoute(BuildContext context, String routeName, Object? arguments) async { + DataService().map[routeName] = arguments; + return Navigator.pushNamed(context, routeName); +} + +Object? getNamedRouteArguments(String routeName, {bool removeArgumentsFromSession = true}) { + Object? args = DataService().map[routeName]; + if (removeArgumentsFromSession) { + DataService().map.remove(routeName); + } + return args; +} diff --git a/pubspec.lock b/pubspec.lock index 92cdf5bc..b2138eec 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "64.0.0" + version: "67.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.4.1" archive: dependency: transitive description: @@ -85,10 +85,10 @@ packages: dependency: "direct main" description: name: chewie - sha256: "8bc4ac4cf3f316e50a25958c0f5eb9bb12cf7e8308bb1d74a43b230da2cfc144" + sha256: "1fc84d88d3b1dc26b1fe799500e2ebcc8916af30ce62595ad802cfd965b60bc3" url: "https://pub.dev" source: hosted - version: "1.7.5" + version: "1.8.0" cli_util: dependency: transitive description: @@ -125,10 +125,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+1" crypto: dependency: transitive description: @@ -165,10 +165,10 @@ packages: dependency: transitive description: name: dart_pubspec_licenses - sha256: "38680e2d2fc41df3a0d435d0955b91acc382aeefcb89ef4738f8167c8288a29d" + sha256: "0617752e2b1d3b28fd874891c7780416c70673ea5ce283f8df4e1c25635eec13" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" dart_style: dependency: transitive description: @@ -245,10 +245,10 @@ packages: dependency: transitive description: name: extended_image_library - sha256: "9b55fc5ebc65fad984de66b8f177a1bef2a84d79203c9c213f75ff83c2c29edd" + sha256: c9caee8fe9b6547bd41c960c4f2d1ef8e34321804de6a1777f1d614a24247ad6 url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.4" extended_nested_scroll_view: dependency: "direct main" description: @@ -285,10 +285,10 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" file: dependency: transitive description: @@ -415,10 +415,10 @@ packages: dependency: "direct dev" description: name: flutter_oss_licenses - sha256: eb15e1146b101dca063a177f6d339dfb85b639a9e2d2b71c18188d5fb2144869 + sha256: "44d359662281a4e8c2ee110ab8d9274782e368323fe6fbb389a79adbf81c5899" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.3" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -521,10 +521,10 @@ packages: dependency: "direct main" description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" http_client_helper: dependency: transitive description: @@ -545,10 +545,10 @@ packages: dependency: transitive description: name: idb_shim - sha256: cf1b3870ad63a6f5393edb351a9c9364e739731f2176c27f44d9645327c2cdd5 + sha256: "0566abfc41fa38889a4575f371d54860f069a7bcf6fcfdf8cf6a242e9d5e248f" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1+1" image: dependency: transitive description: @@ -597,6 +597,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.8.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" lints: dependency: transitive description: @@ -625,18 +649,18 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" material_symbols_icons: dependency: "direct main" description: @@ -665,10 +689,10 @@ packages: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" mime: dependency: transitive description: @@ -729,10 +753,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -865,10 +889,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" pref: dependency: "direct main" description: @@ -945,10 +969,10 @@ packages: dependency: transitive description: name: sembast - sha256: "9a9f0c7aca07043fef857b8b365f41592e48832b61462292699b57978e241c11" + sha256: dbe19600cff55d43f19405be79138c3fd2c08a87b0b152b18609b9427d113a64 url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "3.7.1" share_plus: dependency: "direct main" description: @@ -1009,10 +1033,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: @@ -1054,26 +1078,26 @@ packages: dependency: "direct main" description: name: sqflite - sha256: a9016f495c927cb90557c909ff26a6d92d9bd54fc42ba92e19d4e79d61e798c6 + sha256: "5ce2e1a15e822c3b4bfb5400455775e421da7098eed8adc8f26298ada7c9308c" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.3" sqflite_common: dependency: "direct main" description: name: sqflite_common - sha256: "28d8c66baee4968519fb8bd6cdbedad982d6e53359091f0b74544a9f32ec72d5" + sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4" url: "https://pub.dev" source: hosted - version: "2.5.3" + version: "2.5.4" sqflite_common_ffi: dependency: "direct dev" description: name: sqflite_common_ffi - sha256: "754927d82de369a6b9e760fb60640aa81da650f35ffd468d5a992814d6022908" + sha256: "4d6137c29e930d6e4a8ff373989dd9de7bac12e3bc87bce950f6e844e8ad3bb5" url: "https://pub.dev" source: hosted - version: "2.3.2+1" + version: "2.3.3" sqflite_migration_plan: dependency: "direct main" description: @@ -1086,10 +1110,10 @@ packages: dependency: transitive description: name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + sha256: "1abbeb84bf2b1a10e5e1138c913123c8aa9d83cd64e5f9a0dd847b3c83063202" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.2" stack_trace: dependency: transitive description: @@ -1238,10 +1262,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: @@ -1270,10 +1294,10 @@ packages: dependency: "direct main" description: name: video_player - sha256: "822e68b62403bebea846b012988ee1e77262e7b786345594a444c59338096ddf" + sha256: efa2e24042166906ddf836dd131258d0371d0009cdf0476f6a83fd992a17f5d0 url: "https://pub.dev" source: hosted - version: "2.8.4" + version: "2.8.5" video_player_android: dependency: transitive description: @@ -1302,10 +1326,10 @@ packages: dependency: transitive description: name: video_player_web - sha256: "34beb3a07d4331a24f7e7b2f75b8e2b103289038e07e65529699a671b6a6e2cb" + sha256: "41245cef5ef29c4585dbabcbcbe9b209e34376642c7576cabf11b4ad9289d6e4" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.3.0" visibility_detector: dependency: "direct main" description: @@ -1314,6 +1338,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.0+2" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" wakelock: dependency: "direct main" description: @@ -1342,18 +1374,18 @@ packages: dependency: transitive description: name: wakelock_plus - sha256: f268ca2116db22e57577fb99d52515a24bdc1d570f12ac18bb762361d43b043d + sha256: "104d94837bb28c735894dcd592877e990149c380e6358b00c04398ca1426eed4" url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.2.1" wakelock_plus_platform_interface: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: "40fabed5da06caff0796dc638e1f07ee395fb18801fbff3255a2372db2d80385" + sha256: "422d1cdbb448079a8a62a5a770b69baa489f8f7ca21aef47800c726d404f9d16" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.1" wakelock_web: dependency: transitive description: @@ -1382,10 +1414,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" win32: dependency: "direct overridden" description: @@ -1427,5 +1459,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.3 <3.13.0" - flutter: ">=3.16.6" + dart: ">=3.3.0 <3.13.0" + flutter: ">=3.19.0"