diff --git a/em2rp/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/em2rp/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4..de5d94e 100644 Binary files a/em2rp/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/em2rp/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/em2rp/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/em2rp/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b7..f23e7d0 100644 Binary files a/em2rp/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/em2rp/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/em2rp/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/em2rp/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 09d4391..d2ebf1c 100644 Binary files a/em2rp/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/em2rp/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/em2rp/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/em2rp/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..74539ce 100644 Binary files a/em2rp/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/em2rp/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/em2rp/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/em2rp/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..af219d4 100644 Binary files a/em2rp/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/em2rp/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/em2rp/flutter_launcher_icons.yaml b/em2rp/flutter_launcher_icons.yaml new file mode 100644 index 0000000..7183790 --- /dev/null +++ b/em2rp/flutter_launcher_icons.yaml @@ -0,0 +1,20 @@ +flutter_launcher_icons: + android: true + ios: true + image_path: "assets/EM2_NsurB.jpg" + web: + generate: true + image_path: "assets/EM2_NsurB.jpg" + background_color: "#ffffff" + theme_color: "#0175C2" + windows: + generate: true + image_path: "assets/EM2_NsurB.jpg" + icon_size: 48 + macos: + generate: true + image_path: "assets/EM2_NsurB.jpg" + linux: + generate: true + image_path: "assets/EM2_NsurB.jpg" + diff --git a/em2rp/ios/Runner.xcodeproj/project.pbxproj b/em2rp/ios/Runner.xcodeproj/project.pbxproj index 86ad1e6..e0b5deb 100644 --- a/em2rp/ios/Runner.xcodeproj/project.pbxproj +++ b/em2rp/ios/Runner.xcodeproj/project.pbxproj @@ -427,7 +427,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -484,7 +484,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fa..d0d98aa 100644 --- a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,122 +1 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} +{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index dc9ada4..962fe59 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 7353c41..ad85246 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 797d452..a072355 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 6ed2d93..539ae80 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cd7b00..dc076f7 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index fe73094..a523f08 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index 321773c..7f7e025 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 797d452..a072355 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index 502f463..38f956f 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 0ec3034..2fbae1a 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000..2ea9b0c Binary files /dev/null and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 0000000..470fdcb Binary files /dev/null and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 0000000..e3b0647 Binary files /dev/null and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 0000000..bbb72b0 Binary files /dev/null and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 0ec3034..2fbae1a 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index e9f5fea..dd45c84 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000..de5d94e Binary files /dev/null and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000..74539ce Binary files /dev/null and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 84ac32a..e703b81 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 8953cba..96bf122 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 0467bf1..4c0aa88 100644 Binary files a/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/em2rp/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/em2rp/lib/config/app_version.dart b/em2rp/lib/config/app_version.dart index 0c6572d..39e5c73 100644 --- a/em2rp/lib/config/app_version.dart +++ b/em2rp/lib/config/app_version.dart @@ -1,6 +1,6 @@ /// Configuration de la version de l'application class AppVersion { - static const String version = '0.3.4'; + static const String version = '0.3.5'; /// Retourne la version complète de l'application static String get fullVersion => 'v$version'; diff --git a/em2rp/lib/controllers/event_form_controller.dart b/em2rp/lib/controllers/event_form_controller.dart index b865523..39b9cbe 100644 --- a/em2rp/lib/controllers/event_form_controller.dart +++ b/em2rp/lib/controllers/event_form_controller.dart @@ -17,6 +17,9 @@ class EventFormController extends ChangeNotifier { final TextEditingController installationController = TextEditingController(); final TextEditingController disassemblyController = TextEditingController(); final TextEditingController addressController = TextEditingController(); + final TextEditingController jaugeController = TextEditingController(); + final TextEditingController contactEmailController = TextEditingController(); + final TextEditingController contactPhoneController = TextEditingController(); // State variables DateTime? _startDateTime; @@ -67,6 +70,9 @@ class EventFormController extends ChangeNotifier { disassemblyController.addListener(_onAnyFieldChanged); addressController.addListener(_onAnyFieldChanged); descriptionController.addListener(_onAnyFieldChanged); + jaugeController.addListener(_onAnyFieldChanged); + contactEmailController.addListener(_onAnyFieldChanged); + contactPhoneController.addListener(_onAnyFieldChanged); } void _onAnyFieldChanged() { @@ -97,6 +103,9 @@ class EventFormController extends ChangeNotifier { installationController.text = event.installationTime.toString(); disassemblyController.text = event.disassemblyTime.toString(); addressController.text = event.address; + jaugeController.text = event.jauge?.toString() ?? ''; + contactEmailController.text = event.contactEmail ?? ''; + contactPhoneController.text = event.contactPhone ?? ''; _startDateTime = event.startDateTime; _endDateTime = event.endDateTime; _assignedEquipment = List.from(event.assignedEquipment); @@ -310,6 +319,9 @@ class EventFormController extends ChangeNotifier { documents: finalDocuments, options: _selectedOptions, status: _selectedStatus, + jauge: jaugeController.text.isNotEmpty ? int.tryParse(jaugeController.text) : null, + contactEmail: contactEmailController.text.isNotEmpty ? contactEmailController.text.trim() : null, + contactPhone: contactPhoneController.text.isNotEmpty ? contactPhoneController.text.trim() : null, assignedEquipment: _assignedEquipment, assignedContainers: _assignedContainers, preparationStatus: existingEvent.preparationStatus, @@ -352,6 +364,9 @@ class EventFormController extends ChangeNotifier { documents: _uploadedFiles, options: _selectedOptions, status: _selectedStatus, + jauge: jaugeController.text.isNotEmpty ? int.tryParse(jaugeController.text) : null, + contactEmail: contactEmailController.text.isNotEmpty ? contactEmailController.text.trim() : null, + contactPhone: contactPhoneController.text.isNotEmpty ? contactPhoneController.text.trim() : null, assignedContainers: _assignedContainers, assignedEquipment: _assignedEquipment, ); @@ -437,6 +452,9 @@ class EventFormController extends ChangeNotifier { installationController.dispose(); disassemblyController.dispose(); addressController.dispose(); + jaugeController.dispose(); + contactEmailController.dispose(); + contactPhoneController.dispose(); super.dispose(); } } diff --git a/em2rp/lib/models/event_model.dart b/em2rp/lib/models/event_model.dart index 573d8d6..8fec2a7 100644 --- a/em2rp/lib/models/event_model.dart +++ b/em2rp/lib/models/event_model.dart @@ -172,6 +172,11 @@ class EventModel { final List> options; final EventStatus status; + // Champs de contact + final int? jauge; + final String? contactEmail; + final String? contactPhone; + // Nouveaux champs pour la gestion du matériel final List assignedEquipment; final List assignedContainers; // IDs des conteneurs assignés @@ -197,6 +202,9 @@ class EventModel { required this.documents, this.options = const [], this.status = EventStatus.waitingForApproval, + this.jauge, + this.contactEmail, + this.contactPhone, this.assignedEquipment = const [], this.assignedContainers = const [], this.preparationStatus, @@ -329,6 +337,9 @@ class EventModel { documents: docs, options: options, status: eventStatusFromString(map['status'] as String?), + jauge: map['jauge'] != null ? _parseInt(map['jauge']) : null, + contactEmail: map['contactEmail']?.toString(), + contactPhone: map['contactPhone']?.toString(), assignedEquipment: assignedEquipment, preparationStatus: preparationStatusFromString(map['preparationStatus'] as String?), returnStatus: returnStatusFromString(map['returnStatus'] as String?), @@ -384,6 +395,9 @@ class EventModel { 'documents': documents, 'options': options, 'status': eventStatusToString(status), + 'jauge': jauge, + 'contactEmail': contactEmail, + 'contactPhone': contactPhone, 'assignedEquipment': assignedEquipment.map((e) => e.toMap()).toList(), 'assignedContainers': assignedContainers, 'preparationStatus': preparationStatus != null ? preparationStatusToString(preparationStatus!) : null, diff --git a/em2rp/lib/views/event_add_page.dart b/em2rp/lib/views/event_add_page.dart index 6b78095..87acc1c 100644 --- a/em2rp/lib/views/event_add_page.dart +++ b/em2rp/lib/views/event_add_page.dart @@ -238,6 +238,9 @@ class _EventAddEditPageState extends State { installationController: controller.installationController, disassemblyController: controller.disassemblyController, addressController: controller.addressController, + jaugeController: controller.jaugeController, + contactEmailController: controller.contactEmailController, + contactPhoneController: controller.contactPhoneController, isMobile: isMobile, onAnyFieldChanged: () {}, // Géré automatiquement par le contrôleur ), diff --git a/em2rp/lib/views/widgets/calendar_widgets/event_details_components/event_details_description.dart b/em2rp/lib/views/widgets/calendar_widgets/event_details_components/event_details_description.dart index 61d04a2..9538578 100644 --- a/em2rp/lib/views/widgets/calendar_widgets/event_details_components/event_details_description.dart +++ b/em2rp/lib/views/widgets/calendar_widgets/event_details_components/event_details_description.dart @@ -12,6 +12,8 @@ class EventDetailsDescription extends StatelessWidget { @override Widget build(BuildContext context) { + final bool isMobile = MediaQuery.of(context).size.width < 600; + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -24,10 +26,17 @@ class EventDetailsDescription extends StatelessWidget { ), const SizedBox(height: 8), SelectableText( - event.description, + event.description.isEmpty ? 'Aucune description' : event.description, style: Theme.of(context).textTheme.bodyLarge, ), const SizedBox(height: 16), + + // Informations de contact et jauge + if (event.jauge != null || event.contactEmail != null || event.contactPhone != null) ...[ + isMobile ? _buildContactInfoMobile(context) : _buildContactInfoDesktop(context), + const SizedBox(height: 16), + ], + Text( 'Adresse', style: Theme.of(context).textTheme.titleLarge?.copyWith( @@ -50,5 +59,104 @@ class EventDetailsDescription extends StatelessWidget { ], ); } + + Widget _buildContactInfoMobile(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (event.jauge != null) ...[ + _buildInfoRow(context, Icons.people, 'Jauge', '${event.jauge} personnes'), + const SizedBox(height: 8), + ], + if (event.contactEmail != null) ...[ + _buildInfoRow(context, Icons.email, 'Email', event.contactEmail!), + const SizedBox(height: 8), + ], + if (event.contactPhone != null) ...[ + _buildInfoRow(context, Icons.phone, 'Téléphone', event.contactPhone!), + ], + ], + ); + } + + Widget _buildContactInfoDesktop(BuildContext context) { + return Wrap( + spacing: 24, + runSpacing: 12, + children: [ + if (event.jauge != null) + _buildInfoChip(context, Icons.people, 'Jauge', '${event.jauge} personnes'), + if (event.contactEmail != null) + _buildInfoChip(context, Icons.email, 'Email', event.contactEmail!), + if (event.contactPhone != null) + _buildInfoChip(context, Icons.phone, 'Téléphone', event.contactPhone!), + ], + ); + } + + Widget _buildInfoRow(BuildContext context, IconData icon, String label, String value) { + return Row( + children: [ + Icon(icon, size: 20, color: Theme.of(context).primaryColor), + const SizedBox(width: 8), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + label, + style: Theme.of(context).textTheme.labelSmall?.copyWith( + color: Colors.grey[600], + ), + ), + SelectableText( + value, + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ), + ], + ); + } + + Widget _buildInfoChip(BuildContext context, IconData icon, String label, String value) { + final primaryColor = Theme.of(context).primaryColor; + return Container( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + decoration: BoxDecoration( + color: primaryColor.withOpacity(0.1), + borderRadius: BorderRadius.circular(8), + border: Border.all(color: primaryColor.withOpacity(0.2)), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(icon, size: 18, color: primaryColor), + const SizedBox(width: 8), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + label, + style: Theme.of(context).textTheme.labelSmall?.copyWith( + color: Colors.grey[600], + ), + ), + SelectableText( + value, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ], + ), + ); + } } diff --git a/em2rp/lib/views/widgets/event_form/event_details_section.dart b/em2rp/lib/views/widgets/event_form/event_details_section.dart index 942907c..7d3a985 100644 --- a/em2rp/lib/views/widgets/event_form/event_details_section.dart +++ b/em2rp/lib/views/widgets/event_form/event_details_section.dart @@ -6,6 +6,9 @@ class EventDetailsSection extends StatefulWidget { final TextEditingController installationController; final TextEditingController disassemblyController; final TextEditingController addressController; + final TextEditingController jaugeController; + final TextEditingController contactEmailController; + final TextEditingController contactPhoneController; final bool isMobile; final VoidCallback onAnyFieldChanged; @@ -15,6 +18,9 @@ class EventDetailsSection extends StatefulWidget { required this.installationController, required this.disassemblyController, required this.addressController, + required this.jaugeController, + required this.contactEmailController, + required this.contactPhoneController, required this.isMobile, required this.onAnyFieldChanged, }); @@ -51,27 +57,15 @@ class _EventDetailsSectionState extends State { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ _buildSectionTitle('Détails'), - AnimatedContainer( - duration: const Duration(milliseconds: 200), - constraints: BoxConstraints( - minHeight: 48, - maxHeight: widget.isMobile ? 48.0 * 20 : 48.0 * 10, - ), - child: TextFormField( - controller: widget.descriptionController, - minLines: 1, - maxLines: _descriptionMaxLines > (widget.isMobile ? 20 : 10) - ? (widget.isMobile ? 20 : 10) - : _descriptionMaxLines, - decoration: const InputDecoration( - labelText: 'Description', - border: OutlineInputBorder(), - prefixIcon: Icon(Icons.description), - ), - onChanged: (_) => widget.onAnyFieldChanged(), - ), - ), + + // Description et champs de contact + widget.isMobile + ? _buildMobileLayout() + : _buildDesktopLayout(), + const SizedBox(height: 20), + + // Installation et démontage Row( children: [ Expanded( @@ -93,6 +87,7 @@ class _EventDetailsSectionState extends State { ), ], ), + _buildSectionTitle('Adresse*'), TextFormField( controller: widget.addressController, @@ -108,6 +103,100 @@ class _EventDetailsSectionState extends State { ); } + Widget _buildMobileLayout() { + return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + _buildDescriptionField(), + const SizedBox(height: 16), + _buildContactFields(), + ], + ); + } + + Widget _buildDesktopLayout() { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 2, + child: _buildDescriptionField(), + ), + const SizedBox(width: 16), + Expanded( + flex: 1, + child: _buildContactFields(), + ), + ], + ); + } + + Widget _buildDescriptionField() { + return AnimatedContainer( + duration: const Duration(milliseconds: 200), + constraints: BoxConstraints( + minHeight: 48, + maxHeight: widget.isMobile ? 48.0 * 20 : 48.0 * 10, + ), + child: TextFormField( + controller: widget.descriptionController, + minLines: 1, + maxLines: _descriptionMaxLines > (widget.isMobile ? 20 : 10) + ? (widget.isMobile ? 20 : 10) + : _descriptionMaxLines, + decoration: const InputDecoration( + labelText: 'Description', + border: OutlineInputBorder(), + prefixIcon: Icon(Icons.description), + ), + onChanged: (_) => widget.onAnyFieldChanged(), + ), + ); + } + + Widget _buildContactFields() { + return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + TextFormField( + controller: widget.jaugeController, + decoration: const InputDecoration( + labelText: 'Jauge', + border: OutlineInputBorder(), + prefixIcon: Icon(Icons.people), + hintText: 'Nombre de personnes', + ), + keyboardType: TextInputType.number, + onChanged: (_) => widget.onAnyFieldChanged(), + ), + const SizedBox(height: 12), + TextFormField( + controller: widget.contactEmailController, + decoration: const InputDecoration( + labelText: 'Email de contact', + border: OutlineInputBorder(), + prefixIcon: Icon(Icons.email), + hintText: 'contact@exemple.com', + ), + keyboardType: TextInputType.emailAddress, + onChanged: (_) => widget.onAnyFieldChanged(), + ), + const SizedBox(height: 12), + TextFormField( + controller: widget.contactPhoneController, + decoration: const InputDecoration( + labelText: 'Téléphone de contact', + border: OutlineInputBorder(), + prefixIcon: Icon(Icons.phone), + hintText: '06 12 34 56 78', + ), + keyboardType: TextInputType.phone, + onChanged: (_) => widget.onAnyFieldChanged(), + ), + ], + ); + } + Widget _buildSectionTitle(String title) { return Padding( padding: const EdgeInsets.only(top: 16.0, bottom: 8.0), diff --git a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index a2ec33f..96d3fee 100644 --- a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,68 +1,68 @@ { - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" + "info": { + "version": 1, + "author": "xcode" }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} + "images": [ + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_16.png", + "scale": "1x" + }, + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "2x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "1x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_64.png", + "scale": "2x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_128.png", + "scale": "1x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "2x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "1x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "2x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "1x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_1024.png", + "scale": "2x" + } + ] +} \ No newline at end of file diff --git a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 82b6f9d..962fe59 100644 Binary files a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index 13b35eb..a86185d 100644 Binary files a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 0a3f5fa..ac8e97d 100644 Binary files a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bdb5722..847b645 100644 Binary files a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index f083318..246556e 100644 Binary files a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index 326c0e7..9513edb 100644 Binary files a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 2f1632c..f9dd5b8 100644 Binary files a/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/em2rp/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/em2rp/web/favicon.jpg b/em2rp/web/favicon.jpg new file mode 100644 index 0000000..06ea79c Binary files /dev/null and b/em2rp/web/favicon.jpg differ diff --git a/em2rp/web/favicon.png b/em2rp/web/favicon.png index 8aaa46a..ac8e97d 100644 Binary files a/em2rp/web/favicon.png and b/em2rp/web/favicon.png differ diff --git a/em2rp/web/icons/Icon-192.png b/em2rp/web/icons/Icon-192.png index b749bfe..af219d4 100644 Binary files a/em2rp/web/icons/Icon-192.png and b/em2rp/web/icons/Icon-192.png differ diff --git a/em2rp/web/icons/Icon-512.png b/em2rp/web/icons/Icon-512.png index 88cfd48..9513edb 100644 Binary files a/em2rp/web/icons/Icon-512.png and b/em2rp/web/icons/Icon-512.png differ diff --git a/em2rp/web/icons/Icon-maskable-192.png b/em2rp/web/icons/Icon-maskable-192.png index eb9b4d7..af219d4 100644 Binary files a/em2rp/web/icons/Icon-maskable-192.png and b/em2rp/web/icons/Icon-maskable-192.png differ diff --git a/em2rp/web/icons/Icon-maskable-512.png b/em2rp/web/icons/Icon-maskable-512.png index d69c566..9513edb 100644 Binary files a/em2rp/web/icons/Icon-maskable-512.png and b/em2rp/web/icons/Icon-maskable-512.png differ diff --git a/em2rp/web/index.html b/em2rp/web/index.html index 690c172..0872488 100644 --- a/em2rp/web/index.html +++ b/em2rp/web/index.html @@ -18,18 +18,18 @@ - + - - + + - + - em2rp + EM2RP - Event Management