From c6c61f1a31e445ebc33b626eb9962da787c752a7 Mon Sep 17 00:00:00 2001 From: Mark M2 Macbook Date: Mon, 6 Apr 2026 08:48:10 +0200 Subject: [PATCH] Enhance theme management and UI settings - Updated AppThemeMode enum to include icons and added fromValue method for easier theme retrieval. - Modified ThemeBloc to manage currentTheme instead of themeMode. - Enhanced ThemeState to reflect currentTheme and updated copyWith method. - Added ThemeSettingsView for user-friendly theme selection in settings. - Improved fluxLightTheme and fluxDarkTheme with new listTileTheme and color settings. - Updated settings view to navigate to ThemeSettingsView. - Added entitlements for network client permissions in Debug and Release profiles. - Introduced Podfile.lock for dependency management. - Added devtools_options.yaml for Dart & Flutter DevTools configuration. --- devtools_options.yaml | 3 + lib/data/enums.dart | 16 ++- lib/main.dart | 2 +- lib/theme/theme.dart | 65 ++++++++++++ lib/theme/theme_bloc.dart | 12 +-- lib/theme/theme_state.dart | 10 +- lib/ui/settings/settings_view.dart | 17 +++- lib/ui/settings/theme_settings_view.dart | 35 +++++++ macos/Podfile.lock | 35 +++++++ macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + macos/Runner/DebugProfile.entitlements | 2 + macos/Runner/Release.entitlements | 2 + 13 files changed, 281 insertions(+), 19 deletions(-) create mode 100644 devtools_options.yaml create mode 100644 lib/ui/settings/theme_settings_view.dart create mode 100644 macos/Podfile.lock diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 0000000..fa0b357 --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/lib/data/enums.dart b/lib/data/enums.dart index c8d9f29..27f27a5 100644 --- a/lib/data/enums.dart +++ b/lib/data/enums.dart @@ -1,12 +1,20 @@ import 'package:flutter/material.dart'; enum AppThemeMode { - light('light', 'Chiaro', ThemeMode.light), - dark('dark', 'Scuro', ThemeMode.dark), - system('system', 'Sistema', ThemeMode.system); + light('light', 'Chiaro', ThemeMode.light, Icons.light_mode), + dark('dark', 'Scuro', ThemeMode.dark, Icons.dark_mode), + system('system', 'Sistema', ThemeMode.system, Icons.brightness_auto); - const AppThemeMode(this.value, this.label, this.themeMode); + const AppThemeMode(this.value, this.label, this.themeMode, this.icon); final String value; final String label; final ThemeMode themeMode; + final IconData icon; + + static AppThemeMode fromValue(String? value) { + return AppThemeMode.values.firstWhere( + (e) => e.value == value, + orElse: () => AppThemeMode.system, + ); + } } diff --git a/lib/main.dart b/lib/main.dart index c8dc933..6fa53f8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -34,7 +34,7 @@ class FluxApp extends StatelessWidget { debugShowCheckedModeBanner: false, theme: fluxLightTheme, darkTheme: fluxDarkTheme, - themeMode: state.themeMode, // Applica il tema FLUX + themeMode: state.currentTheme.themeMode, // Applica il tema FLUX home: const HomeScreen(), ); }, diff --git a/lib/theme/theme.dart b/lib/theme/theme.dart index 2d4dd73..317f36d 100644 --- a/lib/theme/theme.dart +++ b/lib/theme/theme.dart @@ -69,6 +69,13 @@ ThemeData fluxDarkTheme = ThemeData( onPrimary: Colors.white, onSurface: FluxColors.darkTextPrimary, ), + hoverColor: FluxColors.accentTurquoise.withValues( + alpha: 0.08, + ), // <--- AGGIUNGI QUESTO + splashColor: FluxColors.accentTurquoise.withValues( + alpha: 0.12, + ), // <--- AGGIUNGI QUESTO + highlightColor: Colors.transparent, textTheme: _buildFluxTextTheme( ThemeData.dark().textTheme, @@ -97,6 +104,28 @@ ThemeData fluxDarkTheme = ThemeData( ), ), + listTileTheme: ListTileThemeData( + // Definiamo la forma arrotondata (fondamentale per l'effetto moderno) + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + // Colore dell'icona (Turchese Flux) + iconColor: FluxColors.accentTurquoise, + // Colore del testo + titleTextStyle: GoogleFonts.poppins( + color: FluxColors.darkTextPrimary, + fontSize: 16, + fontWeight: FontWeight.w500, + ), + subtitleTextStyle: GoogleFonts.poppins( + color: FluxColors.darkTextSecondary, + fontSize: 13, + ), + // Per far apparire la "manina" su Web/Desktop + mouseCursor: WidgetStateProperty.all(SystemMouseCursors.click), + + // NOTA: Se overlayColor non esiste, Flutter userà i colori + // di default del tema (splashColor e hoverColor) definiti nel ThemeData generale. + ), + elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( backgroundColor: FluxColors.primaryBlue, @@ -120,6 +149,9 @@ ThemeData fluxLightTheme = ThemeData( primaryColor: FluxColors.primaryBlue, // Sfondo chiarissimo per staccare dalle card bianche scaffoldBackgroundColor: FluxColors.lightBackground, + hoverColor: FluxColors.primaryBlue.withValues(alpha: 0.05), + splashColor: FluxColors.primaryBlue.withValues(alpha: 0.1), + highlightColor: Colors.transparent, colorScheme: const ColorScheme.light( primary: FluxColors.primaryBlue, @@ -157,6 +189,28 @@ ThemeData fluxLightTheme = ThemeData( ), ), + listTileTheme: ListTileThemeData( + // Definiamo la forma arrotondata (fondamentale per l'effetto moderno) + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + // Colore dell'icona (Turchese Flux) + iconColor: FluxColors.accentTurquoise, + // Colore del testo + titleTextStyle: GoogleFonts.poppins( + color: FluxColors.darkTextPrimary, + fontSize: 16, + fontWeight: FontWeight.w500, + ), + subtitleTextStyle: GoogleFonts.poppins( + color: FluxColors.darkTextSecondary, + fontSize: 13, + ), + // Per far apparire la "manina" su Web/Desktop + mouseCursor: WidgetStateProperty.all(SystemMouseCursors.click), + + // NOTA: Se overlayColor non esiste, Flutter userà i colori + // di default del tema (splashColor e hoverColor) definiti nel ThemeData generale. + ), + // Il pulsante principale rimane Blu Elettrico, molto visibile elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( @@ -187,3 +241,14 @@ ThemeData fluxLightTheme = ThemeData( // Colore delle icone generiche iconTheme: const IconThemeData(color: FluxColors.lightTextSecondary), ); + +extension FluxThemeContext on BuildContext { + // Recupera il colore 'secondary' definito nel tuo ColorScheme (il Turchese Flux) + Color get accent => Theme.of(this).colorScheme.secondary; + + // Puoi aggiungere anche questi per comodità futura: + Color get primary => Theme.of(this).colorScheme.primary; + Color get surface => Theme.of(this).colorScheme.surface; + Color get primaryText => + Theme.of(this).textTheme.titleLarge?.color ?? Colors.black; +} diff --git a/lib/theme/theme_bloc.dart b/lib/theme/theme_bloc.dart index 39ff8d9..4863b92 100644 --- a/lib/theme/theme_bloc.dart +++ b/lib/theme/theme_bloc.dart @@ -1,4 +1,3 @@ -import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flux/data/enums.dart'; @@ -11,20 +10,19 @@ part 'theme_state.dart'; class ThemeBloc extends Bloc { static const String _savedThemeKey = "themeModeSetting"; final SharedPreferences _prefs = GetIt.I.get(); - ThemeBloc() : super(ThemeState(themeMode: ThemeMode.system)) { + ThemeBloc() : super(ThemeState(currentTheme: AppThemeMode.system)) { on((event, emit) { - String savedTheme = _prefs.getString(_savedThemeKey) ?? 'system'; emit( state.copyWith( - themeMode: AppThemeMode.values - .firstWhere((test) => test.value == savedTheme) - .themeMode, + currentTheme: AppThemeMode.fromValue( + _prefs.getString(_savedThemeKey), + ), ), ); }); on((event, emit) async { await _prefs.setString(_savedThemeKey, event.appThemeMode.value); - emit(state.copyWith(themeMode: event.appThemeMode.themeMode)); + emit(state.copyWith(currentTheme: event.appThemeMode)); }); } } diff --git a/lib/theme/theme_state.dart b/lib/theme/theme_state.dart index b05294b..8fb73a0 100644 --- a/lib/theme/theme_state.dart +++ b/lib/theme/theme_state.dart @@ -1,14 +1,14 @@ part of 'theme_bloc.dart'; class ThemeState extends Equatable { - const ThemeState({required this.themeMode}); + const ThemeState({required this.currentTheme}); - final ThemeMode themeMode; + final AppThemeMode currentTheme; @override - List get props => [themeMode]; + List get props => [currentTheme]; - ThemeState copyWith({ThemeMode? themeMode}) { - return ThemeState(themeMode: themeMode ?? this.themeMode); + ThemeState copyWith({AppThemeMode? currentTheme}) { + return ThemeState(currentTheme: currentTheme ?? this.currentTheme); } } diff --git a/lib/ui/settings/settings_view.dart b/lib/ui/settings/settings_view.dart index e28159d..dd92edb 100644 --- a/lib/ui/settings/settings_view.dart +++ b/lib/ui/settings/settings_view.dart @@ -1,6 +1,7 @@ // lib/ui/impostazioni/impostazioni_view.dart import 'package:flutter/material.dart'; import 'package:flux/theme/theme.dart'; +import 'package:flux/ui/settings/theme_settings_view.dart'; class SettingsView extends StatelessWidget { const SettingsView({super.key}); @@ -18,12 +19,18 @@ class SettingsView extends StatelessWidget { 'Profilo Utente', 'Configura i tuoi dati', context, + MaterialPageRoute( + builder: (context) => const ThemeSettingsView(), + ), ), _settingsTile( Icons.store, 'Mio Negozio', 'Piacenza Centro', context, + MaterialPageRoute( + builder: (context) => const ThemeSettingsView(), + ), ), ]), const SizedBox(height: 16), @@ -33,12 +40,18 @@ class SettingsView extends StatelessWidget { 'Sincronizzazione', 'Ultima: 5 min fa', context, + MaterialPageRoute( + builder: (context) => const ThemeSettingsView(), + ), ), _settingsTile( Icons.dark_mode, - 'Tema (FLUX Dark Active)', + 'Tema (FLUX Dark)', 'Configurazione visiva', context, + MaterialPageRoute( + builder: (context) => const ThemeSettingsView(), + ), ), ]), const SizedBox(height: 24), @@ -75,6 +88,7 @@ class SettingsView extends StatelessWidget { String title, String subtitle, BuildContext context, + MaterialPageRoute route, ) { return ListTile( leading: Icon(icon, color: FluxColors.primaryBlue), @@ -84,6 +98,7 @@ class SettingsView extends StatelessWidget { Icons.chevron_right, color: Theme.of(context).textTheme.bodyMedium?.color, ), + onTap: () => Navigator.of(context).push(route), ); } } diff --git a/lib/ui/settings/theme_settings_view.dart b/lib/ui/settings/theme_settings_view.dart new file mode 100644 index 0000000..a37f482 --- /dev/null +++ b/lib/ui/settings/theme_settings_view.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flux/data/enums.dart'; +import 'package:flux/theme/theme.dart'; +import 'package:flux/theme/theme_bloc.dart'; + +class ThemeSettingsView extends StatelessWidget { + const ThemeSettingsView({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: const Text('Impostazioni Tema')), + body: BlocBuilder( + builder: (context, state) => RadioGroup( + groupValue: state.currentTheme, + onChanged: (newTheme) { + if (newTheme != null) { + context.read().add(ChangeThemeEvent(newTheme)); + } + }, + child: Column( + children: AppThemeMode.values.map((theme) { + return RadioListTile( + title: Text(theme.label), + secondary: Icon(theme.icon, color: context.accent), + value: theme, + ); + }).toList(), + ), + ), + ), + ); + } +} diff --git a/macos/Podfile.lock b/macos/Podfile.lock new file mode 100644 index 0000000..5b8e299 --- /dev/null +++ b/macos/Podfile.lock @@ -0,0 +1,35 @@ +PODS: + - app_links (6.4.1): + - FlutterMacOS + - FlutterMacOS (1.0.0) + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + - url_launcher_macos (0.0.1): + - FlutterMacOS + +DEPENDENCIES: + - app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - 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: + app_links: + :path: Flutter/ephemeral/.symlinks/plugins/app_links/macos + FlutterMacOS: + :path: Flutter/ephemeral + 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: + app_links: 05a6ec2341985eb05e9f97dc63f5837c39895c3f + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb + url_launcher_macos: f87a979182d112f911de6820aefddaf56ee9fbfd + +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 + +COCOAPODS: 1.16.2 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 074c26a..a71cfcd 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 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 */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -64,7 +66,7 @@ 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* flux.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "flux.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* flux.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = flux.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -76,8 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 64CEA5375FF158D0C9BAC5E3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7B4E4499661A94FDCB94A882 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 9AD6F0633B38D7C51DB0A44A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D2C3D9447F8ADB0A780C18D6 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E640FE97B530849DE019EDD8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + F9C1847336C291D2358A2A03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 47B861EC08643C31319819EE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,6 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BC7B14BF366111D5491A16DE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -125,6 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + BABCD4273B81B107DD58605D /* Pods */, ); sourceTree = ""; }; @@ -172,9 +185,25 @@ path = Runner; sourceTree = ""; }; + BABCD4273B81B107DD58605D /* Pods */ = { + isa = PBXGroup; + children = ( + D2C3D9447F8ADB0A780C18D6 /* Pods-Runner.debug.xcconfig */, + F673AA005B814BAB5FA49C69 /* Pods-Runner.release.xcconfig */, + E640FE97B530849DE019EDD8 /* Pods-Runner.profile.xcconfig */, + 64CEA5375FF158D0C9BAC5E3 /* Pods-RunnerTests.debug.xcconfig */, + EF12DE99A4F7A47E54D9243F /* Pods-RunnerTests.release.xcconfig */, + 7B4E4499661A94FDCB94A882 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + F9C1847336C291D2358A2A03 /* Pods_Runner.framework */, + 9AD6F0633B38D7C51DB0A44A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + E6E9E706A27356DCD7D737C0 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + A0D9F8FEAD5980B2EFE46DAF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + E13C7961A1538309550A7824 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + A0D9F8FEAD5980B2EFE46DAF /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E13C7961A1538309550A7824 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + E6E9E706A27356DCD7D737C0 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 64CEA5375FF158D0C9BAC5E3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = EF12DE99A4F7A47E54D9243F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 7B4E4499661A94FDCB94A882 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..21a3cc1 100644 --- a/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements index dddb8a3..08c3ab1 100644 --- a/macos/Runner/DebugProfile.entitlements +++ b/macos/Runner/DebugProfile.entitlements @@ -8,5 +8,7 @@ com.apple.security.network.server + com.apple.security.network.client + diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements index 852fa1a..ee95ab7 100644 --- a/macos/Runner/Release.entitlements +++ b/macos/Runner/Release.entitlements @@ -4,5 +4,7 @@ com.apple.security.app-sandbox + com.apple.security.network.client +