diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 1fd8270e..d9f8aa20 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -6,9 +6,9 @@ PODS: - Flutter - flutter_secure_storage (6.0.0): - Flutter - - GoogleDataTransport (9.3.0): + - GoogleDataTransport (9.4.1): - GoogleUtilities/Environment (~> 7.7) - - nanopb (< 2.30910.0, >= 2.30908.0) + - nanopb (< 2.30911.0, >= 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) - GoogleMLKit/BarcodeScanning (4.0.0): - GoogleMLKit/MLKitCore @@ -27,12 +27,16 @@ PODS: - GoogleToolboxForMac/Defines (= 2.3.2) - "GoogleToolboxForMac/NSString+URLArguments (= 2.3.2)" - "GoogleToolboxForMac/NSString+URLArguments (2.3.2)" - - GoogleUtilities/Environment (7.12.0): + - GoogleUtilities/Environment (7.13.0): + - GoogleUtilities/Privacy - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.12.0): + - GoogleUtilities/Logger (7.13.0): - GoogleUtilities/Environment - - GoogleUtilities/UserDefaults (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (7.13.0) + - GoogleUtilities/UserDefaults (7.13.0): - GoogleUtilities/Logger + - GoogleUtilities/Privacy - GoogleUtilitiesComponents (1.1.0): - GoogleUtilities/Logger - GTMSessionFetcher/Core (2.3.0) @@ -57,36 +61,32 @@ PODS: - mobile_scanner (3.5.6): - Flutter - GoogleMLKit/BarcodeScanning (~> 4.0.0) - - nanopb (2.30909.1): - - nanopb/decode (= 2.30909.1) - - nanopb/encode (= 2.30909.1) - - nanopb/decode (2.30909.1) - - nanopb/encode (2.30909.1) + - nanopb (2.30910.0): + - nanopb/decode (= 2.30910.0) + - nanopb/encode (= 2.30910.0) + - nanopb/decode (2.30910.0) + - nanopb/encode (2.30910.0) - package_info_plus (0.4.5): - Flutter - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS - - PromisesObjC (2.3.1) - - Sentry/HybridSDK (8.20.0): - - SentryPrivate (= 8.20.0) + - PromisesObjC (2.4.0) + - Sentry/HybridSDK (8.21.0): + - SentryPrivate (= 8.21.0) - sentry_flutter (0.0.1): - Flutter - FlutterMacOS - - Sentry/HybridSDK (= 8.20.0) - - SentryPrivate (8.20.0) + - Sentry/HybridSDK (= 8.21.0) + - SentryPrivate (8.21.0) - shared_preferences_foundation (0.0.1): - Flutter - FlutterMacOS - - sign_in_with_apple (0.0.1): - - Flutter - sqflite (0.0.3): - Flutter - FlutterMacOS - url_launcher_ios (0.0.1): - Flutter - - webview_flutter_wkwebview (0.0.1): - - Flutter DEPENDENCIES: - app_links (from `.symlinks/plugins/app_links/ios`) @@ -98,10 +98,8 @@ DEPENDENCIES: - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - - sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`) - sqflite (from `.symlinks/plugins/sqflite/darwin`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) SPEC REPOS: trunk: @@ -139,24 +137,20 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/sentry_flutter/ios" shared_preferences_foundation: :path: ".symlinks/plugins/shared_preferences_foundation/darwin" - sign_in_with_apple: - :path: ".symlinks/plugins/sign_in_with_apple/ios" sqflite: :path: ".symlinks/plugins/sqflite/darwin" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" - webview_flutter_wkwebview: - :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" SPEC CHECKSUMS: - app_links: 5ef33d0d295a89d9d16bb81b0e3b0d5f70d6c875 + app_links: e70ca16b4b0f88253b3b3660200d4a10b4ea9795 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069 flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be - GoogleDataTransport: 57c22343ab29bc686febbf7cbb13bad167c2d8fe + GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a GoogleMLKit: 2bd0dc6253c4d4f227aad460f69215a504b2980e GoogleToolboxForMac: 8bef7c7c5cf7291c687cf5354f39f9db6399ad34 - GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34 + GoogleUtilities: d053d902a8edaa9904e1bd00c37535385b8ed152 GoogleUtilitiesComponents: 679b2c881db3b615a2777504623df6122dd20afe GTMSessionFetcher: 3a63d75eecd6aa32c2fc79f578064e1214dfdec2 MLImage: 7bb7c4264164ade9bf64f679b40fb29c8f33ee9b @@ -164,18 +158,16 @@ SPEC CHECKSUMS: MLKitCommon: c1b791c3e667091918d91bda4bba69a91011e390 MLKitVision: 8baa5f46ee3352614169b85250574fde38c36f49 mobile_scanner: 38dcd8a49d7d485f632b7de65e4900010187aef2 - nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 + nanopb: 438bc412db1928dac798aa6fd75726007be04262 package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85 path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c - PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 - Sentry: a8d7b373b9f9868442b02a0c425192f693103cbf - sentry_flutter: 03e7660857a8cdb236e71456a7e8447b65c8a788 - SentryPrivate: 006b24af16828441f70e2ab6adf241bd0a8ad130 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + Sentry: ebc12276bd17613a114ab359074096b6b3725203 + sentry_flutter: dff1df05dc39c83d04f9330b36360fc374574c5e + SentryPrivate: d651efb234cf385ec9a1cdd3eff94b5e78a0e0fe shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695 - sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440 sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec - url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812 - webview_flutter_wkwebview: be0f0d33777f1bfd0c9fdcb594786704dbf65f36 + url_launcher_ios: 6116280ddcfe98ab8820085d8d76ae7449447586 PODFILE CHECKSUM: e60e17f8bfffff789408fce3f968c37c5c63400e diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index c0b7414d..e689c188 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -342,7 +342,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -428,7 +428,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -477,7 +477,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/lib/core/presentation/widgets/intake_card.dart b/lib/core/presentation/widgets/intake_card.dart index b8414d91..2f8d172f 100644 --- a/lib/core/presentation/widgets/intake_card.dart +++ b/lib/core/presentation/widgets/intake_card.dart @@ -7,13 +7,13 @@ import 'package:opennutritracker/core/utils/locator.dart'; class IntakeCard extends StatelessWidget { final IntakeEntity intake; - final Function(BuildContext, IntakeEntity) onItemLongPressed; + final Function(BuildContext, IntakeEntity)? onItemLongPressed; final bool firstListElement; const IntakeCard( {required super.key, required this.intake, - required this.onItemLongPressed, + this.onItemLongPressed, required this.firstListElement}); @override @@ -32,9 +32,9 @@ class IntakeCard extends StatelessWidget { ), elevation: 1, child: InkWell( - onLongPress: () { - onLongPressedItem(context); - }, + onLongPress: onItemLongPressed != null + ? () => onLongPressedItem(context) + : null, child: Stack( children: [ intake.meal.mainImageUrl != null @@ -122,6 +122,8 @@ class IntakeCard extends StatelessWidget { } void onLongPressedItem(BuildContext context) { - onItemLongPressed(context, intake); + if (onItemLongPressed != null) { + onItemLongPressed!(context, intake); + } } } diff --git a/lib/features/home/home_page.dart b/lib/features/home/home_page.dart index 6e2c0f43..dd58f948 100644 --- a/lib/features/home/home_page.dart +++ b/lib/features/home/home_page.dart @@ -25,6 +25,7 @@ class _HomePageState extends State with WidgetsBindingObserver { final log = Logger('HomePage'); late HomeBloc _homeBloc; + bool _isDragging = false; @override void initState() { @@ -111,57 +112,87 @@ class _HomePageState extends State with WidgetsBindingObserver { if (showDisclaimerDialog) { _showDisclaimerDialog(context); } - return ListView(children: [ - DashboardWidget( - totalKcalDaily: totalKcalDaily, - totalKcalLeft: totalKcalLeft, - totalKcalSupplied: totalKcalSupplied, - totalKcalBurned: totalKcalBurned, - totalCarbsIntake: totalCarbsIntake, - totalFatsIntake: totalFatsIntake, - totalProteinsIntake: totalProteinsIntake, - totalCarbsGoal: totalCarbsGoal, - totalFatsGoal: totalFatsGoal, - totalProteinsGoal: totalProteinsGoal, - ), - ActivityVerticalList( - day: DateTime.now(), - title: S.of(context).activityLabel, - userActivityList: userActivities, - onItemLongPressedCallback: onActivityItemLongPressed, - ), - IntakeVerticalList( - day: DateTime.now(), - title: S.of(context).breakfastLabel, - listIcon: IntakeTypeEntity.breakfast.getIconData(), - addMealType: AddMealType.breakfastType, - intakeList: breakfastIntakeList, - onItemLongPressedCallback: onIntakeItemLongPressed, - ), - IntakeVerticalList( - day: DateTime.now(), - title: S.of(context).lunchLabel, - listIcon: IntakeTypeEntity.lunch.getIconData(), - addMealType: AddMealType.lunchType, - intakeList: lunchIntakeList, - onItemLongPressedCallback: onIntakeItemLongPressed, - ), - IntakeVerticalList( - day: DateTime.now(), - title: S.of(context).dinnerLabel, - addMealType: AddMealType.dinnerType, - listIcon: IntakeTypeEntity.dinner.getIconData(), - intakeList: dinnerIntakeList, - onItemLongPressedCallback: onIntakeItemLongPressed, - ), - IntakeVerticalList( - day: DateTime.now(), - title: S.of(context).snackLabel, - listIcon: IntakeTypeEntity.snack.getIconData(), - addMealType: AddMealType.snackType, - intakeList: snackIntakeList, - onItemLongPressedCallback: onIntakeItemLongPressed, - ) + return Stack(children: [ + ListView(children: [ + DashboardWidget( + totalKcalDaily: totalKcalDaily, + totalKcalLeft: totalKcalLeft, + totalKcalSupplied: totalKcalSupplied, + totalKcalBurned: totalKcalBurned, + totalCarbsIntake: totalCarbsIntake, + totalFatsIntake: totalFatsIntake, + totalProteinsIntake: totalProteinsIntake, + totalCarbsGoal: totalCarbsGoal, + totalFatsGoal: totalFatsGoal, + totalProteinsGoal: totalProteinsGoal, + ), + ActivityVerticalList( + day: DateTime.now(), + title: S.of(context).activityLabel, + userActivityList: userActivities, + onItemLongPressedCallback: onActivityItemLongPressed, + ), + IntakeVerticalList( + day: DateTime.now(), + title: S.of(context).breakfastLabel, + listIcon: IntakeTypeEntity.breakfast.getIconData(), + addMealType: AddMealType.breakfastType, + intakeList: breakfastIntakeList, + onItemDragCallback: onIntakeItemDrag, + ), + IntakeVerticalList( + day: DateTime.now(), + title: S.of(context).lunchLabel, + listIcon: IntakeTypeEntity.lunch.getIconData(), + addMealType: AddMealType.lunchType, + intakeList: lunchIntakeList, + onItemDragCallback: onIntakeItemDrag, + ), + IntakeVerticalList( + day: DateTime.now(), + title: S.of(context).dinnerLabel, + addMealType: AddMealType.dinnerType, + listIcon: IntakeTypeEntity.dinner.getIconData(), + intakeList: dinnerIntakeList, + onItemDragCallback: onIntakeItemDrag, + ), + IntakeVerticalList( + day: DateTime.now(), + title: S.of(context).snackLabel, + listIcon: IntakeTypeEntity.snack.getIconData(), + addMealType: AddMealType.snackType, + intakeList: snackIntakeList, + onItemDragCallback: onIntakeItemDrag, + ), + const SizedBox(height: 48.0) + ]), + Align( + alignment: Alignment.bottomCenter, + child: Visibility( + visible: _isDragging, + child: Container( + height: 70, + color: Theme.of(context).colorScheme.error.withOpacity(0.3), + child: DragTarget( + onAcceptWithDetails: (data) { + _confirmDelete(context, data.data); + }, + onLeave: (data) { + setState(() { + _isDragging = false; + }); + }, + builder: (context, candidateData, rejectedData) { + return const Center( + child: Icon( + Icons.delete_outline, + size: 36, + color: Colors.white, + ), + ); + }, + ), + ))) ]); } @@ -195,6 +226,27 @@ class _HomePageState extends State with WidgetsBindingObserver { } } + void onIntakeItemDrag(bool isDragging) { + WidgetsBinding.instance.addPostFrameCallback((_) { + setState(() { + _isDragging = isDragging; + }); + }); + } + + void _confirmDelete(BuildContext context, IntakeEntity intake) async { + bool? delete = await showDialog( + context: context, builder: (context) => const DeleteDialog()); + + if (delete == true) { + _homeBloc.deleteIntakeItem(intake); + _homeBloc.add(const LoadItemsEvent()); + } + setState(() { + _isDragging = false; + }); + } + /// Show disclaimer dialog after build method void _showDisclaimerDialog(BuildContext context) async { WidgetsBinding.instance.addPostFrameCallback((_) async { diff --git a/lib/features/home/presentation/widgets/intake_vertical_list.dart b/lib/features/home/presentation/widgets/intake_vertical_list.dart index 2e558d97..097ad30e 100644 --- a/lib/features/home/presentation/widgets/intake_vertical_list.dart +++ b/lib/features/home/presentation/widgets/intake_vertical_list.dart @@ -2,26 +2,49 @@ import 'package:flutter/material.dart'; import 'package:opennutritracker/core/domain/entity/intake_entity.dart'; import 'package:opennutritracker/core/presentation/widgets/intake_card.dart'; import 'package:opennutritracker/core/presentation/widgets/placeholder_card.dart'; +import 'package:opennutritracker/core/utils/locator.dart'; import 'package:opennutritracker/core/utils/navigation_options.dart'; import 'package:opennutritracker/features/add_meal/presentation/add_meal_screen.dart'; import 'package:opennutritracker/features/add_meal/presentation/add_meal_type.dart'; +import 'package:opennutritracker/features/diary/presentation/bloc/calendar_day_bloc.dart'; +import 'package:opennutritracker/features/diary/presentation/bloc/diary_bloc.dart'; +import 'package:opennutritracker/features/home/presentation/bloc/home_bloc.dart'; +import 'package:opennutritracker/features/meal_detail/presentation/bloc/meal_detail_bloc.dart'; -class IntakeVerticalList extends StatelessWidget { +class IntakeVerticalList extends StatefulWidget { final DateTime day; final String title; final IconData listIcon; final AddMealType addMealType; final List intakeList; - final Function(BuildContext, IntakeEntity) onItemLongPressedCallback; + final Function(BuildContext, IntakeEntity)? onItemLongPressedCallback; + final Function(bool)? onItemDragCallback; - const IntakeVerticalList( - {super.key, - required this.day, - required this.title, - required this.listIcon, - required this.addMealType, - required this.intakeList, - required this.onItemLongPressedCallback}); + const IntakeVerticalList({ + super.key, + required this.day, + required this.title, + required this.listIcon, + required this.addMealType, + required this.intakeList, + this.onItemLongPressedCallback, + this.onItemDragCallback, + }); + + @override + State createState() => _IntakeVerticalListState(); +} + +class _IntakeVerticalListState extends State { + late MealDetailBloc _mealDetailBloc; + late HomeBloc _homeBloc; + + @override + void initState() { + _mealDetailBloc = locator(); + _homeBloc = locator(); + super.initState(); + } @override Widget build(BuildContext context) { @@ -32,39 +55,86 @@ class IntakeVerticalList extends StatelessWidget { alignment: Alignment.centerLeft, child: Row( children: [ - Icon(listIcon, + Icon(widget.listIcon, size: 24, color: Theme.of(context).colorScheme.onBackground), const SizedBox(width: 4.0), Text( - title, + widget.title, style: Theme.of(context).textTheme.titleLarge?.copyWith( color: Theme.of(context).colorScheme.onBackground), ), ], ), ), - SizedBox( - height: 120, - child: ListView.builder( - scrollDirection: Axis.horizontal, - itemCount: intakeList.length + 1, // List length + placeholder card - itemBuilder: (BuildContext context, int index) { - final firstListElement = index == 0 ? true : false; - if (index == intakeList.length) { - return PlaceholderCard( - day: day, - onTap: () => _onPlaceholderCardTapped(context), - firstListElement: firstListElement); - } else { - final intakeEntity = intakeList[index]; - return IntakeCard( - key: ValueKey(intakeEntity.meal.code), - intake: intakeEntity, - onItemLongPressed: onItemLongPressedCallback, - firstListElement: firstListElement); - } - }, - ), + DragTarget( + onAcceptWithDetails: (intake) { + _onItemDropped(intake.data); + }, + builder: (context, candidateData, rejectedData) { + return SizedBox( + height: 120, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: widget.intakeList.length + 1, + // List length + placeholder card + itemBuilder: (BuildContext context, int index) { + final firstListElement = index == 0 ? true : false; + if (index == widget.intakeList.length) { + return PlaceholderCard( + day: widget.day, + onTap: () => _onPlaceholderCardTapped(context), + firstListElement: firstListElement); + } else { + final intakeEntity = widget.intakeList[index]; + return LongPressDraggable( + onDragStarted: () { + widget.onItemDragCallback?.call(true); + }, + onDragEnd: (details) { + widget.onItemDragCallback?.call(false); + }, + data: intakeEntity, + feedback: Material( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Opacity( + opacity: 0.7, + child: IntakeCard( + key: ValueKey(intakeEntity.meal.code), + intake: intakeEntity, + firstListElement: false, + ), + ), + ), + childWhenDragging: Row( + children: [ + SizedBox(width: firstListElement ? 16 : 0), + SizedBox( + width: 120, + height: 120, + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + color: + Theme.of(context).cardColor, + ), + ), + ], + ), + child: IntakeCard( + key: ValueKey(intakeEntity.meal.code), + intake: intakeEntity, + onItemLongPressed: widget.onItemLongPressedCallback, + firstListElement: firstListElement, + ), + ); + } + }, + ), + ); + }, ), ], ); @@ -72,6 +142,19 @@ class IntakeVerticalList extends StatelessWidget { void _onPlaceholderCardTapped(BuildContext context) { Navigator.pushNamed(context, NavigationOptions.addMealRoute, - arguments: AddMealScreenArguments(addMealType, day)); + arguments: AddMealScreenArguments(widget.addMealType, widget.day)); + } + + void _onItemDropped(IntakeEntity entity) { + _mealDetailBloc.addIntake(context, entity.unit, entity.amount.toString(), + widget.addMealType.getIntakeType(), entity.meal, entity.dateTime); + _homeBloc.deleteIntakeItem(entity); + + // Refresh Home Page + locator().add(const LoadItemsEvent()); + + // Refresh Diary Page + locator().add(const LoadDiaryYearEvent()); + locator().add(LoadCalendarDayEvent(DateTime.now())); } } diff --git a/pubspec.lock b/pubspec.lock index a26ee84a..74fc3e98 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: app_links - sha256: "4e392b5eba997df356ca6021f28431ce1cfeb16758699553a94b13add874a3bb" + sha256: "3ced568a5d9e309e99af71285666f1f3117bddd0bd5b3317979dccc1a40cada4" url: "https://pub.dev" source: hosted - version: "3.5.0" + version: "3.5.1" archive: dependency: transitive description: @@ -245,10 +245,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.6" dots_indicator: dependency: transitive description: @@ -721,10 +721,10 @@ packages: dependency: "direct main" description: name: mobile_scanner - sha256: "619ed5fd43ca9007a151f00c3dc43feedeaf235fe5647735d0237c38849d49dc" + sha256: "827765afbd4792ff3fd105ad593821ac0f6d8a7d352689013b07ee85be336312" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.1" nested: dependency: transitive description: @@ -889,10 +889,10 @@ packages: dependency: "direct main" description: name: provider - sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c url: "https://pub.dev" source: hosted - version: "6.1.1" + version: "6.1.2" pub_semver: dependency: transitive description: @@ -945,18 +945,18 @@ packages: dependency: transitive description: name: sentry - sha256: d2ee9c850d876d285f22e2e662f400ec2438df9939fe4acd5d780df9841794ce + sha256: a524a87d096799b775530176c8c082afe7aa1f10cc31ba078fecdd74e9afc923 url: "https://pub.dev" source: hosted - version: "7.16.1" + version: "7.17.0" sentry_flutter: dependency: "direct main" description: name: sentry_flutter - sha256: "5b428c189c825f16fb14e9166529043f06b965d5b59bfc3a1415e39c082398c0" + sha256: e0f8367f8f7c74dba9f7521f71700bce6c6ee065cf342f065d4fce411b84fc7b url: "https://pub.dev" source: hosted - version: "7.16.1" + version: "7.17.0" shared_preferences: dependency: transitive description: @@ -1214,10 +1214,10 @@ packages: 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: @@ -1334,10 +1334,10 @@ packages: dependency: transitive description: name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + sha256: "8cb58b45c47dcb42ab3651533626161d6b67a2921917d8d429791f76972b3480" url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.3.0" xdg_directories: dependency: transitive description: @@ -1371,5 +1371,5 @@ packages: source: hosted version: "2.0.0" sdks: - dart: ">=3.3.0-279.1.beta <3.4.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.4.0" + flutter: ">=3.16.6" diff --git a/pubspec.yaml b/pubspec.yaml index a9f5df04..dca03a37 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.6.12+18 +version: 0.6.12+19 environment: sdk: '>=3.0.0 <3.4.0'