diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml
index 561d011..8170964 100644
--- a/.github/workflows/build-android.yml
+++ b/.github/workflows/build-android.yml
@@ -28,10 +28,10 @@ jobs:
uses: subosito/flutter-action@v2.3.0
- name: Install Android dependencies
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
- distribution: "zulu"
- java-version: "12.x"
+ distribution: 'zulu'
+ java-version: '17'
- name: Checkout code
uses: actions/checkout@v3
diff --git a/.metadata b/.metadata
index ea58cb8..e720147 100644
--- a/.metadata
+++ b/.metadata
@@ -4,7 +4,7 @@
# This file should be version controlled and should not be manually edited.
version:
- revision: "e1e47221e86272429674bec4f1bd36acc4fc7b77"
+ revision: "b0850beeb25f6d5b10426284f506557f66181b36"
channel: "stable"
project_type: app
@@ -13,11 +13,11 @@ project_type: app
migration:
platforms:
- platform: root
- create_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77
- base_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77
+ create_revision: b0850beeb25f6d5b10426284f506557f66181b36
+ base_revision: b0850beeb25f6d5b10426284f506557f66181b36
- platform: android
- create_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77
- base_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77
+ create_revision: b0850beeb25f6d5b10426284f506557f66181b36
+ base_revision: b0850beeb25f6d5b10426284f506557f66181b36
# User provided section
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 3f0112b..03c1f4d 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -1,25 +1,26 @@
plugins {
id "com.android.application"
id "kotlin-android"
+ // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id "dev.flutter.flutter-gradle-plugin"
}
def localProperties = new Properties()
-def localPropertiesFile = rootProject.file('local.properties')
+def localPropertiesFile = rootProject.file("local.properties")
if (localPropertiesFile.exists()) {
- localPropertiesFile.withReader('UTF-8') { reader ->
+ localPropertiesFile.withReader("UTF-8") { reader ->
localProperties.load(reader)
}
}
-def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
if (flutterVersionCode == null) {
- flutterVersionCode = '1'
+ flutterVersionCode = "1"
}
-def flutterVersionName = localProperties.getProperty('flutter.versionName')
+def flutterVersionName = localProperties.getProperty("flutter.versionName")
if (flutterVersionName == null) {
- flutterVersionName = '1.0'
+ flutterVersionName = "1.0"
}
def keystoreProperties = new Properties()
@@ -34,32 +35,25 @@ if (keystorePropertiesFile.exists()) {
}
android {
- namespace "codes.merritt.bargain"
- compileSdkVersion flutter.compileSdkVersion
- ndkVersion flutter.ndkVersion
+ namespace = "codes.merritt.bargain"
+ compileSdk = flutter.compileSdkVersion
+ ndkVersion = flutter.ndkVersion
compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
-
- kotlinOptions {
- jvmTarget = '1.8'
- }
-
- sourceSets {
- main.java.srcDirs += 'src/main/kotlin'
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
- applicationId "codes.merritt.bargain"
+ applicationId = "codes.merritt.bargain"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
- minSdkVersion flutter.minSdkVersion
- targetSdkVersion flutter.targetSdkVersion
- versionCode flutterVersionCode.toInteger()
- versionName flutterVersionName
+ // minSdk = flutter.minSdkVersion
+ minSdk = 23 // Specified to accomodate super_context_menu
+ targetSdk = flutter.targetSdkVersion
+ versionCode = flutterVersionCode.toInteger()
+ versionName = flutterVersionName
}
signingConfigs {
@@ -71,18 +65,13 @@ android {
}
}
- buildTypes {
- release {
- signingConfig signingConfigs.release
- ndk {
- debugSymbolLevel 'SYMBOL_TABLE'
- }
+ buildTypes {
+ release {
+ signingConfig = signingConfigs.release
}
}
}
flutter {
- source '../..'
+ source = "../.."
}
-
-dependencies {}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 026e64d..27a93e9 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -7,6 +7,7 @@
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
+ android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
@@ -16,12 +17,12 @@
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
+ android:name="io.flutter.embedding.android.NormalTheme"
+ android:resource="@style/NormalTheme"
+ />
-
-
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/kotlin/com/example/unit_bargain_hunter/MainActivity.kt b/android/app/src/main/kotlin/codes/merritt/unit_bargain_hunter/MainActivity.kt
similarity index 66%
rename from android/app/src/main/kotlin/com/example/unit_bargain_hunter/MainActivity.kt
rename to android/app/src/main/kotlin/codes/merritt/unit_bargain_hunter/MainActivity.kt
index 4d3b29b..038ccf3 100644
--- a/android/app/src/main/kotlin/com/example/unit_bargain_hunter/MainActivity.kt
+++ b/android/app/src/main/kotlin/codes/merritt/unit_bargain_hunter/MainActivity.kt
@@ -2,5 +2,4 @@ package codes.merritt.bargain
import io.flutter.embedding.android.FlutterActivity
-class MainActivity: FlutterActivity() {
-}
+class MainActivity: FlutterActivity()
diff --git a/android/build.gradle b/android/build.gradle
index f7eb7f6..d2ffbff 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,16 +1,3 @@
-buildscript {
- ext.kotlin_version = '1.7.10'
- repositories {
- google()
- mavenCentral()
- }
-
- dependencies {
- classpath 'com.android.tools.build:gradle:7.3.0'
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- }
-}
-
allprojects {
repositories {
google()
@@ -18,12 +5,12 @@ allprojects {
}
}
-rootProject.buildDir = '../build'
+rootProject.buildDir = "../build"
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
- project.evaluationDependsOn(':app')
+ project.evaluationDependsOn(":app")
}
tasks.register("clean", Delete) {
diff --git a/android/gradle.properties b/android/gradle.properties
index 94adc3a..3b5b324 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,3 +1,3 @@
-org.gradle.jvmargs=-Xmx1536M
+org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
android.enableJetifier=true
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 3c472b9..e1ca574 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip
diff --git a/android/settings.gradle b/android/settings.gradle
index 55c4ca8..536165d 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle
@@ -5,16 +5,21 @@ pluginManagement {
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return flutterSdkPath
- }
- settings.ext.flutterSdkPath = flutterSdkPath()
+ }()
- includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
+ includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
- plugins {
- id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
}
}
-include ":app"
+plugins {
+ id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+ id "com.android.application" version "7.3.0" apply false
+ id "org.jetbrains.kotlin.android" version "1.7.10" apply false
+}
-apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle"
+include ":app"
diff --git a/devtools_options.yaml b/devtools_options.yaml
new file mode 100644
index 0000000..fa0b357
--- /dev/null
+++ b/devtools_options.yaml
@@ -0,0 +1,3 @@
+description: This file stores settings for Dart & Flutter DevTools.
+documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
+extensions:
diff --git a/lib/app/app_widget.dart b/lib/app/app_widget.dart
index 69c1503..968bfe7 100644
--- a/lib/app/app_widget.dart
+++ b/lib/app/app_widget.dart
@@ -14,7 +14,7 @@ import '../shortcuts/app_shortcuts.dart';
export 'cubit/app_cubit.dart';
class AppWidget extends StatefulWidget {
- const AppWidget({Key? key}) : super(key: key);
+ const AppWidget({super.key});
@override
State createState() => _AppWidgetState();
diff --git a/lib/app/widgets/custom_about_dialog.dart b/lib/app/widgets/custom_about_dialog.dart
index 41025c3..b67062c 100644
--- a/lib/app/widgets/custom_about_dialog.dart
+++ b/lib/app/widgets/custom_about_dialog.dart
@@ -7,7 +7,7 @@ import '../app_widget.dart';
import 'widgets.dart';
class CustomAboutDialog extends StatelessWidget {
- const CustomAboutDialog({Key? key}) : super(key: key);
+ const CustomAboutDialog({super.key});
@override
Widget build(BuildContext context) {
diff --git a/lib/app/widgets/emoji_text.dart b/lib/app/widgets/emoji_text.dart
index 36c4859..e40b9c1 100644
--- a/lib/app/widgets/emoji_text.dart
+++ b/lib/app/widgets/emoji_text.dart
@@ -9,10 +9,10 @@ class EmojiText extends StatelessWidget {
final TextStyle? textStyle;
const EmojiText({
- Key? key,
+ super.key,
required this.text,
this.textStyle,
- }) : super(key: key);
+ });
bool shouldBreak(bool isEmoji, int value) {
if (isEmoji) {
diff --git a/lib/calculator/calculator_page.dart b/lib/calculator/calculator_page.dart
index 95f7046..b981b0b 100644
--- a/lib/calculator/calculator_page.dart
+++ b/lib/calculator/calculator_page.dart
@@ -17,7 +17,7 @@ import 'widgets/widgets.dart';
class CalculatorPage extends StatelessWidget {
static const id = 'calculator_page';
- CalculatorPage({Key? key}) : super(key: key);
+ CalculatorPage({super.key});
final focusNode = FocusNode(
debugLabel: 'Background node',
@@ -65,9 +65,6 @@ class CalculatorPage extends StatelessWidget {
appBar: appBar,
drawer: drawer,
body: const CalculatorView(),
- floatingActionButton: const _FloatingActionButton(),
- floatingActionButtonLocation:
- FloatingActionButtonLocation.endTop,
),
),
),
@@ -102,7 +99,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
@override
final preferredSize = const Size.fromHeight(kToolbarHeight);
- const CustomAppBar({Key? key}) : super(key: key);
+ const CustomAppBar({super.key});
@override
Widget build(BuildContext context) {
@@ -116,6 +113,9 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
child: AppBar(
centerTitle: true,
title: const _SheetNameWidget(),
+ actions: const [
+ _ExtraActionsDropdown(),
+ ],
),
);
},
@@ -123,8 +123,53 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
}
}
+/// A menu button for extra actions in the app bar related to the active sheet.
+class _ExtraActionsDropdown extends StatelessWidget {
+ const _ExtraActionsDropdown();
+
+ @override
+ Widget build(BuildContext context) {
+ return BlocBuilder(
+ builder: (context, state) {
+ return MenuAnchor(
+ menuChildren: [
+ MenuItemButton(
+ leadingIcon: const Icon(Icons.edit),
+ onPressed: () => showModal(context, const SheetSettingsView()),
+ child: const Text('Rename sheet'),
+ ),
+ MenuItemButton(
+ leadingIcon: const Icon(Icons.refresh),
+ onPressed: () => _confirmResetSheet(context),
+ child: const Text('Reset sheet'),
+ ),
+ MenuItemButton(
+ leadingIcon: const Icon(Icons.delete),
+ onPressed: () {
+ showConfirmRemovalDialog(context, state.activeSheet!);
+ },
+ child: const Text('Delete sheet'),
+ ),
+ ],
+ builder: (context, controller, child) {
+ return IconButton(
+ icon: const Icon(Icons.more_vert),
+ onPressed: () {
+ if (controller.isOpen) {
+ controller.close();
+ } else {
+ controller.open();
+ }
+ });
+ },
+ );
+ },
+ );
+ }
+}
+
class CalculatorView extends StatefulWidget {
- const CalculatorView({Key? key}) : super(key: key);
+ const CalculatorView({super.key});
@override
State createState() => _CalculatorViewState();
@@ -172,7 +217,7 @@ class _CalculatorViewState extends State {
onTap: () => focusNode.requestFocus(),
child: Focus(
focusNode: focusNode,
- child: const ScrollingItemsList(),
+ child: const _MainView(),
),
),
],
@@ -182,17 +227,30 @@ class _CalculatorViewState extends State {
}
}
-class ScrollingItemsList extends StatelessWidget {
- const ScrollingItemsList({Key? key}) : super(key: key);
+class _MainView extends StatelessWidget {
+ const _MainView();
@override
Widget build(BuildContext context) {
final calcCubit = context.read();
final mediaQuery = MediaQuery.of(context);
- final Widget sheetNameWidget = (mediaQuery.isHandset) //
- ? const SizedBox()
- : const _SheetNameWidget();
+ const Widget sheetNameWidget = _SheetNameWidget();
+
+ final Widget header;
+ if (mediaQuery.isHandset) {
+ header = const SizedBox();
+ } else {
+ header = const Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ // Ensure name widget is centered
+ SizedBox(width: 8),
+ sheetNameWidget,
+ _ExtraActionsDropdown(),
+ ],
+ );
+ }
return BlocBuilder(
builder: (context, state) {
@@ -220,7 +278,7 @@ class ScrollingItemsList extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- sheetNameWidget,
+ header,
Expanded(
child: SingleChildScrollView(
controller: ScrollController(),
@@ -256,41 +314,20 @@ class ScrollingItemsList extends StatelessWidget {
/// Displays the sheet's name, and allows the user to change it.
class _SheetNameWidget extends StatelessWidget {
- const _SheetNameWidget({
- Key? key,
- }) : super(key: key);
+ const _SheetNameWidget();
@override
Widget build(BuildContext context) {
return BlocBuilder(
builder: (context, state) {
- final nameTextWidget = Text(
- state.activeSheet!.name,
- style: Theme.of(context).textTheme.titleLarge,
- );
-
- const smallSpacer = SizedBox(width: 4);
-
- const editIcon = Opacity(
- opacity: 0.6,
- child: Icon(
- Icons.edit,
- size: 18,
- ),
- );
-
return InkWell(
borderRadius: BorderRadius.circular(8),
onTap: () => showModal(context, const SheetSettingsView()),
child: Padding(
padding: const EdgeInsets.all(8.0),
- child: Row(
- mainAxisSize: MainAxisSize.min,
- children: [
- nameTextWidget,
- smallSpacer,
- editIcon,
- ],
+ child: Text(
+ state.activeSheet!.name,
+ style: Theme.of(context).textTheme.titleLarge,
),
),
);
@@ -299,53 +336,28 @@ class _SheetNameWidget extends StatelessWidget {
}
}
-class _FloatingActionButton extends StatelessWidget {
- const _FloatingActionButton();
-
- @override
- Widget build(BuildContext context) {
- final mediaQuery = MediaQuery.of(context);
-
- return Padding(
- padding: EdgeInsets.only(
- // On desktop the FAB is getting placed directly against the top of the
- // screen, so we need to add some padding to make it look nicer.
- top: (mediaQuery.isHandset) ? 0 : 16.0,
+/// Show a dialog to confirm the user wants to reset the sheet.
+void _confirmResetSheet(BuildContext context) {
+ showDialog(
+ context: context,
+ builder: (context) => AlertDialog(
+ title: const Text('Reset sheet?'),
+ content: const Text(
+ 'This will remove all items from the sheet.',
),
- child: FloatingActionButton.small(
- onPressed: () {
- // Show a dialog to confirm the user wants to reset the sheet.
- showDialog(
- context: context,
- builder: (context) => AlertDialog(
- title: const Text('Reset sheet?'),
- content: const Text(
- 'This will remove all items from the sheet.',
- ),
- actions: [
- TextButton(
- onPressed: () => Navigator.pop(context),
- child: const Text('Cancel'),
- ),
- TextButton(
- onPressed: () {
- context.read().resetActiveSheet();
- Navigator.pop(context);
- },
- child: const Text('Reset'),
- ),
- ],
- ),
- );
- },
- child: Transform.flip(
- flipX: true,
- child: const Icon(
- Icons.refresh,
- color: Colors.orange,
- ),
+ actions: [
+ TextButton(
+ onPressed: () => Navigator.pop(context),
+ child: const Text('Cancel'),
),
- ),
- );
- }
+ TextButton(
+ onPressed: () {
+ context.read().resetActiveSheet();
+ Navigator.pop(context);
+ },
+ child: const Text('Reset'),
+ ),
+ ],
+ ),
+ );
}
diff --git a/lib/calculator/validators/cost_validator.dart b/lib/calculator/validators/cost_validator.dart
index 788d5a2..9547011 100644
--- a/lib/calculator/validators/cost_validator.dart
+++ b/lib/calculator/validators/cost_validator.dart
@@ -52,15 +52,15 @@ class _CostByWeightValidator {
// Convert to grams as the base unit for comparisons.
static double _getUnitAsGrams(Unit unit, double quantity) {
switch (unit.runtimeType) {
- case Milligram:
+ case const (Milligram):
return quantity / 1000;
- case Gram:
+ case const (Gram):
return quantity;
- case Kilogram:
+ case const (Kilogram):
return quantity * 1000;
- case Ounce:
+ case const (Ounce):
return quantity * 28.35;
- case Pound:
+ case const (Pound):
return quantity * 454;
default:
throw Exception('Error converting weight type');
@@ -123,13 +123,13 @@ class _CostByVolumeValidator {
// Convert to Millilitres as the base unit for comparisons.
static double _getUnitAsMilliletres(Unit unit, double quantity) {
switch (unit.runtimeType) {
- case Millilitre:
+ case const (Millilitre):
return quantity;
- case Litre:
+ case const (Litre):
return quantity * 1000;
- case FluidOunce:
+ case const (FluidOunce):
return quantity * 29.574;
- case Quart:
+ case const (Quart):
return quantity * 946;
default:
throw Exception('Error converting volume type');
diff --git a/lib/calculator/widgets/compare_by_dropdown_button.dart b/lib/calculator/widgets/compare_by_dropdown_button.dart
index a30bd92..0d2e402 100644
--- a/lib/calculator/widgets/compare_by_dropdown_button.dart
+++ b/lib/calculator/widgets/compare_by_dropdown_button.dart
@@ -6,8 +6,8 @@ import '../models/models.dart';
class CompareByDropdownButton extends StatelessWidget {
const CompareByDropdownButton({
- Key? key,
- }) : super(key: key);
+ super.key,
+ });
@override
Widget build(BuildContext context) {
diff --git a/lib/calculator/widgets/item_card.dart b/lib/calculator/widgets/item_card.dart
index 858f897..2dae91d 100644
--- a/lib/calculator/widgets/item_card.dart
+++ b/lib/calculator/widgets/item_card.dart
@@ -18,9 +18,9 @@ class ItemCard extends StatelessWidget {
final Item item;
const ItemCard({
- Key? key,
+ super.key,
required this.item,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
@@ -68,7 +68,7 @@ class ItemCard extends StatelessWidget {
}
class _ItemContents extends StatelessWidget {
- const _ItemContents({Key? key}) : super(key: key);
+ const _ItemContents();
@override
Widget build(BuildContext context) {
@@ -125,9 +125,7 @@ class _ItemContents extends StatelessWidget {
/// Only shown when there are more than 2 item cards.
class _CloseButton extends ConsumerWidget {
- const _CloseButton({
- Key? key,
- }) : super(key: key);
+ const _CloseButton();
@override
Widget build(BuildContext context, WidgetRef ref) {
@@ -163,9 +161,7 @@ class _CloseButton extends ConsumerWidget {
///
/// Lists the item's cost per gram, millilitre, etc.
class _UnitCalculations extends StatelessWidget {
- const _UnitCalculations({
- Key? key,
- }) : super(key: key);
+ const _UnitCalculations();
@override
Widget build(BuildContext context) {
@@ -203,7 +199,7 @@ class _UnitCalculations extends StatelessWidget {
padding: const EdgeInsets.symmetric(vertical: 2),
child: Text('\$$valueString/${cost.unit}'),
);
- }).toList(),
+ }),
],
);
},
diff --git a/lib/calculator/widgets/sheet_settings.dart b/lib/calculator/widgets/sheet_settings.dart
index cceddff..5284773 100644
--- a/lib/calculator/widgets/sheet_settings.dart
+++ b/lib/calculator/widgets/sheet_settings.dart
@@ -92,7 +92,7 @@ class _SheetSettingsViewState extends State {
style: TextButton.styleFrom(
padding: const EdgeInsets.all(30),
),
- onPressed: () => _showConfirmRemovalDialog(context, sheet),
+ onPressed: () => showConfirmRemovalDialog(context, sheet),
child: const Text(
'Delete List',
style: TextStyle(color: Colors.red),
@@ -104,39 +104,38 @@ class _SheetSettingsViewState extends State {
},
);
}
+}
- /// Confirm the user really wants to remove the sheet.
- void _showConfirmRemovalDialog(BuildContext context, Sheet sheet) {
- Future.delayed(
- const Duration(seconds: 0),
- () => showDialog(
- context: context,
- builder: (context) {
- return AlertDialog(
- content: Text('Remove sheet "${sheet.name}?"'),
- actions: [
- TextButton(
- onPressed: () {
- calcCubit.removeSheet(sheet);
- Navigator.pushNamedAndRemoveUntil(
- context,
- CalculatorPage.id,
- (route) => false,
- );
- },
- child: const Text(
- 'REMOVE',
- style: TextStyle(color: Colors.red),
- ),
- ),
- TextButton(
- onPressed: () => Navigator.pop(context),
- child: const Text('CLOSE'),
- ),
- ],
- );
- },
- ),
- );
- }
+/// Confirm the user really wants to remove the sheet.
+void showConfirmRemovalDialog(BuildContext context, Sheet sheet) {
+ final calcCubit = context.read();
+
+ showDialog(
+ context: context,
+ builder: (context) {
+ return AlertDialog(
+ content: Text('Remove sheet "${sheet.name}?"'),
+ actions: [
+ TextButton(
+ onPressed: () {
+ calcCubit.removeSheet(sheet);
+ Navigator.pushNamedAndRemoveUntil(
+ context,
+ CalculatorPage.id,
+ (route) => false,
+ );
+ },
+ child: const Text(
+ 'REMOVE',
+ style: TextStyle(color: Colors.red),
+ ),
+ ),
+ TextButton(
+ onPressed: () => Navigator.pop(context),
+ child: const Text('CLOSE'),
+ ),
+ ],
+ );
+ },
+ );
}
diff --git a/lib/calculator/widgets/side_panel/sheet_tile.dart b/lib/calculator/widgets/side_panel/sheet_tile.dart
index 055027a..48ccb3e 100644
--- a/lib/calculator/widgets/side_panel/sheet_tile.dart
+++ b/lib/calculator/widgets/side_panel/sheet_tile.dart
@@ -1,7 +1,9 @@
+import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:helpers/helpers.dart';
+import 'package:super_context_menu/super_context_menu.dart';
import '../../../purchases/cubit/purchases_cubit.dart';
import '../../../purchases/pages/purchases_page.dart';
@@ -18,8 +20,8 @@ class SheetTile extends StatefulWidget {
const SheetTile(
this.sheet, {
- Key? key,
- }) : super(key: key);
+ super.key,
+ });
@override
State createState() => _SheetTileState();
@@ -56,32 +58,27 @@ class _SheetTileState extends State {
.proPurchased;
final bool proFeaturesDisabled = !proPurchased && (index > 4);
- // List buildListContextMenuItems(Sheet sheet) {
- // return [
- // PopupMenuItem(
- // child: const Text(
- // 'Remove',
- // style: TextStyle(color: Colors.red),
- // ),
- // onTap: () => _showConfirmRemovalDialog(context, sheet),
- // ),
- // ];
- // }
-
final Widget? subtitle = (sheet.subtitle != null) //
? Text(sheet.subtitle!)
: null;
- return Opacity(
- opacity: (proFeaturesDisabled) ? 0.4 : 1.0,
- child: GestureDetector(
- // onSecondaryTapUp: (TapUpDetails details) {
- // showContextMenu(
- // context: context,
- // offset: details.globalPosition,
- // items: buildListContextMenuItems(sheet),
- // );
- // },
+ return ContextMenuWidget(
+ // Context menu is disabled on mobile, as it conflicts with the long
+ // press to reorder sheets.
+ // Instead, users can access such settings via the app bar.
+ contextMenuIsAllowed: (_) => !defaultTargetPlatform.isMobile,
+ menuProvider: (_) {
+ return Menu(
+ children: [
+ MenuAction(
+ title: 'Remove',
+ callback: () => _showConfirmRemovalDialog(context, sheet),
+ ),
+ ],
+ );
+ },
+ child: Opacity(
+ opacity: (proFeaturesDisabled) ? 0.4 : 1.0,
child: MouseRegion(
onEnter: (_) => setState(() => isHovered = true),
onExit: (_) => setState(() => isHovered = false),
@@ -127,4 +124,35 @@ class _SheetTileState extends State {
),
);
}
+
+ /// Shows a dialog to confirm the removal of a [Sheet].
+ Future _showConfirmRemovalDialog(
+ BuildContext context,
+ Sheet sheet,
+ ) async {
+ final bool? result = await showDialog(
+ context: context,
+ builder: (context) {
+ return AlertDialog(
+ title: const Text('Remove sheet?'),
+ content: Text(
+ 'Are you sure you want to remove the sheet "${sheet.name}"?'),
+ actions: [
+ TextButton(
+ onPressed: () => Navigator.pop(context, false),
+ child: const Text('Cancel'),
+ ),
+ TextButton(
+ onPressed: () => Navigator.pop(context, true),
+ child: const Text('Remove'),
+ ),
+ ],
+ );
+ },
+ );
+
+ if (result == true) {
+ calcCubit.removeSheet(sheet);
+ }
+ }
}
diff --git a/lib/calculator/widgets/side_panel/sheet_tile_list.dart b/lib/calculator/widgets/side_panel/sheet_tile_list.dart
index c44d898..6183380 100644
--- a/lib/calculator/widgets/side_panel/sheet_tile_list.dart
+++ b/lib/calculator/widgets/side_panel/sheet_tile_list.dart
@@ -7,7 +7,7 @@ import 'sheet_tile.dart';
/// The scrolling list of tiles in the drawer for each calculator sheet.
class SheetTileList extends StatefulWidget {
- const SheetTileList({Key? key}) : super(key: key);
+ const SheetTileList({super.key});
@override
State createState() => _SheetTileListState();
diff --git a/lib/calculator/widgets/side_panel/side_panel_view.dart b/lib/calculator/widgets/side_panel/side_panel_view.dart
index 98642bf..3b46c67 100644
--- a/lib/calculator/widgets/side_panel/side_panel_view.dart
+++ b/lib/calculator/widgets/side_panel/side_panel_view.dart
@@ -1,7 +1,6 @@
import 'package:badges/badges.dart' as badges;
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:helpers/helpers.dart';
import '../../../app/app_widget.dart';
import '../../../app/widgets/widgets.dart';
@@ -14,7 +13,7 @@ import 'sheet_tile_list.dart';
/// Holds the contents of the drawer for large displays, in the form of a
/// navigation bar.
class SidePanel extends StatefulWidget {
- const SidePanel({Key? key}) : super(key: key);
+ const SidePanel({super.key});
@override
State createState() => _SidePanelState();
@@ -24,7 +23,6 @@ class _SidePanelState extends State {
@override
Widget build(BuildContext context) {
final calcCubit = context.read();
- final mediaQuery = MediaQuery.of(context);
final addSheetButton = Opacity(
opacity: 0.8,
@@ -80,13 +78,7 @@ class _SidePanelState extends State {
],
);
- if (mediaQuery.isHandset) return panelBody;
-
- return Container(
- color: Theme.of(context).cardColor,
- width: 180,
- child: panelBody,
- );
+ return panelBody;
}
}
diff --git a/lib/purchases/pages/purchase_successful_page.dart b/lib/purchases/pages/purchase_successful_page.dart
index d960fae..d13c22c 100644
--- a/lib/purchases/pages/purchase_successful_page.dart
+++ b/lib/purchases/pages/purchase_successful_page.dart
@@ -5,7 +5,7 @@ import '../../calculator/calculator_page.dart';
class PurchaseSuccessfulPage extends StatelessWidget {
static const id = 'purchase_successful_page';
- const PurchaseSuccessfulPage({Key? key}) : super(key: key);
+ const PurchaseSuccessfulPage({super.key});
@override
Widget build(BuildContext context) {
diff --git a/lib/purchases/pages/purchases_page.dart b/lib/purchases/pages/purchases_page.dart
index d48eec6..bb664ce 100644
--- a/lib/purchases/pages/purchases_page.dart
+++ b/lib/purchases/pages/purchases_page.dart
@@ -8,7 +8,7 @@ import 'purchase_successful_page.dart';
class PurchasesPage extends StatelessWidget {
static const id = 'purchases_page';
- const PurchasesPage({Key? key}) : super(key: key);
+ const PurchasesPage({super.key});
@override
Widget build(BuildContext context) {
diff --git a/lib/settings/widgets/settings_page.dart b/lib/settings/widgets/settings_page.dart
index 2334a6d..11447f0 100644
--- a/lib/settings/widgets/settings_page.dart
+++ b/lib/settings/widgets/settings_page.dart
@@ -18,7 +18,7 @@ import '../settings.dart';
class SettingsPage extends StatelessWidget {
static const String id = '/settings';
- const SettingsPage({Key? key}) : super(key: key);
+ const SettingsPage({super.key});
@override
Widget build(BuildContext context) {
@@ -34,7 +34,7 @@ class SettingsPage extends StatelessWidget {
}
class SettingsView extends StatelessWidget {
- const SettingsView({Key? key}) : super(key: key);
+ const SettingsView({super.key});
@override
Widget build(BuildContext context) {
@@ -109,10 +109,9 @@ class _SectionCard extends StatelessWidget {
final List children;
const _SectionCard({
- Key? key,
required this.title,
required this.children,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
@@ -258,7 +257,7 @@ class _UnitFilterSettingsState extends State<_UnitFilterSettings> {
},
);
},
- ).toList()
+ )
];
return SingleChildScrollView(
diff --git a/lib/shortcuts/app_shortcuts.dart b/lib/shortcuts/app_shortcuts.dart
index 40cc452..b77c1e9 100644
--- a/lib/shortcuts/app_shortcuts.dart
+++ b/lib/shortcuts/app_shortcuts.dart
@@ -10,14 +10,14 @@ class AppShortcuts extends StatelessWidget {
final Widget child;
AppShortcuts({
- Key? key,
+ super.key,
required this.child,
- }) : super(key: key);
+ });
- final _shortcuts = {
- LogicalKeySet(
- LogicalKeyboardKey.control,
+ final _shortcuts = {
+ const SingleActivator(
LogicalKeyboardKey.keyQ,
+ control: true,
): const QuitIntent(),
};
diff --git a/lib/shortcuts/shortcuts.dart b/lib/shortcuts/shortcuts.dart
index 57d1914..d011a4f 100644
--- a/lib/shortcuts/shortcuts.dart
+++ b/lib/shortcuts/shortcuts.dart
@@ -8,7 +8,7 @@ class LoggingShortcutManager extends ShortcutManager {
LoggingShortcutManager({required super.shortcuts});
@override
- KeyEventResult handleKeypress(BuildContext context, RawKeyEvent event) {
+ KeyEventResult handleKeypress(BuildContext context, KeyEvent event) {
final KeyEventResult result = super.handleKeypress(context, event);
if (result == KeyEventResult.handled) {
log('''Handled shortcut
diff --git a/pubspec.lock b/pubspec.lock
index 0513016..da508b0 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -5,42 +5,47 @@ packages:
dependency: transitive
description:
name: _discoveryapis_commons
- sha256: f8bb1fdbd77f3d5c1d62b5b0eca75fbf1e41bf4f6c62628f880582e2182ae45d
+ sha256: "113c4100b90a5b70a983541782431b82168b3cae166ab130649c36eb3559d498"
url: "https://pub.dev"
source: hosted
- version: "1.0.6"
+ version: "1.0.7"
_fe_analyzer_shared:
dependency: transitive
description:
name: _fe_analyzer_shared
- sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051
+ sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834
url: "https://pub.dev"
source: hosted
- version: "64.0.0"
+ version: "72.0.0"
+ _macros:
+ dependency: transitive
+ description: dart
+ source: sdk
+ version: "0.3.2"
analyzer:
dependency: transitive
description:
name: analyzer
- sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893"
+ sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139
url: "https://pub.dev"
source: hosted
- version: "6.2.0"
+ version: "6.7.0"
archive:
dependency: transitive
description:
name: archive
- sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d"
+ sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
url: "https://pub.dev"
source: hosted
- version: "3.4.10"
+ version: "3.6.1"
args:
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:
@@ -61,18 +66,18 @@ packages:
dependency: "direct main"
description:
name: bloc
- sha256: "3820f15f502372d979121de1f6b97bfcf1630ebff8fe1d52fb2b0bfa49be5b49"
+ sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e"
url: "https://pub.dev"
source: hosted
- version: "8.1.2"
+ version: "8.1.4"
bloc_test:
dependency: "direct dev"
description:
name: bloc_test
- sha256: "02f04270be5abae8df171143e61a0058a7acbce5dcac887612e89bb40cca4c33"
+ sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2"
url: "https://pub.dev"
source: hosted
- version: "9.1.5"
+ version: "9.1.7"
boolean_selector:
dependency: transitive
description:
@@ -101,10 +106,10 @@ packages:
dependency: transitive
description:
name: build_daemon
- sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1"
+ sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9"
url: "https://pub.dev"
source: hosted
- version: "4.0.1"
+ version: "4.0.2"
build_resolvers:
dependency: transitive
description:
@@ -117,18 +122,18 @@ packages:
dependency: "direct dev"
description:
name: build_runner
- sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21"
+ sha256: dd09dd4e2b078992f42aac7f1a622f01882a8492fef08486b27ddde929c19f04
url: "https://pub.dev"
source: hosted
- version: "2.4.8"
+ version: "2.4.12"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
- sha256: c9e32d21dd6626b5c163d48b037ce906bbe428bc23ab77bcd77bb21e593b6185
+ sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0
url: "https://pub.dev"
source: hosted
- version: "7.2.11"
+ version: "7.3.2"
built_collection:
dependency: transitive
description:
@@ -141,10 +146,10 @@ packages:
dependency: transitive
description:
name: built_value
- sha256: c9aabae0718ec394e5bc3c7272e6bb0dc0b32201a08fe185ec1d8401d3e39309
+ sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb
url: "https://pub.dev"
source: hosted
- version: "8.8.1"
+ version: "8.9.2"
characters:
dependency: transitive
description:
@@ -213,10 +218,10 @@ packages:
dependency: transitive
description:
name: coverage
- sha256: "8acabb8306b57a409bf4c83522065672ee13179297a6bb0cb9ead73948df7c76"
+ sha256: "576aaab8b1abdd452e0f656c3e73da9ead9d7880e15bdc494189d9c1a1baf0db"
url: "https://pub.dev"
source: hosted
- version: "1.7.2"
+ version: "1.9.0"
crypto:
dependency: transitive
description:
@@ -229,10 +234,26 @@ 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"
+ device_info_plus:
+ dependency: transitive
+ description:
+ name: device_info_plus
+ sha256: "93429694c9253d2871b3af80cf11b3cbb5c65660d402ed7bf69854ce4a089f82"
+ url: "https://pub.dev"
+ source: hosted
+ version: "10.1.1"
+ device_info_plus_platform_interface:
+ dependency: transitive
+ description:
+ name: device_info_plus_platform_interface
+ sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.1"
diff_match_patch:
dependency: transitive
description:
@@ -269,10 +290,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:
@@ -307,10 +328,10 @@ packages:
dependency: "direct main"
description:
name: flutter_bloc
- sha256: e74efb89ee6945bcbce74a5b3a5a3376b088e5f21f55c263fc38cbdc6237faae
+ sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a
url: "https://pub.dev"
source: hosted
- version: "8.1.3"
+ version: "8.1.6"
flutter_launcher_icons:
dependency: "direct dev"
description:
@@ -323,10 +344,10 @@ packages:
dependency: "direct dev"
description:
name: flutter_lints
- sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
+ sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c"
url: "https://pub.dev"
source: hosted
- version: "2.0.3"
+ version: "4.0.0"
flutter_localizations:
dependency: "direct main"
description: flutter
@@ -336,18 +357,18 @@ packages:
dependency: "direct main"
description:
name: flutter_markdown
- sha256: "30088ce826b5b9cfbf9e8bece34c716c8a59fa54461dcae1e4ac01a94639e762"
+ sha256: "04c4722cc36ec5af38acc38ece70d22d3c2123c61305d555750a091517bbe504"
url: "https://pub.dev"
source: hosted
- version: "0.6.18+3"
+ version: "0.6.23"
flutter_riverpod:
dependency: "direct main"
description:
name: flutter_riverpod
- sha256: da9591d1f8d5881628ccd5c25c40e74fc3eef50ba45e40c3905a06e1712412d5
+ sha256: "0f1974eff5bbe774bf1d870e406fc6f29e3d6f1c46bd9c58e7172ff68a785d7d"
url: "https://pub.dev"
source: hosted
- version: "2.4.9"
+ version: "2.5.1"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -362,42 +383,42 @@ packages:
dependency: "direct main"
description:
name: font_awesome_flutter
- sha256: "1f93e5799f0e6c882819e8393a05c6ca5226010f289190f2242ec19f3f0fdba5"
+ sha256: "275ff26905134bcb59417cf60ad979136f1f8257f2f449914b2c3e05bbb4cd6f"
url: "https://pub.dev"
source: hosted
- version: "9.2.0"
+ version: "10.7.0"
freezed:
dependency: "direct dev"
description:
name: freezed
- sha256: "6c5031daae12c7072b3a87eff98983076434b4889ef2a44384d0cae3f82372ba"
+ sha256: "44c19278dd9d89292cf46e97dc0c1e52ce03275f40a97c5a348e802a924bf40e"
url: "https://pub.dev"
source: hosted
- version: "2.4.6"
+ version: "2.5.7"
freezed_annotation:
dependency: "direct main"
description:
name: freezed_annotation
- sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d
+ sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2
url: "https://pub.dev"
source: hosted
- version: "2.4.1"
+ version: "2.4.4"
frontend_server_client:
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"
get_it:
dependency: transitive
description:
name: get_it
- sha256: d0b88dc35a7f97fd91fec0cf8f165abd97a57977968d8fc02ba0bc92e14ba07e
+ sha256: d85128a5dae4ea777324730dc65edd9c9f43155c109d5cc0a69cab74139fbac1
url: "https://pub.dev"
source: hosted
- version: "7.6.6"
+ version: "7.7.0"
glob:
dependency: transitive
description:
@@ -410,34 +431,42 @@ packages:
dependency: "direct main"
description:
name: google_fonts
- sha256: e20ff62b158b96f392bfc8afe29dee1503c94fbea2cbe8186fd59b756b8ae982
+ sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82
url: "https://pub.dev"
source: hosted
- version: "5.1.0"
+ version: "6.2.1"
+ google_identity_services_web:
+ dependency: transitive
+ description:
+ name: google_identity_services_web
+ sha256: "5be191523702ba8d7a01ca97c17fca096822ccf246b0a9f11923a6ded06199b6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.1+4"
google_sign_in:
dependency: "direct main"
description:
name: google_sign_in
- sha256: "821f354c053d51a2d417b02d42532a19a6ea8057d2f9ebb8863c07d81c98aaf9"
+ sha256: "0b8787cb9c1a68ad398e8010e8c8766bfa33556d2ab97c439fb4137756d7308f"
url: "https://pub.dev"
source: hosted
- version: "5.4.4"
+ version: "6.2.1"
google_sign_in_android:
dependency: transitive
description:
name: google_sign_in_android
- sha256: bfd42c81c30c6faba16e0f62968d5505a87504aaa672b3155ee931461abb0a49
+ sha256: "5a47ebec9af97daf0822e800e4f101c3340b5ebc3f6898cf860c1a71b53cf077"
url: "https://pub.dev"
source: hosted
- version: "6.1.21"
+ version: "6.1.28"
google_sign_in_ios:
dependency: transitive
description:
name: google_sign_in_ios
- sha256: f3336d9e44d4d28063ac90271f6db5caf99f0480cb07281330e7a432edb95226
+ sha256: a058c9880be456f21e2e8571c1126eaacd570bdc5b6c6d9d15aea4bdf22ca9fe
url: "https://pub.dev"
source: hosted
- version: "5.7.3"
+ version: "5.7.6"
google_sign_in_platform_interface:
dependency: transitive
description:
@@ -450,34 +479,34 @@ packages:
dependency: transitive
description:
name: google_sign_in_web
- sha256: "75cc41ebc53b1756320ee14d9c3018ad3e6cea298147dbcd86e9d0c8d6720b40"
+ sha256: "042805a21127a85b0dc46bba98a37926f17d2439720e8a459d27045d8ef68055"
url: "https://pub.dev"
source: hosted
- version: "0.10.2+1"
+ version: "0.12.4+2"
googleapis:
dependency: "direct main"
description:
name: googleapis
- sha256: c2f311bcd1b3e4052234162edc6b626a9013a7e1385d6aad37e9e6a6c5f89908
+ sha256: "864f222aed3f2ff00b816c675edf00a39e2aaf373d728d8abec30b37bee1a81c"
url: "https://pub.dev"
source: hosted
- version: "11.4.0"
+ version: "13.2.0"
googleapis_auth:
dependency: "direct main"
description:
name: googleapis_auth
- sha256: af7c3a3edf9d0de2e1e0a77e994fae0a581c525fa7012af4fa0d4a52ed9484da
+ sha256: befd71383a955535060acde8792e7efc11d2fccd03dd1d3ec434e85b68775938
url: "https://pub.dev"
source: hosted
- version: "1.4.1"
+ version: "1.6.0"
graphs:
dependency: transitive
description:
name: graphs
- sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19
+ sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
url: "https://pub.dev"
source: hosted
- version: "2.3.1"
+ version: "2.3.2"
helpers:
dependency: "direct main"
description:
@@ -507,10 +536,10 @@ packages:
dependency: "direct main"
description:
name: http
- sha256: d4872660c46d929f6b8a9ef4e7a7eff7e49bbf0c4ec3f385ee32df5119175139
+ sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
url: "https://pub.dev"
source: hosted
- version: "1.1.2"
+ version: "1.2.2"
http_multi_server:
dependency: transitive
description:
@@ -531,50 +560,50 @@ packages:
dependency: transitive
description:
name: image
- sha256: "004a2e90ce080f8627b5a04aecb4cdfac87d2c3f3b520aa291260be5a32c033d"
+ sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8"
url: "https://pub.dev"
source: hosted
- version: "4.1.4"
+ version: "4.2.0"
in_app_purchase:
dependency: "direct main"
description:
name: in_app_purchase
- sha256: af00db44f0314eda24f5e7ff18a6b445ab95e11fcf49c53e4b7c6bef005eeecf
+ sha256: "960f26a08d9351fb8f89f08901f8a829d41b04d45a694b8f776121d9e41dcad6"
url: "https://pub.dev"
source: hosted
- version: "3.1.5"
+ version: "3.2.0"
in_app_purchase_android:
dependency: "direct main"
description:
name: in_app_purchase_android
- sha256: "8d24e7141d5da4e239045438cb990b98fe8fd3e8de6884fbc76ff4ecec30caf5"
+ sha256: "4c3f46f736a31902ec5392a75f41ea1ad292f27db00ed51153f3912d076d0efa"
url: "https://pub.dev"
source: hosted
- version: "0.2.5+4"
+ version: "0.3.6+5"
in_app_purchase_platform_interface:
dependency: transitive
description:
name: in_app_purchase_platform_interface
- sha256: "412efce2b9238c5ace4f057acad43f793ed06880e366d26ae322e796cadb051a"
+ sha256: "1d353d38251da5b9fea6635c0ebfc6bb17a2d28d0e86ea5e083bf64244f1fb4c"
url: "https://pub.dev"
source: hosted
- version: "1.3.7"
+ version: "1.4.0"
in_app_purchase_storekit:
dependency: transitive
description:
name: in_app_purchase_storekit
- sha256: c4b17a7f2ca8ddc7fd7996a8c32a3af6beddf91d651997c8675a5f23c103c9bc
+ sha256: "28a0577d9f4a5bdfb7aad96c347193e1225cc335c8003fbb98b875a67dab34cc"
url: "https://pub.dev"
source: hosted
- version: "0.3.8+1"
+ version: "0.3.17+3"
intl:
dependency: "direct main"
description:
name: intl
- sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
+ sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
url: "https://pub.dev"
source: hosted
- version: "0.18.1"
+ version: "0.19.0"
io:
dependency: transitive
description:
@@ -583,46 +612,86 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.4"
+ irondash_engine_context:
+ dependency: transitive
+ description:
+ name: irondash_engine_context
+ sha256: cd7b769db11a2b5243b037c8a9b1ecaef02e1ae27a2d909ffa78c1dad747bb10
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.5.4"
+ irondash_message_channel:
+ dependency: transitive
+ description:
+ name: irondash_message_channel
+ sha256: b4101669776509c76133b8917ab8cfc704d3ad92a8c450b92934dd8884a2f060
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.0"
js:
dependency: transitive
description:
name: js
- sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
+ sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
url: "https://pub.dev"
source: hosted
- version: "0.6.7"
+ version: "0.7.1"
json_annotation:
dependency: "direct main"
description:
name: json_annotation
- sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467
+ sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
url: "https://pub.dev"
source: hosted
- version: "4.8.1"
+ version: "4.9.0"
json_serializable:
dependency: "direct dev"
description:
name: json_serializable
- sha256: aa1f5a8912615733e0fdc7a02af03308933c93235bdc8d50d0b0c8a8ccb0b969
+ sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.8.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.dev"
source: hosted
- version: "6.7.1"
+ version: "10.0.5"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.5"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.1"
lints:
dependency: transitive
description:
name: lints
- sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
+ sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "4.0.0"
logger:
dependency: "direct main"
description:
name: logger
- sha256: "6bbb9d6f7056729537a4309bda2e74e18e5d9f14302489cc1e93f33b3fe32cac"
+ sha256: "697d067c60c20999686a0add96cf6aba723b3aa1f83ecf806a8097231529ec32"
url: "https://pub.dev"
source: hosted
- version: "2.0.2+1"
+ version: "2.4.0"
logging:
dependency: transitive
description:
@@ -631,46 +700,54 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.2.0"
+ macros:
+ dependency: transitive
+ description:
+ name: macros
+ sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.2-main.4"
markdown:
dependency: transitive
description:
name: markdown
- sha256: acf35edccc0463a9d7384e437c015a3535772e09714cf60e07eeef3a15870dcd
+ sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
url: "https://pub.dev"
source: hosted
- version: "7.1.1"
+ version: "7.2.2"
matcher:
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: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev"
source: hosted
- version: "0.5.0"
+ version: "0.11.1"
meta:
dependency: transitive
description:
name: meta
- sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
+ sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.15.0"
mime:
dependency: transitive
description:
name: mime
- sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
+ sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "1.0.5"
mockito:
dependency: "direct dev"
description:
@@ -683,10 +760,10 @@ packages:
dependency: "direct dev"
description:
name: mocktail
- sha256: "80a996cd9a69284b3dc521ce185ffe9150cde69767c2d3a0720147d93c0cef53"
+ sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8"
url: "https://pub.dev"
source: hosted
- version: "0.3.0"
+ version: "1.0.4"
msix:
dependency: "direct dev"
description:
@@ -731,50 +808,50 @@ packages:
dependency: "direct main"
description:
name: package_info_plus
- sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
+ sha256: "4de6c36df77ffbcef0a5aefe04669d33f2d18397fea228277b852a2d4e58e860"
url: "https://pub.dev"
source: hosted
- version: "4.2.0"
+ version: "8.0.1"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
- sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
+ sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66
url: "https://pub.dev"
source: hosted
- version: "2.0.1"
+ version: "3.0.1"
path:
dependency: transitive
description:
name: path
- sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
+ sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted
- version: "1.8.3"
+ version: "1.9.0"
path_provider:
dependency: "direct main"
description:
name: path_provider
- sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b
+ sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668"
+ sha256: "490539678396d4c3c0b06efdaab75ae60675c3e0c66f72bc04c2e2c1e0e2abeb"
url: "https://pub.dev"
source: hosted
- version: "2.2.2"
+ version: "2.2.9"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f"
+ sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.4.0"
path_provider_linux:
dependency: transitive
description:
@@ -795,10 +872,10 @@ packages:
dependency: transitive
description:
name: path_provider_windows
- sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
+ sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.3.0"
petitparser:
dependency: transitive
description:
@@ -807,14 +884,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.0.2"
+ pixel_snap:
+ dependency: transitive
+ description:
+ name: pixel_snap
+ sha256: "677410ea37b07cd37ecb6d5e6c0d8d7615a7cf3bd92ba406fd1ac57e937d1fb0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.5"
platform:
dependency: transitive
description:
name: platform
- sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
+ sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
url: "https://pub.dev"
source: hosted
- version: "3.1.4"
+ version: "3.1.5"
plugin_platform_interface:
dependency: transitive
description:
@@ -823,14 +908,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.8"
- pointycastle:
- dependency: transitive
- description:
- name: pointycastle
- sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c"
- url: "https://pub.dev"
- source: hosted
- version: "3.7.3"
pool:
dependency: transitive
description:
@@ -843,10 +920,10 @@ packages:
dependency: transitive
description:
name: provider
- sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096"
+ sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
url: "https://pub.dev"
source: hosted
- version: "6.1.1"
+ version: "6.1.2"
pub_semver:
dependency: "direct main"
description:
@@ -859,18 +936,18 @@ packages:
dependency: transitive
description:
name: pubspec_parse
- sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367
+ sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
url: "https://pub.dev"
source: hosted
- version: "1.2.3"
+ version: "1.3.0"
riverpod:
dependency: transitive
description:
name: riverpod
- sha256: "942999ee48b899f8a46a860f1e13cee36f2f77609eb54c5b7a669bb20d550b11"
+ sha256: f21b32ffd26a36555e501b04f4a5dca43ed59e16343f1a30c13632b2351dfa4d
url: "https://pub.dev"
source: hosted
- version: "2.4.9"
+ version: "2.5.1"
screen_retriever:
dependency: transitive
description:
@@ -907,10 +984,10 @@ packages:
dependency: transitive
description:
name: shelf_web_socket
- sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1"
+ sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611"
url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "2.0.0"
sky_engine:
dependency: transitive
description: flutter
@@ -956,6 +1033,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.10.0"
+ sprintf:
+ dependency: transitive
+ description:
+ name: sprintf
+ sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.0"
stack_trace:
dependency: transitive
description:
@@ -976,10 +1061,10 @@ packages:
dependency: "direct main"
description:
name: store_checker
- sha256: c9c1a93f11fa756fea23a2a08d7e54e84626a8d3c759cf49fc694a3a5afdc705
+ sha256: "9e5841e4f922cc7f0283323ff3c78fd31ace14c22e988525d33355c35d7c815a"
url: "https://pub.dev"
source: hosted
- version: "1.4.0"
+ version: "1.6.0"
stream_channel:
dependency: transitive
description:
@@ -1004,6 +1089,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.2.0"
+ super_context_menu:
+ dependency: "direct main"
+ description:
+ name: super_context_menu
+ sha256: c21e8a2d5a2f304c5acf56b78c8fd21a36f83ea9aded513529de022dc0a077f3
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.8.19"
+ super_native_extensions:
+ dependency: transitive
+ description:
+ name: super_native_extensions
+ sha256: c24676825c9f3ae844676a843d45ad186f2270539ffe72be4277753e46d14e29
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.8.19"
term_glyph:
dependency: transitive
description:
@@ -1016,26 +1117,26 @@ packages:
dependency: transitive
description:
name: test
- sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f
+ sha256: "7ee44229615f8f642b68120165ae4c2a75fe77ae2065b1e55ae4711f6cf0899e"
url: "https://pub.dev"
source: hosted
- version: "1.24.9"
+ version: "1.25.7"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
+ sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.dev"
source: hosted
- version: "0.6.1"
+ version: "0.7.2"
test_core:
dependency: transitive
description:
name: test_core
- sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a
+ sha256: "55ea5a652e38a1dfb32943a7973f3681a60f872f8c3a05a14664ad54ef9c6696"
url: "https://pub.dev"
source: hosted
- version: "0.5.9"
+ version: "0.6.4"
timing:
dependency: transitive
description:
@@ -1056,26 +1157,26 @@ packages:
dependency: "direct main"
description:
name: url_launcher
- sha256: d25bb0ca00432a5e1ee40e69c36c85863addf7cc45e433769d61bed3fe81fd96
+ sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3"
url: "https://pub.dev"
source: hosted
- version: "6.2.3"
+ version: "6.3.0"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
- sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f"
+ sha256: "94d8ad05f44c6d4e2ffe5567ab4d741b82d62e3c8e288cc1fcea45965edf47c9"
url: "https://pub.dev"
source: hosted
- version: "6.2.2"
+ version: "6.3.8"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
- sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03"
+ sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e
url: "https://pub.dev"
source: hosted
- version: "6.2.4"
+ version: "6.3.1"
url_launcher_linux:
dependency: transitive
description:
@@ -1088,42 +1189,42 @@ packages:
dependency: transitive
description:
name: url_launcher_macos
- sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234
+ sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
url: "https://pub.dev"
source: hosted
- version: "3.1.0"
+ version: "3.2.0"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
- sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f
+ sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
url: "https://pub.dev"
source: hosted
- version: "2.3.1"
+ version: "2.3.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
- sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b
+ sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
url: "https://pub.dev"
source: hosted
- version: "2.2.3"
+ version: "2.3.3"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
- sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7
+ sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185"
url: "https://pub.dev"
source: hosted
- version: "3.1.1"
+ version: "3.1.2"
uuid:
dependency: "direct main"
description:
name: uuid
- sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313"
+ sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90"
url: "https://pub.dev"
source: hosted
- version: "3.0.7"
+ version: "4.4.2"
vector_math:
dependency: transitive
description:
@@ -1136,10 +1237,10 @@ packages:
dependency: transitive
description:
name: vm_service
- sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
+ sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
url: "https://pub.dev"
source: hosted
- version: "13.0.0"
+ version: "14.2.4"
watcher:
dependency: transitive
description:
@@ -1152,18 +1253,26 @@ packages:
dependency: transitive
description:
name: web
- sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
+ sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.5.1"
+ web_socket:
+ dependency: transitive
+ description:
+ name: web_socket
+ sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
url: "https://pub.dev"
source: hosted
- version: "0.3.0"
+ version: "0.1.6"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
- sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
+ sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
url: "https://pub.dev"
source: hosted
- version: "2.4.0"
+ version: "3.0.1"
webkit_inspection_protocol:
dependency: transitive
description:
@@ -1176,18 +1285,26 @@ packages:
dependency: transitive
description:
name: win32
- sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
+ sha256: "015002c060f1ae9f41a818f2d5640389cc05283e368be19dc8d77cecb43c40c9"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.5.3"
+ win32_registry:
+ dependency: transitive
+ description:
+ name: win32_registry
+ sha256: "723b7f851e5724c55409bb3d5a32b203b3afe8587eaf5dafb93a5fed8ecda0d6"
url: "https://pub.dev"
source: hosted
- version: "5.2.0"
+ version: "1.1.4"
window_manager:
dependency: "direct main"
description:
name: window_manager
- sha256: dcc865277f26a7dad263a47d0e405d77e21f12cb71f30333a52710a408690bd7
+ sha256: "8699323b30da4cdbe2aa2e7c9de567a6abd8a97d9a5c850a3c86dcd0b34bbfbf"
url: "https://pub.dev"
source: hosted
- version: "0.3.7"
+ version: "0.3.9"
window_size:
dependency: "direct main"
description:
@@ -1222,5 +1339,5 @@ packages:
source: hosted
version: "3.1.2"
sdks:
- dart: ">=3.2.0 <4.0.0"
- flutter: ">=3.16.0"
+ dart: ">=3.5.0-259.0.dev <4.0.0"
+ flutter: ">=3.22.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 8c11e40..85c5395 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -19,11 +19,11 @@ dependencies:
sdk: flutter
flutter_markdown: ^0.6.10
flutter_riverpod: ^2.0.0-dev.9
- font_awesome_flutter: ^9.1.0
+ font_awesome_flutter: ^10.7.0
freezed_annotation: ^2.2.0
- google_fonts: ^5.1.0
- google_sign_in: ^5.4.4
- googleapis: ^11.2.0
+ google_fonts: ^6.2.1
+ google_sign_in: ^6.2.1
+ googleapis: ^13.1.0
googleapis_auth: ^1.3.1
helpers:
git:
@@ -32,18 +32,19 @@ dependencies:
hive: ^2.1.0
hive_flutter: ^1.1.0
http: ^1.0.0
- in_app_purchase: ^3.0.7
- in_app_purchase_android: ^0.2.3+5
- intl: ^0.18.0
+ in_app_purchase: ^3.2.0
+ in_app_purchase_android: ^0.3.6+5
+ intl: ^0.19.0
json_annotation: ^4.8.0
logger: ^2.0.1
multi_split_view: ^2.1.0
- package_info_plus: ^4.0.2
+ package_info_plus: ^8.0.0
path_provider: ^2.0.10
pub_semver: ^2.0.0
store_checker: ^1.0.0
+ super_context_menu: ^0.8.17
url_launcher: ^6.0.20
- uuid: ^3.0.6
+ uuid: ^4.4.2
window_manager: ^0.3.0
window_size:
git:
@@ -60,13 +61,13 @@ dev_dependencies:
url: https://github.com/Merrit/flutter_app_builder.git
ref: abe7d671ff5e5fc692bec8908285282a88d928c0
flutter_launcher_icons: ^0.13.1
- flutter_lints: ^2.0.0
+ flutter_lints: ^4.0.0
flutter_test:
sdk: flutter
freezed: ^2.3.2
json_serializable: ^6.6.1
mockito: ^5.4.2
- mocktail: ^0.3.0
+ mocktail: ^1.0.4
msix: ^3.5.1
flutter: