diff --git a/android/app/build.gradle.dev b/android/app/build.gradle.dev
index 09bdac86256..6f8945c0387 100644
--- a/android/app/build.gradle.dev
+++ b/android/app/build.gradle.dev
@@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
- compileSdkVersion 33
+ compileSdkVersion 34
ndkVersion flutter.ndkVersion
compileOptions {
diff --git a/android/app/build.gradle.prod b/android/app/build.gradle.prod
index bf0e56224c0..20fbe3b008d 100644
--- a/android/app/build.gradle.prod
+++ b/android/app/build.gradle.prod
@@ -31,7 +31,7 @@ def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
- compileSdkVersion 33
+ compileSdkVersion 34
ndkVersion flutter.ndkVersion
compileOptions {
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
index 9625e105df3..7c569640062 100644
--- a/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 11.0
+ 12.0
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 322e3e9d27e..cc2b95851b8 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1,43 +1,43 @@
PODS:
- - AppAuth (1.6.2):
- - AppAuth/Core (= 1.6.2)
- - AppAuth/ExternalUserAgent (= 1.6.2)
- - AppAuth/Core (1.6.2)
- - AppAuth/ExternalUserAgent (1.6.2):
+ - AppAuth (1.7.5):
+ - AppAuth/Core (= 1.7.5)
+ - AppAuth/ExternalUserAgent (= 1.7.5)
+ - AppAuth/Core (1.7.5)
+ - AppAuth/ExternalUserAgent (1.7.5):
- AppAuth/Core
- contacts_service (0.2.2):
- Flutter
- device_info_plus (0.0.1):
- Flutter
- - DKImagePickerController/Core (4.3.4):
+ - DKImagePickerController/Core (4.3.9):
- DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource
- - DKImagePickerController/ImageDataManager (4.3.4)
- - DKImagePickerController/PhotoGallery (4.3.4):
+ - DKImagePickerController/ImageDataManager (4.3.9)
+ - DKImagePickerController/PhotoGallery (4.3.9):
- DKImagePickerController/Core
- DKPhotoGallery
- - DKImagePickerController/Resource (4.3.4)
- - DKPhotoGallery (0.0.17):
- - DKPhotoGallery/Core (= 0.0.17)
- - DKPhotoGallery/Model (= 0.0.17)
- - DKPhotoGallery/Preview (= 0.0.17)
- - DKPhotoGallery/Resource (= 0.0.17)
+ - DKImagePickerController/Resource (4.3.9)
+ - DKPhotoGallery (0.0.19):
+ - DKPhotoGallery/Core (= 0.0.19)
+ - DKPhotoGallery/Model (= 0.0.19)
+ - DKPhotoGallery/Preview (= 0.0.19)
+ - DKPhotoGallery/Resource (= 0.0.19)
- SDWebImage
- SwiftyGif
- - DKPhotoGallery/Core (0.0.17):
+ - DKPhotoGallery/Core (0.0.19):
- DKPhotoGallery/Model
- DKPhotoGallery/Preview
- SDWebImage
- SwiftyGif
- - DKPhotoGallery/Model (0.0.17):
+ - DKPhotoGallery/Model (0.0.19):
- SDWebImage
- SwiftyGif
- - DKPhotoGallery/Preview (0.0.17):
+ - DKPhotoGallery/Preview (0.0.19):
- DKPhotoGallery/Model
- DKPhotoGallery/Resource
- SDWebImage
- SwiftyGif
- - DKPhotoGallery/Resource (0.0.17):
+ - DKPhotoGallery/Resource (0.0.19):
- SDWebImage
- SwiftyGif
- file_picker (0.0.1):
@@ -45,16 +45,23 @@ PODS:
- Flutter
- Flutter (1.0.0)
- google_sign_in_ios (0.0.1):
+ - AppAuth (>= 1.7.4)
- Flutter
- - GoogleSignIn (~> 7.0)
- - GoogleSignIn (7.0.0):
- - AppAuth (~> 1.5)
- - GTMAppAuth (< 3.0, >= 1.3)
- - GTMSessionFetcher/Core (< 4.0, >= 1.1)
- - GTMAppAuth (2.0.0):
- - AppAuth/Core (~> 1.6)
- - GTMSessionFetcher/Core (< 4.0, >= 1.5)
- - GTMSessionFetcher/Core (3.3.1)
+ - FlutterMacOS
+ - GoogleSignIn (~> 7.1)
+ - GTMSessionFetcher (>= 3.4.0)
+ - GoogleSignIn (7.1.0):
+ - AppAuth (< 2.0, >= 1.7.3)
+ - GTMAppAuth (< 5.0, >= 4.1.1)
+ - GTMSessionFetcher/Core (~> 3.3)
+ - GTMAppAuth (4.1.1):
+ - AppAuth/Core (~> 1.7)
+ - GTMSessionFetcher/Core (< 4.0, >= 3.3)
+ - GTMSessionFetcher (3.4.1):
+ - GTMSessionFetcher/Full (= 3.4.1)
+ - GTMSessionFetcher/Core (3.4.1)
+ - GTMSessionFetcher/Full (3.4.1):
+ - GTMSessionFetcher/Core
- image_cropper (0.0.4):
- Flutter
- TOCropViewController (~> 2.6.1)
@@ -65,7 +72,9 @@ PODS:
- FlutterMacOS
- in_app_review (0.2.0):
- Flutter
- - local_auth_ios (0.0.1):
+ - ios_open_subscriptions_settings (0.0.2):
+ - Flutter
+ - local_auth_darwin (0.0.1):
- Flutter
- package_info (0.0.1):
- Flutter
@@ -74,20 +83,20 @@ PODS:
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - permission_handler_apple (9.1.1):
+ - permission_handler_apple (9.3.0):
- Flutter
- printing (1.0.0):
- Flutter
- - SDWebImage (5.18.10):
- - SDWebImage/Core (= 5.18.10)
- - SDWebImage/Core (5.18.10)
- - Sentry/HybridSDK (8.18.0):
- - SentryPrivate (= 8.18.0)
- - sentry_flutter (0.0.1):
+ - SDWebImage (5.19.2):
+ - SDWebImage/Core (= 5.19.2)
+ - SDWebImage/Core (5.19.2)
+ - Sentry/HybridSDK (8.21.0):
+ - SentryPrivate (= 8.21.0)
+ - sentry_flutter (7.20.0):
- Flutter
- FlutterMacOS
- - Sentry/HybridSDK (= 8.18.0)
- - SentryPrivate (8.18.0)
+ - Sentry/HybridSDK (= 8.21.0)
+ - SentryPrivate (8.21.0)
- share_plus (0.0.1):
- Flutter
- shared_preferences_foundation (0.0.1):
@@ -97,7 +106,7 @@ PODS:
- Flutter
- smart_auth (0.0.1):
- Flutter
- - SwiftyGif (5.4.4)
+ - SwiftyGif (5.4.5)
- TOCropViewController (2.6.1)
- url_launcher_ios (0.0.1):
- Flutter
@@ -111,12 +120,13 @@ DEPENDENCIES:
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- Flutter (from `Flutter`)
- - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`)
+ - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`)
- image_cropper (from `.symlinks/plugins/image_cropper/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`)
- in_app_review (from `.symlinks/plugins/in_app_review/ios`)
- - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`)
+ - ios_open_subscriptions_settings (from `.symlinks/plugins/ios_open_subscriptions_settings/ios`)
+ - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`)
- package_info (from `.symlinks/plugins/package_info/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
@@ -155,7 +165,7 @@ EXTERNAL SOURCES:
Flutter:
:path: Flutter
google_sign_in_ios:
- :path: ".symlinks/plugins/google_sign_in_ios/ios"
+ :path: ".symlinks/plugins/google_sign_in_ios/darwin"
image_cropper:
:path: ".symlinks/plugins/image_cropper/ios"
image_picker_ios:
@@ -164,8 +174,10 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/in_app_purchase_storekit/darwin"
in_app_review:
:path: ".symlinks/plugins/in_app_review/ios"
- local_auth_ios:
- :path: ".symlinks/plugins/local_auth_ios/ios"
+ ios_open_subscriptions_settings:
+ :path: ".symlinks/plugins/ios_open_subscriptions_settings/ios"
+ local_auth_darwin:
+ :path: ".symlinks/plugins/local_auth_darwin/darwin"
package_info:
:path: ".symlinks/plugins/package_info/ios"
package_info_plus:
@@ -194,39 +206,40 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/widget_kit_plugin/ios"
SPEC CHECKSUMS:
- AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570
+ AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa
contacts_service: 849e1f84281804c8bfbec1b4c3eedcb23c5d3eca
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
- DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
- DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
+ DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
+ DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
- Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
- google_sign_in_ios: 8115e3fbe097e6509beb819ed602d47369d9011f
- GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842
- GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae
- GTMSessionFetcher: 8a1b34ad97ebe6f909fb8b9b77fba99943007556
+ Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
+ google_sign_in_ios: 07375bfbf2620bc93a602c0e27160d6afc6ead38
+ GoogleSignIn: d4281ab6cf21542b1cfaff85c191f230b399d2db
+ GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de
+ GTMSessionFetcher: 8000756fc1c19d2e5697b90311f7832d2e33f6cd
image_cropper: a3291c624a953049bc6a02e1f8c8ceb162a24b25
- image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
- in_app_purchase_storekit: 4fb7ee9e824b1f09107fbfbbce8c4b276366dc43
+ image_picker_ios: b545a5f16c0fa88e3ecbbce3ed4de45567a8ec18
+ in_app_purchase_storekit: 0e4b3c2e43ba1e1281f4f46dd71b0593ce529892
in_app_review: 318597b3a06c22bb46dc454d56828c85f444f99d
- local_auth_ios: c6cf091ded637a88f24f86a8875d8b0f526e2605
+ ios_open_subscriptions_settings: 77d0506aefda2042facefdd3dadc04417e7857cc
+ local_auth_darwin: c7e464000a6a89e952235699e32b329457608d98
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
- package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
- path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
- permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
+ package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
+ path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
+ permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
printing: 233e1b73bd1f4a05615548e9b5a324c98588640b
- SDWebImage: fc8f2d48bbfd72ef39d70e981bd24a3f3be53fec
- Sentry: 8984a4ffb2b9bd2894d74fb36e6f5833865bc18e
- sentry_flutter: c87a0556eeb6cbf7f9f924d30e878bdedf22d364
- SentryPrivate: 2f0c9ba4c3fc993f70eab6ca95673509561e0085
+ SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a
+ Sentry: ebc12276bd17613a114ab359074096b6b3725203
+ sentry_flutter: df6e28477322fc5202bbe20aafdd7404b6e97729
+ SentryPrivate: d651efb234cf385ec9a1cdd3eff94b5e78a0e0fe
share_plus: c3fef564749587fc939ef86ffb283ceac0baf9f5
- shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
+ shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440
smart_auth: 4bedbc118723912d0e45a07e8ab34039c19e04f2
- SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
+ SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
- url_launcher_ios: bf5ce03e0e2088bad9cc378ea97fa0ed5b49673b
- webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a
+ url_launcher_ios: 6116280ddcfe98ab8820085d8d76ae7449447586
+ webview_flutter_wkwebview: be0f0d33777f1bfd0c9fdcb594786704dbf65f36
widget_kit_plugin: a245a5248f0cd2bde580285ebe6bee5c6f1f6ce1
PODFILE CHECKSUM: 3005ff604479ae2d844823dff36ae514d2c44ab9
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index a40620ba19c..71a696120c6 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -144,6 +144,7 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
BF7C1F8639D4505C503E67EF /* [CP] Embed Pods Frameworks */,
+ 3E0BA3A20B86A31EC1FC163D /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -160,7 +161,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1430;
+ LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -219,6 +220,23 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
+ 3E0BA3A20B86A31EC1FC163D /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@@ -348,7 +366,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -430,7 +448,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -479,7 +497,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index a6b826db27d..5e31d3d342f 100644
--- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
[
+ clients,
+ credits,
+ expenses,
+ invoices,
+ invoice_items,
+ purchase_orders,
+ purchase_order_items,
+ quotes,
+ quote_items,
+ payments,
+ products,
+ tasks,
+ vendors,
+ ].contains(this);
+
static BuiltSet get values => _$exportValues;
static ExportType valueOf(String name) => _$exportValueOf(name);
diff --git a/lib/data/models/import_model.g.dart b/lib/data/models/import_model.g.dart
index 2752d47843b..11b3ae9cb5e 100644
--- a/lib/data/models/import_model.g.dart
+++ b/lib/data/models/import_model.g.dart
@@ -62,10 +62,10 @@ const ExportType _$payments = const ExportType._('payments');
const ExportType _$products = const ExportType._('products');
const ExportType _$tasks = const ExportType._('tasks');
const ExportType _$profitloss = const ExportType._('profitloss');
-const ExportType _$vendor = const ExportType._('vendor');
-const ExportType _$purchase_order = const ExportType._('purchase_order');
-const ExportType _$purchase_order_item =
- const ExportType._('purchase_order_item');
+const ExportType _$vendors = const ExportType._('vendors');
+const ExportType _$purchase_orders = const ExportType._('purchase_orders');
+const ExportType _$purchase_order_items =
+ const ExportType._('purchase_order_items');
const ExportType _$ar_detailed = const ExportType._('ar_detailed');
const ExportType _$ar_summary = const ExportType._('ar_summary');
const ExportType _$client_balance = const ExportType._('client_balance');
@@ -105,12 +105,12 @@ ExportType _$exportValueOf(String name) {
return _$tasks;
case 'profitloss':
return _$profitloss;
- case 'vendor':
- return _$vendor;
- case 'purchase_order':
- return _$purchase_order;
- case 'purchase_order_item':
- return _$purchase_order_item;
+ case 'vendors':
+ return _$vendors;
+ case 'purchase_orders':
+ return _$purchase_orders;
+ case 'purchase_order_items':
+ return _$purchase_order_items;
case 'ar_detailed':
return _$ar_detailed;
case 'ar_summary':
@@ -145,9 +145,9 @@ final BuiltSet _$exportValues =
_$products,
_$tasks,
_$profitloss,
- _$vendor,
- _$purchase_order,
- _$purchase_order_item,
+ _$vendors,
+ _$purchase_orders,
+ _$purchase_order_items,
_$ar_detailed,
_$ar_summary,
_$client_balance,
diff --git a/lib/data/models/invoice_model.dart b/lib/data/models/invoice_model.dart
index ffda4efda0a..c2668f5cf79 100644
--- a/lib/data/models/invoice_model.dart
+++ b/lib/data/models/invoice_model.dart
@@ -1611,14 +1611,18 @@ class TaskItemFields {
abstract class InvoiceItemEntity
implements Built {
- factory InvoiceItemEntity(
- {String? productKey, double? quantity, String? typeId}) {
+ factory InvoiceItemEntity({String? productKey, String? typeId}) {
+ final store = StoreProvider.of(navigatorKey.currentContext!);
+ final state = store.state;
+ final company = state.company;
+
return _$InvoiceItemEntity._(
productKey: productKey ?? '',
notes: '',
cost: 0,
productCost: 0,
- quantity: quantity ?? 1,
+ quantity:
+ (company.defaultQuantity || !company.enableProductQuantity) ? 1 : 0,
taxName1: '',
taxRate1: 0,
taxName2: '',
@@ -1730,6 +1734,10 @@ abstract class InvoiceItemEntity
calculateTaxAmount(invoice.taxRate3);
}
+ InvoiceItemEntity get clone => rebuild((b) => b
+ ..expenseId = ''
+ ..taskId = '');
+
double netTotal(InvoiceEntity invoice, int precision) =>
total(invoice, precision) - taxAmount(invoice, precision);
diff --git a/lib/redux/credit/credit_actions.dart b/lib/redux/credit/credit_actions.dart
index 6c6daf5622f..0f33815d18f 100644
--- a/lib/redux/credit/credit_actions.dart
+++ b/lib/redux/credit/credit_actions.dart
@@ -168,8 +168,12 @@ class RemoveCreditContact implements PersistUI {
}
class AddCreditItem implements PersistUI {
- AddCreditItem({this.creditItem});
+ AddCreditItem({
+ this.creditItem,
+ this.index,
+ });
+ final int? index;
final InvoiceItemEntity? creditItem;
}
diff --git a/lib/redux/credit/credit_reducer.dart b/lib/redux/credit/credit_reducer.dart
index 9195a0b0be2..9b5cd195f99 100644
--- a/lib/redux/credit/credit_reducer.dart
+++ b/lib/redux/credit/credit_reducer.dart
@@ -160,8 +160,12 @@ InvoiceEntity? _updateEditing(InvoiceEntity? credit, dynamic action) {
}
InvoiceEntity _addCreditItem(InvoiceEntity? credit, AddCreditItem action) {
- return credit!.rebuild(
- (b) => b..lineItems.add(action.creditItem ?? InvoiceItemEntity()));
+ final item = action.creditItem ?? InvoiceItemEntity();
+ if (action.index == null) {
+ return credit!.rebuild((b) => b..lineItems.add(item));
+ } else {
+ return credit!.rebuild((b) => b..lineItems.insert(action.index!, item));
+ }
}
InvoiceEntity _addCreditItems(InvoiceEntity? credit, AddCreditItems action) {
diff --git a/lib/redux/purchase_order/purchase_order_actions.dart b/lib/redux/purchase_order/purchase_order_actions.dart
index 5d499e44561..87a0b5807b8 100644
--- a/lib/redux/purchase_order/purchase_order_actions.dart
+++ b/lib/redux/purchase_order/purchase_order_actions.dart
@@ -468,8 +468,9 @@ class RemovePurchaseOrderContact implements PersistUI {
}
class AddPurchaseOrderItem implements PersistUI {
- AddPurchaseOrderItem({this.purchaseOrderItem});
+ AddPurchaseOrderItem({this.purchaseOrderItem, this.index,});
+ final int? index;
final InvoiceItemEntity? purchaseOrderItem;
}
diff --git a/lib/redux/purchase_order/purchase_order_reducer.dart b/lib/redux/purchase_order/purchase_order_reducer.dart
index 74f45dfe205..f9ba58fae9b 100644
--- a/lib/redux/purchase_order/purchase_order_reducer.dart
+++ b/lib/redux/purchase_order/purchase_order_reducer.dart
@@ -187,8 +187,13 @@ InvoiceEntity? _updateEditing(InvoiceEntity? purchaseOrder, dynamic action) {
InvoiceEntity _addPurchaseOrderItem(
InvoiceEntity? purchaseOrder, AddPurchaseOrderItem action) {
- return purchaseOrder!.rebuild(
- (b) => b..lineItems.add(action.purchaseOrderItem ?? InvoiceItemEntity()));
+ final item = action.purchaseOrderItem ?? InvoiceItemEntity();
+ if (action.index == null) {
+ return purchaseOrder!.rebuild((b) => b..lineItems.add(item));
+ } else {
+ return purchaseOrder!
+ .rebuild((b) => b..lineItems.insert(action.index!, item));
+ }
}
InvoiceEntity _addPurchaseOrderItems(
diff --git a/lib/redux/quote/quote_actions.dart b/lib/redux/quote/quote_actions.dart
index 0bcf2021b04..74c8203dc01 100644
--- a/lib/redux/quote/quote_actions.dart
+++ b/lib/redux/quote/quote_actions.dart
@@ -169,8 +169,12 @@ class RemoveQuoteContact implements PersistUI {
}
class AddQuoteItem implements PersistUI {
- AddQuoteItem({this.quoteItem});
+ AddQuoteItem({
+ this.quoteItem,
+ this.index,
+ });
+ final int? index;
final InvoiceItemEntity? quoteItem;
}
diff --git a/lib/redux/quote/quote_reducer.dart b/lib/redux/quote/quote_reducer.dart
index bcbee7a02c4..10fe72f2860 100644
--- a/lib/redux/quote/quote_reducer.dart
+++ b/lib/redux/quote/quote_reducer.dart
@@ -161,8 +161,12 @@ InvoiceEntity? _updateEditing(InvoiceEntity? quote, dynamic action) {
}
InvoiceEntity _addQuoteItem(InvoiceEntity? quote, AddQuoteItem action) {
- return quote!.rebuild(
- (b) => b..lineItems.add(action.quoteItem ?? InvoiceItemEntity()));
+ final item = action.quoteItem ?? InvoiceItemEntity();
+ if (action.index == null) {
+ return quote!.rebuild((b) => b..lineItems.add(item));
+ } else {
+ return quote!.rebuild((b) => b..lineItems.insert(action.index!, item));
+ }
}
InvoiceEntity _addQuoteItems(InvoiceEntity? quote, AddQuoteItems action) {
diff --git a/lib/redux/recurring_invoice/recurring_invoice_actions.dart b/lib/redux/recurring_invoice/recurring_invoice_actions.dart
index 969b7852567..ff4179c11cf 100644
--- a/lib/redux/recurring_invoice/recurring_invoice_actions.dart
+++ b/lib/redux/recurring_invoice/recurring_invoice_actions.dart
@@ -200,8 +200,9 @@ class AddRecurringInvoiceSuccess implements StopSaving, PersistData, PersistUI {
}
class AddRecurringInvoiceItem implements PersistUI {
- AddRecurringInvoiceItem({this.invoiceItem});
+ AddRecurringInvoiceItem({this.invoiceItem, this.index,});
+ final int? index;
final InvoiceItemEntity? invoiceItem;
}
diff --git a/lib/redux/recurring_invoice/recurring_invoice_reducer.dart b/lib/redux/recurring_invoice/recurring_invoice_reducer.dart
index 4ff6948e627..5b7d52f3d44 100644
--- a/lib/redux/recurring_invoice/recurring_invoice_reducer.dart
+++ b/lib/redux/recurring_invoice/recurring_invoice_reducer.dart
@@ -199,7 +199,12 @@ InvoiceEntity? _updateEditing(InvoiceEntity? recurringInvoice, dynamic action) {
InvoiceEntity _addRecurringInvoiceItem(
InvoiceEntity? recurringInvoice, AddRecurringInvoiceItem action) {
final item = action.invoiceItem ?? InvoiceItemEntity();
- return recurringInvoice!.rebuild((b) => b..lineItems.add(item));
+ if (action.index == null) {
+ return recurringInvoice!.rebuild((b) => b..lineItems.add(item));
+ } else {
+ return recurringInvoice!
+ .rebuild((b) => b..lineItems.insert(action.index!, item));
+ }
}
InvoiceEntity _addRecurringInvoiceItems(
diff --git a/lib/ui/credit/edit/credit_edit_items_vm.dart b/lib/ui/credit/edit/credit_edit_items_vm.dart
index e92bf45d72e..61197284352 100644
--- a/lib/ui/credit/edit/credit_edit_items_vm.dart
+++ b/lib/ui/credit/edit/credit_edit_items_vm.dart
@@ -55,6 +55,7 @@ class CreditEditItemsVM extends EntityEditItemsVM {
InvoiceEntity? invoice,
int? invoiceItemIndex,
Function? addLineItem,
+ Function? cloneLineItem,
Function? deleteLineItem,
Function(int)? onRemoveInvoiceItemPressed,
Function? onDoneInvoiceItemPressed,
@@ -65,6 +66,7 @@ class CreditEditItemsVM extends EntityEditItemsVM {
company: company,
invoice: invoice,
addLineItem: addLineItem,
+ cloneLineItem: cloneLineItem,
deleteLineItem: deleteLineItem,
invoiceItemIndex: invoiceItemIndex,
onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed,
@@ -74,10 +76,14 @@ class CreditEditItemsVM extends EntityEditItemsVM {
);
factory CreditEditItemsVM.fromStore(Store store, bool isTasks) {
+ final state = store.state;
+ final company = state.company;
+ final credit = store.state.creditUIState.editing;
+
return CreditEditItemsVM(
- state: store.state,
- company: store.state.company,
- invoice: store.state.creditUIState.editing,
+ state: state,
+ company: company,
+ invoice: credit,
invoiceItemIndex: store.state.creditUIState.editingItemIndex,
onRemoveInvoiceItemPressed: (index) {
store.dispatch(DeleteCreditItem(index));
@@ -103,6 +109,22 @@ class CreditEditItemsVM extends EntityEditItemsVM {
MoveCreditItem(oldIndex: oldIndex, newIndex: newIndex),
);
},
+ addLineItem: ([int? index]) {
+ store.dispatch(
+ AddCreditItem(
+ index: index,
+ creditItem: InvoiceItemEntity(),
+ ),
+ );
+ },
+ cloneLineItem: (int? index) {
+ store.dispatch(
+ AddCreditItem(
+ index: index,
+ creditItem: credit!.lineItems[index!].clone,
+ ),
+ );
+ },
);
}
}
diff --git a/lib/ui/invoice/edit/invoice_edit_items_desktop.dart b/lib/ui/invoice/edit/invoice_edit_items_desktop.dart
index 3f63871f57d..71254cdd8e4 100644
--- a/lib/ui/invoice/edit/invoice_edit_items_desktop.dart
+++ b/lib/ui/invoice/edit/invoice_edit_items_desktop.dart
@@ -575,12 +575,7 @@ class _InvoiceEditItemsDesktopState extends State {
);
}
- if (lineItems.where((item) => item.isEmpty).isEmpty) {
- lineItems.add(InvoiceItemEntity(
- quantity: company.defaultQuantity || !company.enableProductQuantity
- ? 1
- : 0));
- }
+ lineItems.add(InvoiceItemEntity());
tableHeaderColumns.addAll([
TableHeader(
@@ -1194,12 +1189,16 @@ class _InvoiceEditItemsDesktopState extends State {
),
PopupMenuButton(
icon: Icon(Icons.more_vert),
- enabled: !lineItems[index].isEmpty,
+ enabled: !lineItems[index].isEmpty ||
+ index < includedLineItems.length,
itemBuilder: (BuildContext context) {
final sectionIndex =
includedLineItems.indexOf(lineItems[index]);
final options = {
- localization.insertBelow: MdiIcons.plus,
+ if (!lineItems[index].isEmpty)
+ localization.clone: Icons.control_point_duplicate,
+ if (includedLineItems.length > 1)
+ localization.insertBelow: MdiIcons.plus,
if (widget.isTasks &&
(lineItems[index].taskId ?? '').isNotEmpty)
localization.viewTask: MdiIcons.chevronDoubleRight,
@@ -1242,6 +1241,8 @@ class _InvoiceEditItemsDesktopState extends State {
viewModel.onRemoveInvoiceItemPressed!(index);
} else if (action == localization.insertBelow) {
viewModel.addLineItem!(index + 1);
+ } else if (action == localization.clone) {
+ viewModel.cloneLineItem!(index);
}
_updateTable();
},
diff --git a/lib/ui/invoice/edit/invoice_edit_items_vm.dart b/lib/ui/invoice/edit/invoice_edit_items_vm.dart
index 02ea68d048e..70106c7934e 100644
--- a/lib/ui/invoice/edit/invoice_edit_items_vm.dart
+++ b/lib/ui/invoice/edit/invoice_edit_items_vm.dart
@@ -53,6 +53,7 @@ class EntityEditItemsVM {
required this.company,
required this.invoice,
required this.addLineItem,
+ required this.cloneLineItem,
required this.deleteLineItem,
required this.invoiceItemIndex,
required this.onRemoveInvoiceItemPressed,
@@ -66,6 +67,7 @@ class EntityEditItemsVM {
final InvoiceEntity? invoice;
final int? invoiceItemIndex;
final Function? addLineItem;
+ final Function? cloneLineItem;
final Function? deleteLineItem;
final Function(int)? onRemoveInvoiceItemPressed;
final Function? clearSelectedInvoiceItem;
@@ -80,6 +82,7 @@ class InvoiceEditItemsVM extends EntityEditItemsVM {
InvoiceEntity? invoice,
int? invoiceItemIndex,
Function([int])? addLineItem,
+ Function(int)? cloneLineItem,
Function(int)? deleteLineItem,
Function(int)? onRemoveInvoiceItemPressed,
Function? clearSelectedInvoiceItem,
@@ -90,6 +93,7 @@ class InvoiceEditItemsVM extends EntityEditItemsVM {
company: company,
invoice: invoice,
addLineItem: addLineItem,
+ cloneLineItem: cloneLineItem,
deleteLineItem: deleteLineItem,
invoiceItemIndex: invoiceItemIndex,
onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed,
@@ -102,11 +106,15 @@ class InvoiceEditItemsVM extends EntityEditItemsVM {
Store store,
bool isTasks,
) {
+ final state = store.state;
+ final company = state.company;
+ final invoice = state.invoiceUIState.editing;
+
return InvoiceEditItemsVM(
- state: store.state,
- company: store.state.company,
- invoice: store.state.invoiceUIState.editing,
- invoiceItemIndex: store.state.invoiceUIState.editingItemIndex,
+ state: state,
+ company: company,
+ invoice: invoice,
+ invoiceItemIndex: state.invoiceUIState.editingItemIndex,
addLineItem: ([int? index]) {
store.dispatch(AddInvoiceItem(
index: index,
@@ -115,6 +123,14 @@ class InvoiceEditItemsVM extends EntityEditItemsVM {
? InvoiceItemEntity.TYPE_TASK
: InvoiceItemEntity.TYPE_STANDARD)));
},
+ cloneLineItem: (int? index) {
+ store.dispatch(
+ AddInvoiceItem(
+ index: index,
+ invoiceItem: invoice!.lineItems[index!].clone,
+ ),
+ );
+ },
deleteLineItem: null,
onRemoveInvoiceItemPressed: (index) {
store.dispatch(DeleteInvoiceItem(index));
diff --git a/lib/ui/invoice/edit/invoice_item_selector.dart b/lib/ui/invoice/edit/invoice_item_selector.dart
index 93f1d61834e..fa0d36ba305 100644
--- a/lib/ui/invoice/edit/invoice_item_selector.dart
+++ b/lib/ui/invoice/edit/invoice_item_selector.dart
@@ -64,8 +64,6 @@ class _InvoiceItemSelectorState extends State
void _addBlankItem(CompanyEntity company) {
widget.onItemsSelected!([
InvoiceItemEntity(
- quantity:
- company.defaultQuantity || !company.enableProductQuantity ? 1 : 0,
typeId: _tabController.index == 1 ? InvoiceItemEntity.TYPE_TASK : null,
)
]);
diff --git a/lib/ui/purchase_order/edit/purchase_order_edit_items_vm.dart b/lib/ui/purchase_order/edit/purchase_order_edit_items_vm.dart
index 9a0f2dc6455..0489ed97ba7 100644
--- a/lib/ui/purchase_order/edit/purchase_order_edit_items_vm.dart
+++ b/lib/ui/purchase_order/edit/purchase_order_edit_items_vm.dart
@@ -53,6 +53,7 @@ class PurchaseOrderEditItemsVM extends EntityEditItemsVM {
InvoiceEntity? invoice,
int? invoiceItemIndex,
Function? addLineItem,
+ Function? cloneLineItem,
Function? deleteLineItem,
Function(int)? onRemoveInvoiceItemPressed,
Function? onDoneInvoiceItemPressed,
@@ -63,6 +64,7 @@ class PurchaseOrderEditItemsVM extends EntityEditItemsVM {
company: company,
invoice: invoice,
addLineItem: addLineItem,
+ cloneLineItem: cloneLineItem,
deleteLineItem: deleteLineItem,
invoiceItemIndex: invoiceItemIndex,
onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed,
@@ -72,10 +74,14 @@ class PurchaseOrderEditItemsVM extends EntityEditItemsVM {
);
factory PurchaseOrderEditItemsVM.fromStore(Store store) {
+ final state = store.state;
+ final company = state.company;
+ final purchaseOrder = store.state.purchaseOrderUIState.editing;
+
return PurchaseOrderEditItemsVM(
- state: store.state,
- company: store.state.company,
- invoice: store.state.purchaseOrderUIState.editing,
+ state: state,
+ company: company,
+ invoice: purchaseOrder,
invoiceItemIndex: store.state.purchaseOrderUIState.editingItemIndex,
onRemoveInvoiceItemPressed: (index) {
store.dispatch(DeletePurchaseOrderItem(index));
@@ -98,6 +104,22 @@ class PurchaseOrderEditItemsVM extends EntityEditItemsVM {
MovePurchaseOrderItem(oldIndex: oldIndex, newIndex: newIndex),
);
},
+ addLineItem: ([int? index]) {
+ store.dispatch(
+ AddPurchaseOrderItem(
+ index: index,
+ purchaseOrderItem: InvoiceItemEntity(),
+ ),
+ );
+ },
+ cloneLineItem: (int? index) {
+ store.dispatch(
+ AddPurchaseOrderItem(
+ index: index,
+ purchaseOrderItem: purchaseOrder!.lineItems[index!].clone,
+ ),
+ );
+ },
);
}
}
diff --git a/lib/ui/quote/edit/quote_edit_items_vm.dart b/lib/ui/quote/edit/quote_edit_items_vm.dart
index a6200100548..894ed2164cc 100644
--- a/lib/ui/quote/edit/quote_edit_items_vm.dart
+++ b/lib/ui/quote/edit/quote_edit_items_vm.dart
@@ -55,6 +55,7 @@ class QuoteEditItemsVM extends EntityEditItemsVM {
InvoiceEntity? invoice,
int? invoiceItemIndex,
Function? addLineItem,
+ Function? cloneLineItem,
Function? deleteLineItem,
Function(int)? onRemoveInvoiceItemPressed,
Function? onDoneInvoiceItemPressed,
@@ -65,6 +66,7 @@ class QuoteEditItemsVM extends EntityEditItemsVM {
company: company,
invoice: invoice,
addLineItem: addLineItem,
+ cloneLineItem: cloneLineItem,
deleteLineItem: deleteLineItem,
invoiceItemIndex: invoiceItemIndex,
onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed,
@@ -77,11 +79,15 @@ class QuoteEditItemsVM extends EntityEditItemsVM {
Store store,
bool isTasks,
) {
+ final state = store.state;
+ final company = state.company;
+ final quote = store.state.quoteUIState.editing;
+
return QuoteEditItemsVM(
- state: store.state,
- company: store.state.company,
- invoice: store.state.quoteUIState.editing,
- invoiceItemIndex: store.state.quoteUIState.editingItemIndex,
+ state: state,
+ company: company,
+ invoice: quote,
+ invoiceItemIndex: state.quoteUIState.editingItemIndex,
onRemoveInvoiceItemPressed: (index) {
store.dispatch(DeleteQuoteItem(index));
},
@@ -105,6 +111,22 @@ class QuoteEditItemsVM extends EntityEditItemsVM {
MoveQuoteItem(oldIndex: oldIndex, newIndex: newIndex),
);
},
+ addLineItem: ([int? index]) {
+ store.dispatch(
+ AddQuoteItem(
+ index: index,
+ quoteItem: InvoiceItemEntity(),
+ ),
+ );
+ },
+ cloneLineItem: (int? index) {
+ store.dispatch(
+ AddQuoteItem(
+ index: index,
+ quoteItem: quote!.lineItems[index!].clone,
+ ),
+ );
+ },
);
}
}
diff --git a/lib/ui/recurring_invoice/edit/recurring_invoice_edit_items_vm.dart b/lib/ui/recurring_invoice/edit/recurring_invoice_edit_items_vm.dart
index 66c319ff5b1..94f06eb728e 100644
--- a/lib/ui/recurring_invoice/edit/recurring_invoice_edit_items_vm.dart
+++ b/lib/ui/recurring_invoice/edit/recurring_invoice_edit_items_vm.dart
@@ -55,6 +55,7 @@ class RecurringInvoiceEditItemsVM extends EntityEditItemsVM {
InvoiceEntity? invoice,
int? invoiceItemIndex,
Function? addLineItem,
+ Function? cloneLineItem,
Function? deleteLineItem,
Function(int)? onRemoveInvoiceItemPressed,
Function? onDoneInvoiceItemPressed,
@@ -65,6 +66,7 @@ class RecurringInvoiceEditItemsVM extends EntityEditItemsVM {
company: company,
invoice: invoice,
addLineItem: addLineItem,
+ cloneLineItem: cloneLineItem,
deleteLineItem: deleteLineItem,
invoiceItemIndex: invoiceItemIndex,
onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed,
@@ -75,10 +77,14 @@ class RecurringInvoiceEditItemsVM extends EntityEditItemsVM {
factory RecurringInvoiceEditItemsVM.fromStore(
Store store, bool isTasks) {
+ final state = store.state;
+ final company = state.company;
+ final invoice = store.state.recurringInvoiceUIState.editing;
+
return RecurringInvoiceEditItemsVM(
- state: store.state,
- company: store.state.company,
- invoice: store.state.recurringInvoiceUIState.editing,
+ state: state,
+ company: company,
+ invoice: invoice,
invoiceItemIndex: store.state.recurringInvoiceUIState.editingItemIndex,
onRemoveInvoiceItemPressed: (index) {
store.dispatch(DeleteRecurringInvoiceItem(index));
@@ -103,6 +109,22 @@ class RecurringInvoiceEditItemsVM extends EntityEditItemsVM {
MoveRecurringInvoiceItem(oldIndex: oldIndex, newIndex: newIndex),
);
},
+ addLineItem: ([int? index]) {
+ store.dispatch(
+ AddRecurringInvoiceItem(
+ index: index,
+ invoiceItem: InvoiceItemEntity(),
+ ),
+ );
+ },
+ cloneLineItem: (int? index) {
+ store.dispatch(
+ AddRecurringInvoiceItem(
+ index: index,
+ invoiceItem: invoice!.lineItems[index!].clone,
+ ),
+ );
+ },
);
}
}
diff --git a/lib/ui/settings/import_export.dart b/lib/ui/settings/import_export.dart
index 0f528ce1747..400bdb643fd 100644
--- a/lib/ui/settings/import_export.dart
+++ b/lib/ui/settings/import_export.dart
@@ -18,7 +18,9 @@ import 'package:invoiceninja_flutter/redux/bank_account/bank_account_actions.dar
import 'package:invoiceninja_flutter/redux/bank_account/bank_account_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
+import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart';
+import 'package:invoiceninja_flutter/utils/icons.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
// Project imports:
@@ -66,6 +68,7 @@ class _ImportExportState extends State {
var _exportDateRange = '';
var _exportStartDate = '';
var _exportEndDate = '';
+ bool _exportDocuments = false;
bool _isExporting = false;
@@ -306,6 +309,20 @@ class _ImportExportState extends State {
]
],
],
+ if (_exportFormat == ImportType.csv &&
+ _exportType.hasDocuments)
+ Padding(
+ padding: const EdgeInsets.only(top: 16),
+ child: BoolDropdownButton(
+ iconData: getEntityIcon(EntityType.document),
+ label: localization.attachDocuments,
+ value: _exportDocuments,
+ onChanged: (value) {
+ setState(() {
+ _exportDocuments = value == true;
+ });
+ }),
+ ),
Row(
children: [
Expanded(
@@ -353,6 +370,9 @@ class _ImportExportState extends State {
'date_range': _exportDateRange,
'start_date': _exportStartDate,
'end_date': _exportEndDate,
+ 'document_email_attachment': _exportDocuments,
+ 'include_deleted':
+ state.company.reportIncludeDeleted,
};
if (_exportType == ExportType.profitloss) {
@@ -375,20 +395,23 @@ class _ImportExportState extends State {
},
),
),
- SizedBox(width: kGutterWidth),
- Expanded(
+ if (_exportFormat == ImportType.csv) ...[
+ SizedBox(width: kGutterWidth),
+ Expanded(
child: AppButton(
- label: localization.schedule,
- iconData: Icons.schedule,
- onPressed: () {
- createEntity(
- entity: ScheduleEntity(
- ScheduleEntity.TEMPLATE_EMAIL_REPORT)
- .rebuild((b) => b
- ..parameters.reportName =
- _exportType.name));
- },
- ))
+ label: localization.schedule,
+ iconData: Icons.schedule,
+ onPressed: () {
+ createEntity(
+ entity: ScheduleEntity(
+ ScheduleEntity.TEMPLATE_EMAIL_REPORT)
+ .rebuild((b) => b
+ ..parameters.reportName =
+ _exportType.name));
+ },
+ ),
+ ),
+ ],
],
)
],
diff --git a/macos/Podfile.lock b/macos/Podfile.lock
index 96fd011302d..17f149499e7 100644
--- a/macos/Podfile.lock
+++ b/macos/Podfile.lock
@@ -1,4 +1,10 @@
PODS:
+ - AppAuth (1.7.5):
+ - AppAuth/Core (= 1.7.5)
+ - AppAuth/ExternalUserAgent (= 1.7.5)
+ - AppAuth/Core (1.7.5)
+ - AppAuth/ExternalUserAgent (1.7.5):
+ - AppAuth/Core
- desktop_drop (0.0.1):
- FlutterMacOS
- device_info_plus (0.0.1):
@@ -6,6 +12,24 @@ PODS:
- file_selector_macos (0.0.1):
- FlutterMacOS
- FlutterMacOS (1.0.0)
+ - google_sign_in_ios (0.0.1):
+ - AppAuth (>= 1.7.4)
+ - Flutter
+ - FlutterMacOS
+ - GoogleSignIn (~> 7.1)
+ - GTMSessionFetcher (>= 3.4.0)
+ - GoogleSignIn (7.1.0):
+ - AppAuth (< 2.0, >= 1.7.3)
+ - GTMAppAuth (< 5.0, >= 4.1.1)
+ - GTMSessionFetcher/Core (~> 3.3)
+ - GTMAppAuth (4.1.1):
+ - AppAuth/Core (~> 1.7)
+ - GTMSessionFetcher/Core (< 4.0, >= 3.3)
+ - GTMSessionFetcher (3.4.1):
+ - GTMSessionFetcher/Full (= 3.4.1)
+ - GTMSessionFetcher/Core (3.4.1)
+ - GTMSessionFetcher/Full (3.4.1):
+ - GTMSessionFetcher/Core
- in_app_purchase_storekit (0.0.1):
- Flutter
- FlutterMacOS
@@ -22,13 +46,13 @@ PODS:
- FlutterMacOS
- screen_retriever (0.0.1):
- FlutterMacOS
- - Sentry/HybridSDK (8.18.0):
- - SentryPrivate (= 8.18.0)
- - sentry_flutter (0.0.1):
+ - Sentry/HybridSDK (8.21.0):
+ - SentryPrivate (= 8.21.0)
+ - sentry_flutter (7.20.0):
- Flutter
- FlutterMacOS
- - Sentry/HybridSDK (= 8.18.0)
- - SentryPrivate (8.18.0)
+ - Sentry/HybridSDK (= 8.21.0)
+ - SentryPrivate (8.21.0)
- share_plus (0.0.1):
- FlutterMacOS
- shared_preferences_foundation (0.0.1):
@@ -50,6 +74,7 @@ DEPENDENCIES:
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
- file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
+ - google_sign_in_ios (from `Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin`)
- in_app_purchase_storekit (from `Flutter/ephemeral/.symlinks/plugins/in_app_purchase_storekit/darwin`)
- in_app_review (from `Flutter/ephemeral/.symlinks/plugins/in_app_review/macos`)
- package_info (from `Flutter/ephemeral/.symlinks/plugins/package_info/macos`)
@@ -68,6 +93,10 @@ DEPENDENCIES:
SPEC REPOS:
trunk:
+ - AppAuth
+ - GoogleSignIn
+ - GTMAppAuth
+ - GTMSessionFetcher
- Sentry
- SentryPrivate
@@ -80,6 +109,8 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos
FlutterMacOS:
:path: Flutter/ephemeral
+ google_sign_in_ios:
+ :path: Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin
in_app_purchase_storekit:
:path: Flutter/ephemeral/.symlinks/plugins/in_app_purchase_storekit/darwin
in_app_review:
@@ -112,22 +143,27 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
SPEC CHECKSUMS:
+ AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa
desktop_drop: 69eeff437544aa619c8db7f4481b3a65f7696898
device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f
file_selector_macos: 468fb6b81fac7c0e88d71317f3eec34c3b008ff9
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
- in_app_purchase_storekit: 4fb7ee9e824b1f09107fbfbbce8c4b276366dc43
+ google_sign_in_ios: 07375bfbf2620bc93a602c0e27160d6afc6ead38
+ GoogleSignIn: d4281ab6cf21542b1cfaff85c191f230b399d2db
+ GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de
+ GTMSessionFetcher: 8000756fc1c19d2e5697b90311f7832d2e33f6cd
+ in_app_purchase_storekit: 0e4b3c2e43ba1e1281f4f46dd71b0593ce529892
in_app_review: a850789fad746e89bce03d4aeee8078b45a53fd0
package_info: 6eba2fd8d3371dda2d85c8db6fe97488f24b74b2
- package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce
- path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
+ package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
+ path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
printing: 1dd6a1fce2209ec240698e2439a4adbb9b427637
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
- Sentry: 8984a4ffb2b9bd2894d74fb36e6f5833865bc18e
- sentry_flutter: c87a0556eeb6cbf7f9f924d30e878bdedf22d364
- SentryPrivate: 2f0c9ba4c3fc993f70eab6ca95673509561e0085
+ Sentry: ebc12276bd17613a114ab359074096b6b3725203
+ sentry_flutter: df6e28477322fc5202bbe20aafdd7404b6e97729
+ SentryPrivate: d651efb234cf385ec9a1cdd3eff94b5e78a0e0fe
share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7
- shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
+ shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
sign_in_with_apple: a9e97e744e8edc36aefc2723111f652102a7a727
smart_auth: b38e3ab4bfe089eacb1e233aca1a2340f96c28e9
url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj
index 9715076a496..4afe32f32e1 100644
--- a/macos/Runner.xcodeproj/project.pbxproj
+++ b/macos/Runner.xcodeproj/project.pbxproj
@@ -282,6 +282,7 @@
3399D490228B24CF009A79C7 /* ShellScript */,
4A8F10BFEE9B664055EA40D7 /* [CP] Embed Pods Frameworks */,
F9395FAC2A3A30DF0066F1E7 /* Embed Foundation Extensions */,
+ 3A7FF4E2915137CEBBD1632D /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -336,7 +337,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1420;
- LastUpgradeCheck = 1430;
+ LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
33CC10EC2044A3C60003C045 = {
@@ -448,6 +449,23 @@
shellPath = /bin/sh;
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
};
+ 3A7FF4E2915137CEBBD1632D /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
4A8F10BFEE9B664055EA40D7 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 4a0fcf5869f..553df6b23be 100644
--- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@