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.
This commit is contained in:
3
devtools_options.yaml
Normal file
3
devtools_options.yaml
Normal file
@@ -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:
|
||||||
@@ -1,12 +1,20 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
enum AppThemeMode {
|
enum AppThemeMode {
|
||||||
light('light', 'Chiaro', ThemeMode.light),
|
light('light', 'Chiaro', ThemeMode.light, Icons.light_mode),
|
||||||
dark('dark', 'Scuro', ThemeMode.dark),
|
dark('dark', 'Scuro', ThemeMode.dark, Icons.dark_mode),
|
||||||
system('system', 'Sistema', ThemeMode.system);
|
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 value;
|
||||||
final String label;
|
final String label;
|
||||||
final ThemeMode themeMode;
|
final ThemeMode themeMode;
|
||||||
|
final IconData icon;
|
||||||
|
|
||||||
|
static AppThemeMode fromValue(String? value) {
|
||||||
|
return AppThemeMode.values.firstWhere(
|
||||||
|
(e) => e.value == value,
|
||||||
|
orElse: () => AppThemeMode.system,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class FluxApp extends StatelessWidget {
|
|||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
theme: fluxLightTheme,
|
theme: fluxLightTheme,
|
||||||
darkTheme: fluxDarkTheme,
|
darkTheme: fluxDarkTheme,
|
||||||
themeMode: state.themeMode, // Applica il tema FLUX
|
themeMode: state.currentTheme.themeMode, // Applica il tema FLUX
|
||||||
home: const HomeScreen(),
|
home: const HomeScreen(),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -69,6 +69,13 @@ ThemeData fluxDarkTheme = ThemeData(
|
|||||||
onPrimary: Colors.white,
|
onPrimary: Colors.white,
|
||||||
onSurface: FluxColors.darkTextPrimary,
|
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(
|
textTheme: _buildFluxTextTheme(
|
||||||
ThemeData.dark().textTheme,
|
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(
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
backgroundColor: FluxColors.primaryBlue,
|
backgroundColor: FluxColors.primaryBlue,
|
||||||
@@ -120,6 +149,9 @@ ThemeData fluxLightTheme = ThemeData(
|
|||||||
primaryColor: FluxColors.primaryBlue,
|
primaryColor: FluxColors.primaryBlue,
|
||||||
// Sfondo chiarissimo per staccare dalle card bianche
|
// Sfondo chiarissimo per staccare dalle card bianche
|
||||||
scaffoldBackgroundColor: FluxColors.lightBackground,
|
scaffoldBackgroundColor: FluxColors.lightBackground,
|
||||||
|
hoverColor: FluxColors.primaryBlue.withValues(alpha: 0.05),
|
||||||
|
splashColor: FluxColors.primaryBlue.withValues(alpha: 0.1),
|
||||||
|
highlightColor: Colors.transparent,
|
||||||
|
|
||||||
colorScheme: const ColorScheme.light(
|
colorScheme: const ColorScheme.light(
|
||||||
primary: FluxColors.primaryBlue,
|
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
|
// Il pulsante principale rimane Blu Elettrico, molto visibile
|
||||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
@@ -187,3 +241,14 @@ ThemeData fluxLightTheme = ThemeData(
|
|||||||
// Colore delle icone generiche
|
// Colore delle icone generiche
|
||||||
iconTheme: const IconThemeData(color: FluxColors.lightTextSecondary),
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:flux/data/enums.dart';
|
import 'package:flux/data/enums.dart';
|
||||||
@@ -11,20 +10,19 @@ part 'theme_state.dart';
|
|||||||
class ThemeBloc extends Bloc<ThemeEvent, ThemeState> {
|
class ThemeBloc extends Bloc<ThemeEvent, ThemeState> {
|
||||||
static const String _savedThemeKey = "themeModeSetting";
|
static const String _savedThemeKey = "themeModeSetting";
|
||||||
final SharedPreferences _prefs = GetIt.I.get<SharedPreferences>();
|
final SharedPreferences _prefs = GetIt.I.get<SharedPreferences>();
|
||||||
ThemeBloc() : super(ThemeState(themeMode: ThemeMode.system)) {
|
ThemeBloc() : super(ThemeState(currentTheme: AppThemeMode.system)) {
|
||||||
on<LoadThemeEvent>((event, emit) {
|
on<LoadThemeEvent>((event, emit) {
|
||||||
String savedTheme = _prefs.getString(_savedThemeKey) ?? 'system';
|
|
||||||
emit(
|
emit(
|
||||||
state.copyWith(
|
state.copyWith(
|
||||||
themeMode: AppThemeMode.values
|
currentTheme: AppThemeMode.fromValue(
|
||||||
.firstWhere((test) => test.value == savedTheme)
|
_prefs.getString(_savedThemeKey),
|
||||||
.themeMode,
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
on<ChangeThemeEvent>((event, emit) async {
|
on<ChangeThemeEvent>((event, emit) async {
|
||||||
await _prefs.setString(_savedThemeKey, event.appThemeMode.value);
|
await _prefs.setString(_savedThemeKey, event.appThemeMode.value);
|
||||||
emit(state.copyWith(themeMode: event.appThemeMode.themeMode));
|
emit(state.copyWith(currentTheme: event.appThemeMode));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
part of 'theme_bloc.dart';
|
part of 'theme_bloc.dart';
|
||||||
|
|
||||||
class ThemeState extends Equatable {
|
class ThemeState extends Equatable {
|
||||||
const ThemeState({required this.themeMode});
|
const ThemeState({required this.currentTheme});
|
||||||
|
|
||||||
final ThemeMode themeMode;
|
final AppThemeMode currentTheme;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [themeMode];
|
List<Object?> get props => [currentTheme];
|
||||||
|
|
||||||
ThemeState copyWith({ThemeMode? themeMode}) {
|
ThemeState copyWith({AppThemeMode? currentTheme}) {
|
||||||
return ThemeState(themeMode: themeMode ?? this.themeMode);
|
return ThemeState(currentTheme: currentTheme ?? this.currentTheme);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
// lib/ui/impostazioni/impostazioni_view.dart
|
// lib/ui/impostazioni/impostazioni_view.dart
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flux/theme/theme.dart';
|
import 'package:flux/theme/theme.dart';
|
||||||
|
import 'package:flux/ui/settings/theme_settings_view.dart';
|
||||||
|
|
||||||
class SettingsView extends StatelessWidget {
|
class SettingsView extends StatelessWidget {
|
||||||
const SettingsView({super.key});
|
const SettingsView({super.key});
|
||||||
@@ -18,12 +19,18 @@ class SettingsView extends StatelessWidget {
|
|||||||
'Profilo Utente',
|
'Profilo Utente',
|
||||||
'Configura i tuoi dati',
|
'Configura i tuoi dati',
|
||||||
context,
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => const ThemeSettingsView(),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
_settingsTile(
|
_settingsTile(
|
||||||
Icons.store,
|
Icons.store,
|
||||||
'Mio Negozio',
|
'Mio Negozio',
|
||||||
'Piacenza Centro',
|
'Piacenza Centro',
|
||||||
context,
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => const ThemeSettingsView(),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
]),
|
]),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
@@ -33,12 +40,18 @@ class SettingsView extends StatelessWidget {
|
|||||||
'Sincronizzazione',
|
'Sincronizzazione',
|
||||||
'Ultima: 5 min fa',
|
'Ultima: 5 min fa',
|
||||||
context,
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => const ThemeSettingsView(),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
_settingsTile(
|
_settingsTile(
|
||||||
Icons.dark_mode,
|
Icons.dark_mode,
|
||||||
'Tema (FLUX Dark Active)',
|
'Tema (FLUX Dark)',
|
||||||
'Configurazione visiva',
|
'Configurazione visiva',
|
||||||
context,
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => const ThemeSettingsView(),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
]),
|
]),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
@@ -75,6 +88,7 @@ class SettingsView extends StatelessWidget {
|
|||||||
String title,
|
String title,
|
||||||
String subtitle,
|
String subtitle,
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
|
MaterialPageRoute route,
|
||||||
) {
|
) {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
leading: Icon(icon, color: FluxColors.primaryBlue),
|
leading: Icon(icon, color: FluxColors.primaryBlue),
|
||||||
@@ -84,6 +98,7 @@ class SettingsView extends StatelessWidget {
|
|||||||
Icons.chevron_right,
|
Icons.chevron_right,
|
||||||
color: Theme.of(context).textTheme.bodyMedium?.color,
|
color: Theme.of(context).textTheme.bodyMedium?.color,
|
||||||
),
|
),
|
||||||
|
onTap: () => Navigator.of(context).push(route),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
35
lib/ui/settings/theme_settings_view.dart
Normal file
35
lib/ui/settings/theme_settings_view.dart
Normal file
@@ -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<ThemeBloc, ThemeState>(
|
||||||
|
builder: (context, state) => RadioGroup<AppThemeMode>(
|
||||||
|
groupValue: state.currentTheme,
|
||||||
|
onChanged: (newTheme) {
|
||||||
|
if (newTheme != null) {
|
||||||
|
context.read<ThemeBloc>().add(ChangeThemeEvent(newTheme));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Column(
|
||||||
|
children: AppThemeMode.values.map((theme) {
|
||||||
|
return RadioListTile<AppThemeMode>(
|
||||||
|
title: Text(theme.label),
|
||||||
|
secondary: Icon(theme.icon, color: context.accent),
|
||||||
|
value: theme,
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
35
macos/Podfile.lock
Normal file
35
macos/Podfile.lock
Normal file
@@ -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
|
||||||
@@ -27,6 +27,8 @@
|
|||||||
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
||||||
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
||||||
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 */; };
|
||||||
|
BC7B14BF366111D5491A16DE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C1847336C291D2358A2A03 /* Pods_Runner.framework */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@@ -64,7 +66,7 @@
|
|||||||
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
|
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
|
||||||
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
|
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
|
||||||
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
|
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
|
||||||
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 = "<group>"; };
|
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
|
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
|
||||||
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||||
@@ -76,8 +78,16 @@
|
|||||||
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
|
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
|
||||||
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
|
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
|
||||||
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
|
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
|
||||||
|
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 = "<group>"; };
|
||||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
||||||
|
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 = "<group>"; };
|
||||||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
||||||
|
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 = "<group>"; };
|
||||||
|
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 = "<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>"; };
|
||||||
|
F9C1847336C291D2358A2A03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@@ -85,6 +95,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
47B861EC08643C31319819EE /* Pods_RunnerTests.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -92,6 +103,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
BC7B14BF366111D5491A16DE /* Pods_Runner.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -125,6 +137,7 @@
|
|||||||
331C80D6294CF71000263BE5 /* RunnerTests */,
|
331C80D6294CF71000263BE5 /* RunnerTests */,
|
||||||
33CC10EE2044A3C60003C045 /* Products */,
|
33CC10EE2044A3C60003C045 /* Products */,
|
||||||
D73912EC22F37F3D000D13A0 /* Frameworks */,
|
D73912EC22F37F3D000D13A0 /* Frameworks */,
|
||||||
|
BABCD4273B81B107DD58605D /* Pods */,
|
||||||
);
|
);
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
@@ -172,9 +185,25 @@
|
|||||||
path = Runner;
|
path = Runner;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
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 = "<group>";
|
||||||
|
};
|
||||||
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
|
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
F9C1847336C291D2358A2A03 /* Pods_Runner.framework */,
|
||||||
|
9AD6F0633B38D7C51DB0A44A /* Pods_RunnerTests.framework */,
|
||||||
);
|
);
|
||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -186,6 +215,7 @@
|
|||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
|
buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
E6E9E706A27356DCD7D737C0 /* [CP] Check Pods Manifest.lock */,
|
||||||
331C80D1294CF70F00263BE5 /* Sources */,
|
331C80D1294CF70F00263BE5 /* Sources */,
|
||||||
331C80D2294CF70F00263BE5 /* Frameworks */,
|
331C80D2294CF70F00263BE5 /* Frameworks */,
|
||||||
331C80D3294CF70F00263BE5 /* Resources */,
|
331C80D3294CF70F00263BE5 /* Resources */,
|
||||||
@@ -204,11 +234,13 @@
|
|||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
|
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
A0D9F8FEAD5980B2EFE46DAF /* [CP] Check Pods Manifest.lock */,
|
||||||
33CC10E92044A3C60003C045 /* Sources */,
|
33CC10E92044A3C60003C045 /* Sources */,
|
||||||
33CC10EA2044A3C60003C045 /* Frameworks */,
|
33CC10EA2044A3C60003C045 /* Frameworks */,
|
||||||
33CC10EB2044A3C60003C045 /* Resources */,
|
33CC10EB2044A3C60003C045 /* Resources */,
|
||||||
33CC110E2044A8840003C045 /* Bundle Framework */,
|
33CC110E2044A8840003C045 /* Bundle Framework */,
|
||||||
3399D490228B24CF009A79C7 /* ShellScript */,
|
3399D490228B24CF009A79C7 /* ShellScript */,
|
||||||
|
E13C7961A1538309550A7824 /* [CP] Embed Pods Frameworks */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@@ -329,6 +361,67 @@
|
|||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
|
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 */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
@@ -380,6 +473,7 @@
|
|||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
331C80DB294CF71000263BE5 /* Debug */ = {
|
331C80DB294CF71000263BE5 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 64CEA5375FF158D0C9BAC5E3 /* Pods-RunnerTests.debug.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
@@ -394,6 +488,7 @@
|
|||||||
};
|
};
|
||||||
331C80DC294CF71000263BE5 /* Release */ = {
|
331C80DC294CF71000263BE5 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = EF12DE99A4F7A47E54D9243F /* Pods-RunnerTests.release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
@@ -408,6 +503,7 @@
|
|||||||
};
|
};
|
||||||
331C80DD294CF71000263BE5 /* Profile */ = {
|
331C80DD294CF71000263BE5 /* Profile */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7B4E4499661A94FDCB94A882 /* Pods-RunnerTests.profile.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
|||||||
@@ -4,4 +4,7 @@
|
|||||||
<FileRef
|
<FileRef
|
||||||
location = "group:Runner.xcodeproj">
|
location = "group:Runner.xcodeproj">
|
||||||
</FileRef>
|
</FileRef>
|
||||||
|
<FileRef
|
||||||
|
location = "group:Pods/Pods.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
|
|||||||
@@ -8,5 +8,7 @@
|
|||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.network.server</key>
|
<key>com.apple.security.network.server</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>com.apple.security.network.client</key>
|
||||||
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@@ -4,5 +4,7 @@
|
|||||||
<dict>
|
<dict>
|
||||||
<key>com.apple.security.app-sandbox</key>
|
<key>com.apple.security.app-sandbox</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>com.apple.security.network.client</key>
|
||||||
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
Reference in New Issue
Block a user