aggiunta scelta business o privato

This commit is contained in:
2026-05-19 11:54:59 +02:00
parent 2bdba523ad
commit 4e03d52a5d
11 changed files with 173 additions and 38 deletions

View File

@@ -64,11 +64,17 @@ class SharedCustomerSection extends StatelessWidget {
if (hasCustomer) ...[ if (hasCustomer) ...[
const SizedBox(width: 12), const SizedBox(width: 12),
IconButton( IconButton(
onPressed: () => context.pushNamed( onPressed: () async {
Routes.customerForm, final updatedCustomer = await context.pushNamed(
pathParameters: {'id': customer!.id!}, Routes.customerForm,
extra: customer, pathParameters: {'id': customer!.id!},
), extra: customer,
);
if (updatedCustomer != null &&
updatedCustomer is CustomerModel) {
onCustomerSelected(updatedCustomer);
}
},
icon: const Icon(Icons.edit), icon: const Icon(Icons.edit),
), ),
], ],

View File

@@ -68,6 +68,7 @@ class CustomerFormCubit extends Cubit<CustomerFormState> {
String? email, String? email,
String? note, String? note,
bool? doNotDisturb, bool? doNotDisturb,
bool? isBusiness,
}) { }) {
emit( emit(
state.copyWith( state.copyWith(
@@ -77,6 +78,7 @@ class CustomerFormCubit extends Cubit<CustomerFormState> {
email: email ?? state.customer.email, email: email ?? state.customer.email,
note: note ?? state.customer.note, note: note ?? state.customer.note,
doNotDisturb: doNotDisturb ?? state.customer.doNotDisturb, doNotDisturb: doNotDisturb ?? state.customer.doNotDisturb,
isBusiness: isBusiness ?? state.customer.isBusiness,
), ),
), ),
); );
@@ -108,6 +110,7 @@ class CustomerFormCubit extends Cubit<CustomerFormState> {
required String name, required String name,
String? phone, String? phone,
String? email, String? email,
required bool isBusiness,
}) async { }) async {
final newCustomer = CustomerModel( final newCustomer = CustomerModel(
name: name, name: name,
@@ -115,6 +118,7 @@ class CustomerFormCubit extends Cubit<CustomerFormState> {
email: email ?? '', email: email ?? '',
companyId: _sessionCubit.state.company!.id!, companyId: _sessionCubit.state.company!.id!,
note: '', note: '',
isBusiness: isBusiness,
); );
try { try {

View File

@@ -14,6 +14,7 @@ class CustomerModel extends Equatable {
final String companyId; // UUID final String companyId; // UUID
final bool isActive; final bool isActive;
final List<AttachmentModel> attachments; final List<AttachmentModel> attachments;
final bool isBusiness;
const CustomerModel({ const CustomerModel({
this.id, this.id,
@@ -27,6 +28,7 @@ class CustomerModel extends Equatable {
required this.companyId, required this.companyId,
this.isActive = true, this.isActive = true,
this.attachments = const [], this.attachments = const [],
this.isBusiness = false,
}); });
@override @override
@@ -42,6 +44,7 @@ class CustomerModel extends Equatable {
companyId, companyId,
isActive, isActive,
attachments, attachments,
isBusiness,
]; ];
factory CustomerModel.empty() => CustomerModel( factory CustomerModel.empty() => CustomerModel(
@@ -65,6 +68,7 @@ class CustomerModel extends Equatable {
String? companyId, String? companyId,
bool? isActive, bool? isActive,
List<AttachmentModel>? attachments, List<AttachmentModel>? attachments,
bool? isBusiness,
}) { }) {
return CustomerModel( return CustomerModel(
id: id ?? this.id, id: id ?? this.id,
@@ -78,6 +82,7 @@ class CustomerModel extends Equatable {
companyId: companyId ?? this.companyId, companyId: companyId ?? this.companyId,
isActive: isActive ?? this.isActive, isActive: isActive ?? this.isActive,
attachments: attachments ?? this.attachments, attachments: attachments ?? this.attachments,
isBusiness: isBusiness ?? this.isBusiness,
); );
} }
@@ -102,6 +107,7 @@ class CustomerModel extends Equatable {
?.map((x) => AttachmentModel.fromMap(x)) ?.map((x) => AttachmentModel.fromMap(x))
.toList() ?? .toList() ??
const [], const [],
isBusiness: map['is_business'] as bool? ?? false,
); );
} }
@@ -117,6 +123,7 @@ class CustomerModel extends Equatable {
'do_not_disturb': doNotDisturb, 'do_not_disturb': doNotDisturb,
'company_id': companyId, 'company_id': companyId,
'is_active': isActive, 'is_active': isActive,
'is_business': isBusiness,
}; };
} }
} }

View File

@@ -118,6 +118,38 @@ class _CustomerFormScreenState extends State<CustomerFormScreen> {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Row(
children: [
ChoiceChip(
label: const Text('Privato (Domestico)'),
selected: !state.customer.isBusiness,
selectedColor: Colors.blue.withValues(alpha: 0.2),
checkmarkColor: Colors.blue.shade700,
onSelected: (selected) {
if (selected) {
context.read<CustomerFormCubit>().updateFields(
isBusiness: false,
);
}
},
),
const SizedBox(width: 12),
ChoiceChip(
label: const Text('Business (P.IVA)'),
selected: state.customer.isBusiness,
selectedColor: Colors.orange.withValues(alpha: 0.2),
checkmarkColor: Colors.orange.shade700,
onSelected: (selected) {
if (selected) {
context.read<CustomerFormCubit>().updateFields(
isBusiness: true,
);
}
},
),
],
),
const Divider(height: 32),
FluxTextField( FluxTextField(
label: 'Nome Completo', label: 'Nome Completo',
autoFocus: true, autoFocus: true,

View File

@@ -16,6 +16,7 @@ class _QuickCustomerDialogState extends State<QuickCustomerDialog> {
final _phoneCtrl = TextEditingController(); final _phoneCtrl = TextEditingController();
final _emailCtrl = TextEditingController(); final _emailCtrl = TextEditingController();
final _noteCtrl = TextEditingController(); final _noteCtrl = TextEditingController();
bool _isBusiness = false; // Aggiungiamo un campo per il tipo di cliente
bool _isLoading = false; bool _isLoading = false;
@@ -45,6 +46,7 @@ class _QuickCustomerDialogState extends State<QuickCustomerDialog> {
final newCustomer = await context final newCustomer = await context
.read<CustomerFormCubit>() .read<CustomerFormCubit>()
.quickCreateCustomer( .quickCreateCustomer(
isBusiness: _isBusiness,
name: _nameCtrl.text.trim(), name: _nameCtrl.text.trim(),
phone: _phoneCtrl.text.trim(), phone: _phoneCtrl.text.trim(),
email: _emailCtrl.text.trim(), email: _emailCtrl.text.trim(),
@@ -65,6 +67,38 @@ class _QuickCustomerDialogState extends State<QuickCustomerDialog> {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Row(
children: [
ChoiceChip(
label: const Text('Privato (Domestico)'),
selected: _isBusiness == false,
selectedColor: Colors.blue.withValues(alpha: 0.2),
checkmarkColor: Colors.blue.shade700,
onSelected: (selected) {
if (selected) {
setState(() {
_isBusiness = false;
});
}
},
),
const SizedBox(width: 12),
ChoiceChip(
label: const Text('Business (P.IVA)'),
selected: _isBusiness == true,
selectedColor: Colors.orange.withValues(alpha: 0.2),
checkmarkColor: Colors.orange.shade700,
onSelected: (selected) {
if (selected) {
setState(() {
_isBusiness = true;
});
}
},
),
],
),
const Divider(height: 32),
TextField( TextField(
controller: _nameCtrl, controller: _nameCtrl,
autofocus: true, // Focus immediato! autofocus: true, // Focus immediato!

View File

@@ -206,6 +206,7 @@ class OperationFormCubit extends Cubit<OperationFormState> {
String? staffId, String? staffId,
String? staffDisplayName, String? staffDisplayName,
OperationStatus? status, OperationStatus? status,
bool? isBusiness,
bool clearProvider = false, bool clearProvider = false,
bool clearType = false, bool clearType = false,
@@ -247,6 +248,7 @@ class OperationFormCubit extends Cubit<OperationFormState> {
staffId: staffId ?? current.staffId, staffId: staffId ?? current.staffId,
staffDisplayName: staffDisplayName ?? current.staffDisplayName, staffDisplayName: staffDisplayName ?? current.staffDisplayName,
status: status ?? current.status, status: status ?? current.status,
isBusiness: isBusiness ?? current.isBusiness,
); );
emit(state.copyWith(operation: updated)); emit(state.copyWith(operation: updated));

View File

@@ -48,6 +48,7 @@ class OperationModel extends Equatable {
final String? customerId; final String? customerId;
final CustomerModel? customer; final CustomerModel? customer;
final String reference; final String reference;
final bool isBusiness;
// ALLEGATI (Aggiunto) // ALLEGATI (Aggiunto)
final List<AttachmentModel> attachments; final List<AttachmentModel> attachments;
@@ -78,6 +79,7 @@ class OperationModel extends Equatable {
this.customer, this.customer,
this.reference = '', this.reference = '',
this.attachments = const [], this.attachments = const [],
this.isBusiness = false,
}); });
OperationModel copyWith({ OperationModel copyWith({
@@ -106,6 +108,7 @@ class OperationModel extends Equatable {
CustomerModel? customer, CustomerModel? customer,
String? reference, String? reference,
List<AttachmentModel>? attachments, List<AttachmentModel>? attachments,
bool? isBusiness,
}) => OperationModel( }) => OperationModel(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@@ -132,6 +135,7 @@ class OperationModel extends Equatable {
customer: customer ?? this.customer, customer: customer ?? this.customer,
reference: reference ?? this.reference, reference: reference ?? this.reference,
attachments: attachments ?? this.attachments, attachments: attachments ?? this.attachments,
isBusiness: isBusiness ?? this.isBusiness,
); );
@override @override
@@ -161,6 +165,7 @@ class OperationModel extends Equatable {
customer, customer,
reference, reference,
attachments, attachments,
isBusiness,
]; ];
factory OperationModel.empty() { factory OperationModel.empty() {
@@ -221,6 +226,7 @@ class OperationModel extends Equatable {
const [], const [],
reference: map['reference'] as String? ?? '', reference: map['reference'] as String? ?? '',
isBusiness: map['is_business'] as bool? ?? false,
); );
} }
@@ -245,6 +251,7 @@ class OperationModel extends Equatable {
'status': status.supabaseName, 'status': status.supabaseName,
if (customerId != null) 'customer_id': customerId, if (customerId != null) 'customer_id': customerId,
'reference': reference, 'reference': reference,
'is_business': isBusiness,
}; };
} }
} }

View File

@@ -457,10 +457,11 @@ class _OperationFormScreenState extends State<OperationFormScreen> {
); );
}).toList(), }).toList(),
onChanged: (newStatus) { onChanged: (newStatus) {
if (newStatus != null) if (newStatus != null) {
context.read<OperationFormCubit>().updateFields( context.read<OperationFormCubit>().updateFields(
status: newStatus, status: newStatus,
); );
}
}, },
), ),
), ),
@@ -482,6 +483,38 @@ class _OperationFormScreenState extends State<OperationFormScreen> {
icon: Icons.design_services, icon: Icons.design_services,
themeColor: Colors.deepOrange, themeColor: Colors.deepOrange,
children: [ children: [
Row(
children: [
ChoiceChip(
label: const Text('Privato (Domestico)'),
selected: !state.operation.isBusiness,
selectedColor: Colors.blue.withValues(alpha: 0.2),
checkmarkColor: Colors.blue.shade700,
onSelected: (selected) {
if (selected) {
context.read<OperationFormCubit>().updateFields(
isBusiness: false,
);
}
},
),
const SizedBox(width: 12),
ChoiceChip(
label: const Text('Business (P.IVA)'),
selected: state.operation.isBusiness,
selectedColor: Colors.orange.withValues(alpha: 0.2),
checkmarkColor: Colors.orange.shade700,
onSelected: (selected) {
if (selected) {
context.read<OperationFormCubit>().updateFields(
isBusiness: true,
);
}
},
),
],
),
const Divider(height: 32),
Wrap( Wrap(
spacing: 8.0, spacing: 8.0,
runSpacing: 8.0, runSpacing: 8.0,
@@ -490,10 +523,11 @@ class _OperationFormScreenState extends State<OperationFormScreen> {
label: Text(type), label: Text(type),
selected: state.operation.type == type, selected: state.operation.type == type,
onSelected: (selected) { onSelected: (selected) {
if (selected) if (selected) {
context.read<OperationFormCubit>().setTypeWithSmartDefault( context.read<OperationFormCubit>().setTypeWithSmartDefault(
type, type,
); );
}
}, },
); );
}).toList(), }).toList(),

View File

@@ -1,58 +1,27 @@
PODS: PODS:
- app_links (6.4.1):
- FlutterMacOS
- file_picker (0.0.1):
- FlutterMacOS
- file_selector_macos (0.0.1):
- FlutterMacOS
- FlutterMacOS (1.0.0) - FlutterMacOS (1.0.0)
- pdfx (1.0.0): - pdfx (1.0.0):
- FlutterMacOS - FlutterMacOS
- printing (1.0.0): - printing (1.0.0):
- FlutterMacOS - FlutterMacOS
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- url_launcher_macos (0.0.1):
- FlutterMacOS
DEPENDENCIES: DEPENDENCIES:
- app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
- file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`)
- file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`)
- FlutterMacOS (from `Flutter/ephemeral`) - FlutterMacOS (from `Flutter/ephemeral`)
- pdfx (from `Flutter/ephemeral/.symlinks/plugins/pdfx/macos`) - pdfx (from `Flutter/ephemeral/.symlinks/plugins/pdfx/macos`)
- printing (from `Flutter/ephemeral/.symlinks/plugins/printing/macos`) - printing (from `Flutter/ephemeral/.symlinks/plugins/printing/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
EXTERNAL SOURCES: EXTERNAL SOURCES:
app_links:
:path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
file_picker:
:path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos
file_selector_macos:
:path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos
FlutterMacOS: FlutterMacOS:
:path: Flutter/ephemeral :path: Flutter/ephemeral
pdfx: pdfx:
:path: Flutter/ephemeral/.symlinks/plugins/pdfx/macos :path: Flutter/ephemeral/.symlinks/plugins/pdfx/macos
printing: printing:
:path: Flutter/ephemeral/.symlinks/plugins/printing/macos :path: Flutter/ephemeral/.symlinks/plugins/printing/macos
shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
SPEC CHECKSUMS: SPEC CHECKSUMS:
app_links: 05a6ec2341985eb05e9f97dc63f5837c39895c3f
file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a
file_selector_macos: 9e9e068e90ebee155097d00e89ae91edb2374db7
FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
pdfx: 1e79f57f7a6ce2f4a4c30f21fa54d3dc82441b51 pdfx: 1e79f57f7a6ce2f4a4c30f21fa54d3dc82441b51
printing: c4cf83c78fd684f9bc318e6aadc18972aa48f617 printing: c4cf83c78fd684f9bc318e6aadc18972aa48f617
shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
url_launcher_macos: f87a979182d112f911de6820aefddaf56ee9fbfd
PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009

View File

@@ -29,6 +29,7 @@
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
47B861EC08643C31319819EE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AD6F0633B38D7C51DB0A44A /* Pods_RunnerTests.framework */; }; 47B861EC08643C31319819EE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AD6F0633B38D7C51DB0A44A /* Pods_RunnerTests.framework */; };
BC7B14BF366111D5491A16DE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C1847336C291D2358A2A03 /* Pods_Runner.framework */; }; BC7B14BF366111D5491A16DE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C1847336C291D2358A2A03 /* Pods_Runner.framework */; };
78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
@@ -88,6 +89,7 @@
EF12DE99A4F7A47E54D9243F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; }; EF12DE99A4F7A47E54D9243F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
F673AA005B814BAB5FA49C69 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; }; F673AA005B814BAB5FA49C69 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
F9C1847336C291D2358A2A03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F9C1847336C291D2358A2A03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@@ -103,6 +105,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */,
BC7B14BF366111D5491A16DE /* Pods_Runner.framework in Frameworks */, BC7B14BF366111D5491A16DE /* Pods_Runner.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@@ -164,6 +167,7 @@
33CEB47122A05771004F2AC0 /* Flutter */ = { 33CEB47122A05771004F2AC0 /* Flutter */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */,
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
@@ -231,6 +235,9 @@
productType = "com.apple.product-type.bundle.unit-test"; productType = "com.apple.product-type.bundle.unit-test";
}; };
33CC10EC2044A3C60003C045 /* Runner */ = { 33CC10EC2044A3C60003C045 /* Runner */ = {
packageProductDependencies = (
78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */,
);
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = ( buildPhases = (
@@ -256,6 +263,9 @@
/* Begin PBXProject section */ /* Begin PBXProject section */
33CC10E52044A3C60003C045 /* Project object */ = { 33CC10E52044A3C60003C045 /* Project object */ = {
packageReferences = (
781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */,
);
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
BuildIndependentTargetsInParallel = YES; BuildIndependentTargetsInParallel = YES;
@@ -796,6 +806,18 @@
defaultConfigurationName = Release; defaultConfigurationName = Release;
}; };
/* End XCConfigurationList section */ /* End XCConfigurationList section */
/* Begin XCLocalSwiftPackageReference section */
781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = {
isa = XCLocalSwiftPackageReference;
relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage;
};
/* End XCLocalSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = {
isa = XCSwiftPackageProductDependency;
productName = FlutterGeneratedPluginSwiftPackage;
};
/* End XCSwiftPackageProductDependency section */
}; };
rootObject = 33CC10E52044A3C60003C045 /* Project object */; rootObject = 33CC10E52044A3C60003C045 /* Project object */;
} }

View File

@@ -5,6 +5,24 @@
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES">
<PreActions>
<ExecutionAction
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
<ActionContent
title = "Run Prepare Flutter Framework Script"
scriptText = "&quot;$FLUTTER_ROOT&quot;/packages/flutter_tools/bin/macos_assemble.sh prepare&#10;">
<EnvironmentBuildable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
BuildableName = "flux.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</EnvironmentBuildable>
</ActionContent>
</ExecutionAction>
</PreActions>
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry <BuildActionEntry
buildForTesting = "YES" buildForTesting = "YES"