(
70 | builder: (context, soundProvider, child) {
71 | return GestureDetector(
72 | onTap: () {
73 | _isPlaying
74 | ? soundProvider.dashIdleSound()
75 | : soundProvider.dashDanceSound();
76 | _isPlaying
77 | ? _controller2.isActive = false
78 | : _controller2.isActive = true;
79 | },
80 | child: SizedBox(
81 | height: ResponsiveValue(
82 | context,
83 | defaultValue: 200.0,
84 | valueWhen: const [
85 | Condition.smallerThan(name: MOBILE, value: 160.0),
86 | ],
87 | ).value,
88 | width: ResponsiveValue(
89 | context,
90 | defaultValue: 200.0,
91 | valueWhen: const [
92 | Condition.smallerThan(name: MOBILE, value: 160.0),
93 | ],
94 | ).value,
95 | child: RiveAnimation.asset(
96 | 'assets/animation/dash.riv',
97 | animations: const ['idle'],
98 | controllers: [_controller1, _controller2],
99 | ),
100 | ),
101 | );
102 | },
103 | ),
104 | ],
105 | );
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # Flutter Puzzle Hack
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | This game is for the "Flutter Puzzle Hack" contest, 2022. It is a simple slide puzzle game, where the player has to arrange the squares into sorted order. This game is built using the Flutter framework, which is a cross-platform framework for developing apps for multiple devices.
14 | Right now, this app has been tested on iOS, Android, and Google Chrome browsers.
15 |
16 |
17 | In addition, it is using some other third-party packages from the open-source community. Thanks to those open-source developers for their amazing packages. Those packages are:
18 |
19 |
20 | ```yaml
21 | audioplayers: ^0.20.1 // for playing sound
22 | clay_containers: ^0.3.2 // for neumorphic design
23 | day_night_switcher: ^0.2.0+1 // for animated switch
24 | font_awesome_flutter: ^9.2.0 // for icons
25 | google_fonts: ^2.3.1 // for fonts
26 | provider: ^6.0.2 // for app state-management
27 | responsive_framework: ^0.1.7 // for responsive UI
28 | responsive_sizer: ^3.0.5+1 // for responsive container
29 | rive: ^0.8.1 // for controlling rive animation file
30 | ```
31 |
32 | ## Playing Guide
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | The above picture is showing the "Puzzle Hack" game running on an android device. It's also presenting all the functionality of the game. Like:
44 |
45 |
46 | 1. Dark/Light mode switch
47 | 2. Sample image of a sorted board
48 | 3. Total number of 'Moves'
49 | 4. 'Reset' button
50 | 5. Dropdown menu for 'Mute' & and 'Info' functionality
51 | 6. Animated 'Dash'. Click it for the magic!
52 | 7. Timer
53 |
54 |
55 |
56 |
57 | ## Puzzle Hack Demo
58 |
59 |
60 |
61 | Light Mode (iPhone 8 Simulator)
62 | Dark Mode (iPhone 8 Simulator)
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | Google Chrome
73 |
74 |
75 |
76 |
77 |
78 |
79 | ## File Pattern Inside The `'lib'` Folder
80 |
81 | ```
82 | lib/
83 | ├── app/
84 | │ ├── provider/
85 | │ │ ├── appinfo_provider.dart
86 | │ │ ├── sound_provider.dart
87 | │ │ └── theme_provider.dart
88 | │ ├── view/
89 | │ │ └── puzzle_game.dart
90 | │ └── widget/
91 | │ ├── util/
92 | │ │ ├── design/
93 | │ │ │ ├── arrow_clipper.dart
94 | │ │ │ └── neumorphic_button.dart
95 | │ │ ├── dropdown_menu.dart
96 | │ │ ├── grid_container.dart
97 | │ │ ├── move.dart
98 | │ │ ├── reset_button.dart
99 | │ │ └── timer.dart
100 | │ ├── grid.dart
101 | │ ├── menu_items.dart
102 | │ ├── picture_and_animation_row.dart
103 | │ ├── top_appbar.dart
104 | │ └── winning_card.dart
105 | ├── generated_plugin_registrant.dart
106 | └── main.dart
107 | ```
108 |
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Puzzle Hack
28 |
29 |
30 |
31 |
34 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/lib/app/provider/sound_provider.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:audioplayers/audioplayers.dart';
3 |
4 | /// Provides [Sound] to all the custom widgets of the app.
5 | class SoundProvider extends ChangeNotifier {
6 | final AudioCache audioCache = AudioCache(prefix: 'assets/audio/');
7 | AudioPlayer? player;
8 | bool _isMute = false;
9 | bool get isMute => _isMute;
10 |
11 | //***** S L I D I N G S O U N D ****//
12 | playSlidingSound() async {
13 | player = _isMute
14 | ? await audioCache.play(
15 | 'mute.wav',
16 | mode: PlayerMode.LOW_LATENCY,
17 | )
18 | : await audioCache.play(
19 | 'sliding_sound.wav',
20 | mode: PlayerMode.LOW_LATENCY,
21 | );
22 | notifyListeners();
23 | }
24 |
25 | //***** F A I L S L I D I N G S O U N D ****//
26 | playFailSlidingSound() async {
27 | player = _isMute
28 | ? await audioCache.play(
29 | 'mute.wav',
30 | mode: PlayerMode.LOW_LATENCY,
31 | )
32 | : await audioCache.play(
33 | 'fail_sliding_sound.wav',
34 | mode: PlayerMode.LOW_LATENCY,
35 | );
36 | notifyListeners();
37 | }
38 |
39 | //***** R E S E T B U T T O N S O U N D ****//
40 | playResetSound() async {
41 | player = _isMute
42 | ? await audioCache.play(
43 | 'mute.wav',
44 | mode: PlayerMode.LOW_LATENCY,
45 | )
46 | : await audioCache.play(
47 | 'reset_sound.wav',
48 | mode: PlayerMode.LOW_LATENCY,
49 | );
50 | notifyListeners();
51 | }
52 |
53 | //***** D A S H S O U N D - D A N C I N G ****//
54 | dashDanceSound() async {
55 | player = _isMute
56 | ? await audioCache.play(
57 | 'mute.wav',
58 | mode: PlayerMode.LOW_LATENCY,
59 | )
60 | : await audioCache.play(
61 | 'dash_dance_sound.wav',
62 | mode: PlayerMode.LOW_LATENCY,
63 | );
64 | notifyListeners();
65 | }
66 |
67 | //***** D A S H S O U N D - I D L E ****//
68 | dashIdleSound() async {
69 | player = _isMute
70 | ? await audioCache.play(
71 | 'mute.wav',
72 | mode: PlayerMode.LOW_LATENCY,
73 | )
74 | : await audioCache.play(
75 | 'dash_idle_sound.wav',
76 | mode: PlayerMode.LOW_LATENCY,
77 | );
78 | notifyListeners();
79 | }
80 |
81 | //***** M U T E S O U N D ****//
82 | stopSound() {
83 | _isMute = !_isMute;
84 | notifyListeners();
85 | }
86 |
87 | //***** D A R K M O D E O N S O U N D ****//
88 | playDarkSound() async {
89 | player = _isMute
90 | ? await audioCache.play(
91 | 'mute.wav',
92 | mode: PlayerMode.LOW_LATENCY,
93 | )
94 | : await audioCache.play(
95 | 'owl_dark.wav',
96 | mode: PlayerMode.LOW_LATENCY,
97 | );
98 | notifyListeners();
99 | }
100 |
101 | //***** L I G H T M O D E O N S O U N D ****//
102 | playLightSound() async {
103 | player = _isMute
104 | ? await audioCache.play(
105 | 'mute.wav',
106 | mode: PlayerMode.LOW_LATENCY,
107 | )
108 | : await audioCache.play(
109 | 'owl_light.wav',
110 | mode: PlayerMode.LOW_LATENCY,
111 | );
112 | notifyListeners();
113 | }
114 |
115 | //***** D R O P D O W N M E N U O P E N ****//
116 | playMenuOpen() async {
117 | player = _isMute
118 | ? await audioCache.play(
119 | 'mute.wav',
120 | mode: PlayerMode.LOW_LATENCY,
121 | )
122 | : await audioCache.play(
123 | 'dropdown_open.wav',
124 | mode: PlayerMode.LOW_LATENCY,
125 | );
126 | notifyListeners();
127 | }
128 |
129 | //***** D R O P D O W N M E N U C L O S E ****//
130 | playMenuClose() async {
131 | player = _isMute
132 | ? await audioCache.play(
133 | 'mute.wav',
134 | mode: PlayerMode.LOW_LATENCY,
135 | )
136 | : await audioCache.play(
137 | 'dropdown_close.wav',
138 | mode: PlayerMode.LOW_LATENCY,
139 | );
140 | notifyListeners();
141 | }
142 | }
143 |
--------------------------------------------------------------------------------
/lib/app/widget/util/dropdown_menu.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 |
4 | import '../../provider/appinfo_provider.dart';
5 | import '../../provider/sound_provider.dart';
6 | import 'design/arrow_clipper.dart';
7 |
8 | class CustomDropdownMenu extends StatefulWidget {
9 | final List icons;
10 | final BorderRadius? borderRadius;
11 | final Color backgroundColor;
12 | final ValueChanged? onChange;
13 | const CustomDropdownMenu({
14 | Key? key,
15 | required this.icons,
16 | required this.borderRadius,
17 | required this.backgroundColor,
18 | this.onChange,
19 | }) : super(key: key);
20 |
21 | @override
22 | State createState() => _CustomDropdownMenuState();
23 | }
24 |
25 | class _CustomDropdownMenuState extends State
26 | with SingleTickerProviderStateMixin {
27 | GlobalKey? _key;
28 | bool isMenuOpen = false;
29 | late Offset buttonPosition;
30 | late Size buttonSize;
31 | late OverlayEntry _overlayEntry;
32 | BorderRadius? _borderRadius;
33 | late AnimationController _animationController;
34 |
35 | @override
36 | void initState() {
37 | _animationController = AnimationController(
38 | vsync: this,
39 | duration: const Duration(milliseconds: 600),
40 | );
41 | _borderRadius = widget.borderRadius ?? BorderRadius.circular(4.0);
42 | _key = LabeledGlobalKey("button_icon");
43 |
44 | super.initState();
45 | }
46 |
47 | @override
48 | void dispose() {
49 | _animationController.dispose();
50 | super.dispose();
51 | }
52 |
53 | findButton() {
54 | RenderBox renderBox = _key!.currentContext!.findRenderObject() as RenderBox;
55 | buttonSize = renderBox.size;
56 | buttonPosition = renderBox.localToGlobal(Offset.zero);
57 | }
58 |
59 | void closeMenu() {
60 | _overlayEntry.remove();
61 | _animationController.reverse();
62 | isMenuOpen = !isMenuOpen;
63 | }
64 |
65 | void openMenu() {
66 | findButton();
67 | _animationController.forward();
68 | _overlayEntry = _overlayEntryBuilder();
69 | Overlay.of(context).insert(_overlayEntry);
70 | isMenuOpen = !isMenuOpen;
71 | }
72 |
73 | @override
74 | Widget build(BuildContext context) {
75 | return Container(
76 | key: _key,
77 | decoration: BoxDecoration(borderRadius: _borderRadius),
78 | // Consumer provides playMenuClose() & playMenuOpen()
79 | // from SoundProvider
80 | child: Consumer(
81 | builder: (context, soundProvider, child) {
82 | return IconButton(
83 | splashRadius: 1,
84 | icon: AnimatedIcon(
85 | icon: AnimatedIcons.menu_close,
86 | progress: _animationController,
87 | ),
88 | iconSize: 35.0,
89 | onPressed: () {
90 | if (isMenuOpen) {
91 | soundProvider.playMenuClose();
92 | closeMenu();
93 | } else {
94 | soundProvider.playMenuOpen();
95 | openMenu();
96 | }
97 | },
98 | );
99 | },
100 | ),
101 | );
102 | }
103 |
104 | OverlayEntry _overlayEntryBuilder() {
105 | return OverlayEntry(
106 | builder: (context) {
107 | return Positioned(
108 | top: buttonPosition.dy + buttonSize.height - 13.0,
109 | left: buttonPosition.dx,
110 | width: buttonSize.width,
111 | child: Stack(
112 | children: [
113 | Align(
114 | alignment: Alignment.topCenter,
115 | child: Material(
116 | elevation: 10.0,
117 | color: Colors.transparent,
118 | shadowColor: Theme.of(context).shadowColor,
119 | shape: ShapeBorder.lerp(
120 | const CircleBorder(),
121 | const CircleBorder(),
122 | 1.0,
123 | ),
124 | child: ClipPath(
125 | clipper: ArrowClipper(),
126 | child: Container(
127 | width: 17.0,
128 | height: 17.0,
129 | color: widget.backgroundColor,
130 | ),
131 | ),
132 | ),
133 | ),
134 | Padding(
135 | padding: const EdgeInsets.only(top: 15.0),
136 | child: Material(
137 | elevation: 10.0,
138 | color: Colors.transparent,
139 | shadowColor: Theme.of(context).shadowColor,
140 | child: Container(
141 | height: widget.icons.length * buttonSize.height,
142 | decoration: BoxDecoration(
143 | color: widget.backgroundColor,
144 | borderRadius: _borderRadius,
145 | ),
146 | child: Column(
147 | mainAxisSize: MainAxisSize.min,
148 | children: List.generate(
149 | widget.icons.length,
150 | (index) {
151 | return onSelected(index);
152 | },
153 | ),
154 | ),
155 | ),
156 | ),
157 | ),
158 | ],
159 | ),
160 | );
161 | },
162 | );
163 | }
164 |
165 | Consumer onSelected(int index) {
166 | return Consumer(
167 | builder: (context, soundProvider, child) {
168 | return Consumer(
169 | builder: (context, appInfoProvider, child) {
170 | return GestureDetector(
171 | onTap: () {
172 | switch (index) {
173 | case 0:
174 | soundProvider.stopSound();
175 | break;
176 |
177 | case 1:
178 | showAboutDialog(
179 | context: context,
180 | applicationIcon: appInfoProvider.applicationIcon,
181 | applicationName: appInfoProvider.applicationName,
182 | applicationVersion: appInfoProvider.applicationVersion,
183 | applicationLegalese: appInfoProvider.applicationLegalese,
184 | children: appInfoProvider.children,
185 | );
186 | break;
187 | }
188 | closeMenu();
189 | },
190 | child: SizedBox(
191 | width: buttonSize.width,
192 | height: buttonSize.height,
193 | child: widget.icons[index],
194 | ),
195 | );
196 | },
197 | );
198 | },
199 | );
200 | }
201 | }
202 |
--------------------------------------------------------------------------------
/lib/app/view/puzzle_game.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'package:rive/rive.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:provider/provider.dart';
5 |
6 | import '/app/widget/grid.dart';
7 | import '../widget/menu_items.dart';
8 | import '../widget/winning_card.dart';
9 | import '/app/widget/top_appbar.dart';
10 | import '/app/provider/sound_provider.dart';
11 | import '../widget/picture_and_animation_row.dart';
12 |
13 | ///
14 | /// This is the [primary] dart file of the Puzzle Hack game
15 | /// it's using all the custom widgets like: `TopAppBar`, `WinningCard`,
16 | /// `SamplePictureAndAnimationRow` etc., and also has a `Rive` animation
17 | /// of flutter mascot [Dash].
18 | /// In addition to that, it is using [SoundProvider] class, which is managed
19 | /// by a third-party package called, `provider`
20 | ///
21 | ///
22 | class PuzzleGame extends StatefulWidget {
23 | const PuzzleGame({Key? key}) : super(key: key);
24 |
25 | @override
26 | State createState() => _PuzzleGameState();
27 | }
28 |
29 | class _PuzzleGameState extends State {
30 | late RiveAnimationController _controller1;
31 | late RiveAnimationController _controller2;
32 | bool _isPlaying = false;
33 | var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
34 | int move = 0;
35 |
36 | static const duration = Duration(seconds: 1);
37 | int secondsPassed = 0;
38 | bool isActive = false;
39 | Timer? timer;
40 |
41 | @override
42 | void initState() {
43 | super.initState();
44 | numbers.shuffle();
45 |
46 | /// Controller for controlling [dash] eye ball
47 | ///
48 | _controller1 = OneShotAnimation(
49 | 'lookUp',
50 | autoplay: false,
51 | onStop: () => setState(() => _isPlaying = false),
52 | onStart: () => setState(() => _isPlaying = true),
53 | );
54 |
55 | /// Controller for controlling [dash] dance
56 | ///
57 | _controller2 = OneShotAnimation(
58 | 'slowDance',
59 | autoplay: false,
60 | onStop: () => setState(() => _isPlaying = false),
61 | onStart: () => setState(() => _isPlaying = true),
62 | );
63 | }
64 |
65 | @override
66 | Widget build(BuildContext context) {
67 | var deviceWidth = MediaQuery.of(context).size.width;
68 | timer ??= Timer.periodic(
69 | duration,
70 | (Timer t) {
71 | startTime();
72 | },
73 | );
74 | return Scaffold(
75 | /// [TopAppBar] is a Custom Widget, which receives a
76 | /// animation controller i.e. `_controller1`
77 | /// for controlling dash [eye] ball.
78 | ///
79 | appBar: TopAppBar(controller: _controller1),
80 | body: SafeArea(
81 | child: SingleChildScrollView(
82 | controller: null,
83 | child: Center(
84 | child: SizedBox(
85 | width: 800.0,
86 | child: Column(
87 | mainAxisAlignment: MainAxisAlignment.end,
88 | children: [
89 | /// It is a [Custom Widget], which receives a
90 | /// `boolean`value and two animation controllers
91 | /// i e.`_controller1, _controller2`, for controlling
92 | /// dash [eye] and [dance]
93 | ///
94 | SamplePictureAndAnimationRow(
95 | isPlaying: _isPlaying,
96 | controller1: _controller1,
97 | controller2: _controller2,
98 | ),
99 | Center(
100 | child: Column(
101 | children: [
102 | MenuItems(
103 | reset: reset,
104 | move: move,
105 | secondsPassed: secondsPassed,
106 | ),
107 | SizedBox(height: deviceWidth <= 380 ? 0.0 : 10.0),
108 |
109 | /// Provides sound of [sliding] and if the
110 | /// slide fail, then an [error] sound
111 | ///
112 | Consumer(
113 | builder: (context, soundProvider, child) {
114 | return clickGrid(soundProvider);
115 | },
116 | ),
117 | ],
118 | ),
119 | ),
120 | ],
121 | ),
122 | ),
123 | ),
124 | ),
125 | ),
126 | );
127 | }
128 |
129 | /// This method will check the user's [click] on the puzzle grid
130 | /// and change the state accordingly
131 | ///
132 | Grid clickGrid(SoundProvider soundProvider) {
133 | return Grid(
134 | numbers: numbers,
135 | clickGrid: (index) {
136 | if (secondsPassed == 0) {
137 | isActive = true;
138 | }
139 | if (index - 1 >= 0 && numbers[index - 1] == 0 && index % 4 != 0 ||
140 | index + 1 < 16 && numbers[index + 1] == 0 && (index + 1) % 4 != 0 ||
141 | (index - 4 >= 0 && numbers[index - 4] == 0) ||
142 | (index + 4 < 16 && numbers[index + 4] == 0)) {
143 | setState(() {
144 | move++;
145 | soundProvider.playSlidingSound();
146 | numbers[numbers.indexOf(0)] = numbers[index];
147 | numbers[index] = 0;
148 | });
149 | } else {
150 | soundProvider.playFailSlidingSound();
151 | }
152 | checkWin();
153 | },
154 | );
155 | }
156 |
157 | /// This method will start the [timer]
158 | ///
159 | void startTime() {
160 | if (isActive) {
161 | setState(() {
162 | secondsPassed = secondsPassed + 1;
163 | });
164 | }
165 | }
166 |
167 | /// This method will reset the [puzzle board]
168 | ///
169 | void reset() {
170 | setState(() {
171 | numbers.shuffle();
172 | move = 0;
173 | secondsPassed = 0;
174 | isActive = false;
175 | });
176 | }
177 |
178 | /// This method will run a loop to check whether the
179 | /// number are [sorted] or not, and returns a `boolean` value
180 | ///
181 | bool isSorted(List list) {
182 | int prev = list.first;
183 | for (var i = 1; i < list.length - 1; i++) {
184 | int next = list[i];
185 | if (prev > next) return false;
186 | prev = next;
187 | }
188 | return true;
189 | }
190 |
191 | /// This method will display a custom dialog [WinningCard]
192 | /// which initiate if the numbers are sorted correctly
193 | ///
194 | void checkWin() {
195 | if (isSorted(numbers)) {
196 | isActive = false;
197 | showDialog(
198 | context: context,
199 | builder: (BuildContext context) {
200 | return Dialog(
201 | shape: RoundedRectangleBorder(
202 | borderRadius: BorderRadius.circular(15.0),
203 | ),
204 | child: const WinningCard(),
205 | );
206 | },
207 | );
208 | }
209 | }
210 | }
211 |
--------------------------------------------------------------------------------
/lib/app/widget/top_appbar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/cupertino.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:google_fonts/google_fonts.dart';
4 | import 'package:provider/provider.dart';
5 | // import 'package:day_night_switcher/day_night_switcher.dart';
6 | import 'package:responsive_framework/responsive_framework.dart';
7 | import 'package:rive/rive.dart';
8 |
9 | import '../provider/appinfo_provider.dart';
10 | import '../provider/sound_provider.dart';
11 | import '../provider/theme_provider.dart';
12 | import 'util/dropdown_menu.dart';
13 |
14 | // ignore: must_be_immutable
15 | class TopAppBar extends StatefulWidget implements PreferredSizeWidget {
16 | RiveAnimationController controller;
17 | TopAppBar({Key? key, required this.controller}) : super(key: key);
18 |
19 | @override
20 | State createState() => _TopAppBarState();
21 |
22 | @override
23 | Size get preferredSize => const Size.fromHeight(kToolbarHeight);
24 | }
25 |
26 | class _TopAppBarState extends State {
27 | bool isMute = false;
28 | bool switchValue = false;
29 | @override
30 | Widget build(BuildContext context) {
31 | return AppBar(
32 | leading: Consumer(
33 | builder: (context, themeProvider, child) {
34 | return Consumer(
35 | builder: (context, soundProvider, child) {
36 | return Stack(
37 | children: [
38 | ResponsiveVisibility(
39 | visible: false,
40 | visibleWhen: const [Condition.smallerThan(name: MOBILE)],
41 | // child: DayNightSwitcherIcon(
42 | // dayBackgroundColor: const Color(0xFF0C91D6),
43 | // isDarkModeEnabled: themeProvider.darkTheme,
44 | // onStateChanged: (value) {
45 | // widget.controller.isActive = true;
46 | // themeProvider.darkTheme
47 | // ? soundProvider.playLightSound()
48 | // : soundProvider.playDarkSound();
49 | // themeProvider.toggleTheme();
50 | // },
51 | // ),
52 | child: Padding(
53 | padding: const EdgeInsets.only(left: 10, top: 10),
54 | child: CupertinoSwitch(
55 | value: switchValue,
56 | onChanged: (newValue) {
57 | widget.controller.isActive = true;
58 | themeProvider.darkTheme
59 | ? soundProvider.playLightSound()
60 | : soundProvider.playDarkSound();
61 | themeProvider.toggleTheme();
62 | switchValue = !switchValue;
63 | },
64 | ),
65 | ),
66 | ),
67 | ResponsiveVisibility(
68 | visible: false,
69 | visibleWhen: const [Condition.largerThan(name: 'ExSmall')],
70 | child: Padding(
71 | padding: const EdgeInsets.only(left: 5.0),
72 | child: Row(
73 | mainAxisAlignment: MainAxisAlignment.start,
74 | children: [
75 | SizedBox(
76 | width: 50.0,
77 | // child: DayNightSwitcher(
78 | // dayBackgroundColor: const Color(0xFF0C91D6),
79 | // isDarkModeEnabled: themeProvider.darkTheme,
80 | // onStateChanged: (value) {
81 | // widget.controller.isActive = true;
82 | // themeProvider.darkTheme
83 | // ? soundProvider.playLightSound()
84 | // : soundProvider.playDarkSound();
85 | // themeProvider.toggleTheme();
86 | // },
87 | // ),
88 | child: Padding(
89 | padding: const EdgeInsets.only(top: 5.0),
90 | child: Switch.adaptive(
91 | value: switchValue,
92 | onChanged: (newValue) {
93 | widget.controller.isActive = true;
94 | themeProvider.darkTheme
95 | ? soundProvider.playLightSound()
96 | : soundProvider.playDarkSound();
97 | themeProvider.toggleTheme();
98 | switchValue = !switchValue;
99 | },
100 | ),
101 | ),
102 | ),
103 | ],
104 | ),
105 | ),
106 | ),
107 | ],
108 | );
109 | },
110 | );
111 | },
112 | ),
113 | title: Text(
114 | 'Puzzle Hack',
115 | style: GoogleFonts.alata(
116 | textStyle: const TextStyle(letterSpacing: 2.0),
117 | ),
118 | ),
119 | centerTitle: true,
120 | actions: [
121 | ResponsiveVisibility(
122 | visible: false,
123 | visibleWhen: const [Condition.smallerThan(name: TABLET)],
124 | child: CustomDropdownMenu(
125 | borderRadius: BorderRadius.circular(10.0),
126 | backgroundColor: Theme.of(context).hoverColor,
127 | icons: [
128 | isMute
129 | ? const Icon(Icons.volume_off, size: 30.0)
130 | : const Icon(Icons.volume_up, size: 30.0),
131 | const Icon(Icons.info_outline_rounded, size: 30.0),
132 | ],
133 | onChange: (index) {},
134 | ),
135 | ),
136 | ResponsiveVisibility(
137 | visible: false,
138 | visibleWhen: const [Condition.largerThan(name: MOBILE)],
139 | child: Padding(
140 | padding: const EdgeInsets.only(bottom: 10.0),
141 | child: Row(
142 | children: [
143 | Consumer(
144 | builder: (context, soundProvider, child) {
145 | return IconButton(
146 | onPressed: () {
147 | soundProvider.playMenuOpen();
148 | soundProvider.stopSound();
149 | setState(() {
150 | isMute = soundProvider.isMute;
151 | });
152 | },
153 | icon: isMute
154 | ? const Icon(Icons.volume_off, size: 40.0)
155 | : const Icon(Icons.volume_up, size: 40.0),
156 | );
157 | },
158 | ),
159 | const SizedBox(width: 10.0),
160 | Consumer(
161 | builder: (context, soundProvider, child) {
162 | return Consumer(
163 | builder: (context, appInfoProvider, child) {
164 | return IconButton(
165 | onPressed: () {
166 | soundProvider.playMenuOpen();
167 | showAboutDialog(
168 | context: context,
169 | applicationIcon: appInfoProvider.applicationIcon,
170 | applicationName: appInfoProvider.applicationName,
171 | applicationVersion:
172 | appInfoProvider.applicationVersion,
173 | applicationLegalese:
174 | appInfoProvider.applicationLegalese,
175 | children: appInfoProvider.children,
176 | );
177 | },
178 | icon: const Icon(Icons.info_outline, size: 40.0),
179 | );
180 | },
181 | );
182 | },
183 | ),
184 | const SizedBox(width: 15.0),
185 | ],
186 | ),
187 | ),
188 | ),
189 | ],
190 | );
191 | }
192 | }
193 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | async:
5 | dependency: transitive
6 | description:
7 | name: async
8 | sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
9 | url: "https://pub.dev"
10 | source: hosted
11 | version: "2.11.0"
12 | audioplayers:
13 | dependency: "direct main"
14 | description:
15 | name: audioplayers
16 | sha256: a565e7e3e8a21a823b8cd7fed0bde1eb3796a96b373374be557adecfb511fa6b
17 | url: "https://pub.dev"
18 | source: hosted
19 | version: "0.20.1"
20 | boolean_selector:
21 | dependency: transitive
22 | description:
23 | name: boolean_selector
24 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
25 | url: "https://pub.dev"
26 | source: hosted
27 | version: "2.1.1"
28 | characters:
29 | dependency: transitive
30 | description:
31 | name: characters
32 | sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
33 | url: "https://pub.dev"
34 | source: hosted
35 | version: "1.3.0"
36 | charcode:
37 | dependency: transitive
38 | description:
39 | name: charcode
40 | sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306
41 | url: "https://pub.dev"
42 | source: hosted
43 | version: "1.3.1"
44 | clay_containers:
45 | dependency: "direct main"
46 | description:
47 | name: clay_containers
48 | sha256: "8e4b2c5b634d433bb81b2ac8b668a1049959c8631bf281ca42eef3f994a8be5e"
49 | url: "https://pub.dev"
50 | source: hosted
51 | version: "0.3.2"
52 | clock:
53 | dependency: transitive
54 | description:
55 | name: clock
56 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
57 | url: "https://pub.dev"
58 | source: hosted
59 | version: "1.1.1"
60 | collection:
61 | dependency: transitive
62 | description:
63 | name: collection
64 | sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
65 | url: "https://pub.dev"
66 | source: hosted
67 | version: "1.17.1"
68 | crypto:
69 | dependency: transitive
70 | description:
71 | name: crypto
72 | sha256: cf75650c66c0316274e21d7c43d3dea246273af5955bd94e8184837cd577575c
73 | url: "https://pub.dev"
74 | source: hosted
75 | version: "3.0.1"
76 | cupertino_icons:
77 | dependency: "direct main"
78 | description:
79 | name: cupertino_icons
80 | sha256: "1989d917fbe8e6b39806207df5a3fdd3d816cbd090fac2ce26fb45e9a71476e5"
81 | url: "https://pub.dev"
82 | source: hosted
83 | version: "1.0.4"
84 | day_night_switcher:
85 | dependency: "direct main"
86 | description:
87 | name: day_night_switcher
88 | sha256: "37354e55fdc0b49d1bea863121cc5a99ab952669f4f349cdd7fe78de2e62a72a"
89 | url: "https://pub.dev"
90 | source: hosted
91 | version: "0.2.0+1"
92 | fake_async:
93 | dependency: transitive
94 | description:
95 | name: fake_async
96 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
97 | url: "https://pub.dev"
98 | source: hosted
99 | version: "1.3.1"
100 | ffi:
101 | dependency: transitive
102 | description:
103 | name: ffi
104 | sha256: "35d0f481d939de0d640b3db9a7aa36a52cd22054a798a73b4f50bdad5ce12678"
105 | url: "https://pub.dev"
106 | source: hosted
107 | version: "1.1.2"
108 | file:
109 | dependency: transitive
110 | description:
111 | name: file
112 | sha256: b69516f2c26a5bcac4eee2e32512e1a5205ab312b3536c1c1227b2b942b5f9ad
113 | url: "https://pub.dev"
114 | source: hosted
115 | version: "6.1.2"
116 | flutter:
117 | dependency: "direct main"
118 | description: flutter
119 | source: sdk
120 | version: "0.0.0"
121 | flutter_lints:
122 | dependency: "direct dev"
123 | description:
124 | name: flutter_lints
125 | sha256: b543301ad291598523947dc534aaddc5aaad597b709d2426d3a0e0d44c5cb493
126 | url: "https://pub.dev"
127 | source: hosted
128 | version: "1.0.4"
129 | flutter_test:
130 | dependency: "direct dev"
131 | description: flutter
132 | source: sdk
133 | version: "0.0.0"
134 | flutter_web_plugins:
135 | dependency: transitive
136 | description: flutter
137 | source: sdk
138 | version: "0.0.0"
139 | font_awesome_flutter:
140 | dependency: "direct main"
141 | description:
142 | name: font_awesome_flutter
143 | sha256: "1f93e5799f0e6c882819e8393a05c6ca5226010f289190f2242ec19f3f0fdba5"
144 | url: "https://pub.dev"
145 | source: hosted
146 | version: "9.2.0"
147 | google_fonts:
148 | dependency: "direct main"
149 | description:
150 | name: google_fonts
151 | sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6"
152 | url: "https://pub.dev"
153 | source: hosted
154 | version: "4.0.4"
155 | graphs:
156 | dependency: transitive
157 | description:
158 | name: graphs
159 | sha256: ae0b3d956ff324c6f8671f08dcb2dbd71c99cdbf2aa3ca63a14190c47aa6679c
160 | url: "https://pub.dev"
161 | source: hosted
162 | version: "2.1.0"
163 | http:
164 | dependency: transitive
165 | description:
166 | name: http
167 | sha256: "2ed163531e071c2c6b7c659635112f24cb64ecbebf6af46b550d536c0b1aa112"
168 | url: "https://pub.dev"
169 | source: hosted
170 | version: "0.13.4"
171 | http_parser:
172 | dependency: transitive
173 | description:
174 | name: http_parser
175 | sha256: e362d639ba3bc07d5a71faebb98cde68c05bfbcfbbb444b60b6f60bb67719185
176 | url: "https://pub.dev"
177 | source: hosted
178 | version: "4.0.0"
179 | js:
180 | dependency: transitive
181 | description:
182 | name: js
183 | sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
184 | url: "https://pub.dev"
185 | source: hosted
186 | version: "0.6.7"
187 | lints:
188 | dependency: transitive
189 | description:
190 | name: lints
191 | sha256: a2c3d198cb5ea2e179926622d433331d8b58374ab8f29cdda6e863bd62fd369c
192 | url: "https://pub.dev"
193 | source: hosted
194 | version: "1.0.1"
195 | matcher:
196 | dependency: transitive
197 | description:
198 | name: matcher
199 | sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
200 | url: "https://pub.dev"
201 | source: hosted
202 | version: "0.12.15"
203 | material_color_utilities:
204 | dependency: transitive
205 | description:
206 | name: material_color_utilities
207 | sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
208 | url: "https://pub.dev"
209 | source: hosted
210 | version: "0.2.0"
211 | meta:
212 | dependency: transitive
213 | description:
214 | name: meta
215 | sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
216 | url: "https://pub.dev"
217 | source: hosted
218 | version: "1.9.1"
219 | nested:
220 | dependency: transitive
221 | description:
222 | name: nested
223 | sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
224 | url: "https://pub.dev"
225 | source: hosted
226 | version: "1.0.0"
227 | path:
228 | dependency: transitive
229 | description:
230 | name: path
231 | sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
232 | url: "https://pub.dev"
233 | source: hosted
234 | version: "1.8.3"
235 | path_provider:
236 | dependency: transitive
237 | description:
238 | name: path_provider
239 | sha256: e92dee4d38a9044605cb3fb253e9b46eb9375dfcad4515d0379b44ac90797568
240 | url: "https://pub.dev"
241 | source: hosted
242 | version: "2.0.9"
243 | path_provider_android:
244 | dependency: transitive
245 | description:
246 | name: path_provider_android
247 | sha256: "8b759fb6c74955931e87f550cc9e890b0cccb7ef8e710943973efeaa9695c54d"
248 | url: "https://pub.dev"
249 | source: hosted
250 | version: "2.0.12"
251 | path_provider_ios:
252 | dependency: transitive
253 | description:
254 | name: path_provider_ios
255 | sha256: "943b76e54056386432cdc2731cb303e2f580346b61a1fc73819721767be72309"
256 | url: "https://pub.dev"
257 | source: hosted
258 | version: "2.0.8"
259 | path_provider_linux:
260 | dependency: transitive
261 | description:
262 | name: path_provider_linux
263 | sha256: "1e109f4df28bd95eab71e323008b53d19c4d633bc1ab05b577518773474e9621"
264 | url: "https://pub.dev"
265 | source: hosted
266 | version: "2.1.5"
267 | path_provider_macos:
268 | dependency: transitive
269 | description:
270 | name: path_provider_macos
271 | sha256: "0adeb313e1f2c3fc52baeeee59b0fe9c2d1f7da56fd96a9234e1702ec653a453"
272 | url: "https://pub.dev"
273 | source: hosted
274 | version: "2.0.5"
275 | path_provider_platform_interface:
276 | dependency: transitive
277 | description:
278 | name: path_provider_platform_interface
279 | sha256: "3dc0d51b07f85fec3746d9f4e8d31c73bb173cafa2e763f03f8df2e8d1878882"
280 | url: "https://pub.dev"
281 | source: hosted
282 | version: "2.0.3"
283 | path_provider_windows:
284 | dependency: transitive
285 | description:
286 | name: path_provider_windows
287 | sha256: "366ad4e3541ea707f859e7148d4d5aba67d589d7936cee04a05c464a277eeb27"
288 | url: "https://pub.dev"
289 | source: hosted
290 | version: "2.0.5"
291 | platform:
292 | dependency: transitive
293 | description:
294 | name: platform
295 | sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
296 | url: "https://pub.dev"
297 | source: hosted
298 | version: "3.1.0"
299 | plugin_platform_interface:
300 | dependency: transitive
301 | description:
302 | name: plugin_platform_interface
303 | sha256: "075f927ebbab4262ace8d0b283929ac5410c0ac4e7fc123c76429564facfb757"
304 | url: "https://pub.dev"
305 | source: hosted
306 | version: "2.1.2"
307 | process:
308 | dependency: transitive
309 | description:
310 | name: process
311 | sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
312 | url: "https://pub.dev"
313 | source: hosted
314 | version: "4.2.4"
315 | provider:
316 | dependency: "direct main"
317 | description:
318 | name: provider
319 | sha256: "7896193cf752c40ba7f7732a95264319a787871e5d628225357f5c909182bc06"
320 | url: "https://pub.dev"
321 | source: hosted
322 | version: "6.0.2"
323 | responsive_framework:
324 | dependency: "direct main"
325 | description:
326 | name: responsive_framework
327 | sha256: "8817e519620fb32d4fa1e4a900a58c5555f35eb01e23bf47e61896b963995f53"
328 | url: "https://pub.dev"
329 | source: hosted
330 | version: "0.1.8"
331 | responsive_sizer:
332 | dependency: "direct main"
333 | description:
334 | name: responsive_sizer
335 | sha256: f809953211ba1533242c2e096e5f1ed94bba48c3868fe32f46490ead42a92854
336 | url: "https://pub.dev"
337 | source: hosted
338 | version: "3.0.8"
339 | rive:
340 | dependency: "direct main"
341 | description:
342 | name: rive
343 | sha256: f76eaf823d7b0c7d6640dbb10f499f387fa66d01aa711ce7a4533a4e90b48c4a
344 | url: "https://pub.dev"
345 | source: hosted
346 | version: "0.8.4"
347 | sky_engine:
348 | dependency: transitive
349 | description: flutter
350 | source: sdk
351 | version: "0.0.99"
352 | source_span:
353 | dependency: transitive
354 | description:
355 | name: source_span
356 | sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
357 | url: "https://pub.dev"
358 | source: hosted
359 | version: "1.9.1"
360 | stack_trace:
361 | dependency: transitive
362 | description:
363 | name: stack_trace
364 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
365 | url: "https://pub.dev"
366 | source: hosted
367 | version: "1.11.0"
368 | stream_channel:
369 | dependency: transitive
370 | description:
371 | name: stream_channel
372 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
373 | url: "https://pub.dev"
374 | source: hosted
375 | version: "2.1.1"
376 | string_scanner:
377 | dependency: transitive
378 | description:
379 | name: string_scanner
380 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
381 | url: "https://pub.dev"
382 | source: hosted
383 | version: "1.2.0"
384 | term_glyph:
385 | dependency: transitive
386 | description:
387 | name: term_glyph
388 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
389 | url: "https://pub.dev"
390 | source: hosted
391 | version: "1.2.1"
392 | test_api:
393 | dependency: transitive
394 | description:
395 | name: test_api
396 | sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
397 | url: "https://pub.dev"
398 | source: hosted
399 | version: "0.5.1"
400 | typed_data:
401 | dependency: transitive
402 | description:
403 | name: typed_data
404 | sha256: "53bdf7e979cfbf3e28987552fd72f637e63f3c8724c9e56d9246942dc2fa36ee"
405 | url: "https://pub.dev"
406 | source: hosted
407 | version: "1.3.0"
408 | uuid:
409 | dependency: transitive
410 | description:
411 | name: uuid
412 | sha256: "2469694ad079893e3b434a627970c33f2fa5adc46dfe03c9617546969a9a8afc"
413 | url: "https://pub.dev"
414 | source: hosted
415 | version: "3.0.6"
416 | vector_math:
417 | dependency: transitive
418 | description:
419 | name: vector_math
420 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
421 | url: "https://pub.dev"
422 | source: hosted
423 | version: "2.1.4"
424 | win32:
425 | dependency: transitive
426 | description:
427 | name: win32
428 | sha256: cde1e6d546d8cfd0b3c72bc6f29d980fa629d1cb107f38e2a039ca5d10d79e41
429 | url: "https://pub.dev"
430 | source: hosted
431 | version: "2.4.1"
432 | xdg_directories:
433 | dependency: transitive
434 | description:
435 | name: xdg_directories
436 | sha256: "060b6e1c891d956f72b5ac9463466c37cce3fa962a921532fc001e86fe93438e"
437 | url: "https://pub.dev"
438 | source: hosted
439 | version: "0.2.0+1"
440 | sdks:
441 | dart: ">=3.0.0-0 <4.0.0"
442 | flutter: ">=2.10.0-0"
443 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 32E8E3E6524FBACCF772017F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 385092219F62DAD1DF32AE38 /* Pods_Runner.framework */; };
12 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
13 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
14 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
15 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
16 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
17 | /* End PBXBuildFile section */
18 |
19 | /* Begin PBXCopyFilesBuildPhase section */
20 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
21 | isa = PBXCopyFilesBuildPhase;
22 | buildActionMask = 2147483647;
23 | dstPath = "";
24 | dstSubfolderSpec = 10;
25 | files = (
26 | );
27 | name = "Embed Frameworks";
28 | runOnlyForDeploymentPostprocessing = 0;
29 | };
30 | /* End PBXCopyFilesBuildPhase section */
31 |
32 | /* Begin PBXFileReference section */
33 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
34 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
35 | 385092219F62DAD1DF32AE38 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
36 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
37 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
38 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
39 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
40 | 93271461AC5C2E02ED748A2A /* 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 = ""; };
41 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
42 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
43 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
44 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
45 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
46 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
47 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
48 | BA8D9A952295DB6D138968B2 /* 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 = ""; };
49 | FBEF46AC673F2AE8B3EA9A51 /* 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 = ""; };
50 | /* End PBXFileReference section */
51 |
52 | /* Begin PBXFrameworksBuildPhase section */
53 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
54 | isa = PBXFrameworksBuildPhase;
55 | buildActionMask = 2147483647;
56 | files = (
57 | 32E8E3E6524FBACCF772017F /* Pods_Runner.framework in Frameworks */,
58 | );
59 | runOnlyForDeploymentPostprocessing = 0;
60 | };
61 | /* End PBXFrameworksBuildPhase section */
62 |
63 | /* Begin PBXGroup section */
64 | 28A8670ABECC9DA46128859A /* Frameworks */ = {
65 | isa = PBXGroup;
66 | children = (
67 | 385092219F62DAD1DF32AE38 /* Pods_Runner.framework */,
68 | );
69 | name = Frameworks;
70 | sourceTree = "";
71 | };
72 | 88D526C00B2CDFC82BF43CE9 /* Pods */ = {
73 | isa = PBXGroup;
74 | children = (
75 | FBEF46AC673F2AE8B3EA9A51 /* Pods-Runner.debug.xcconfig */,
76 | BA8D9A952295DB6D138968B2 /* Pods-Runner.release.xcconfig */,
77 | 93271461AC5C2E02ED748A2A /* Pods-Runner.profile.xcconfig */,
78 | );
79 | name = Pods;
80 | path = Pods;
81 | sourceTree = "";
82 | };
83 | 9740EEB11CF90186004384FC /* Flutter */ = {
84 | isa = PBXGroup;
85 | children = (
86 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
87 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
88 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
89 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
90 | );
91 | name = Flutter;
92 | sourceTree = "";
93 | };
94 | 97C146E51CF9000F007C117D = {
95 | isa = PBXGroup;
96 | children = (
97 | 9740EEB11CF90186004384FC /* Flutter */,
98 | 97C146F01CF9000F007C117D /* Runner */,
99 | 97C146EF1CF9000F007C117D /* Products */,
100 | 88D526C00B2CDFC82BF43CE9 /* Pods */,
101 | 28A8670ABECC9DA46128859A /* Frameworks */,
102 | );
103 | sourceTree = "";
104 | };
105 | 97C146EF1CF9000F007C117D /* Products */ = {
106 | isa = PBXGroup;
107 | children = (
108 | 97C146EE1CF9000F007C117D /* Runner.app */,
109 | );
110 | name = Products;
111 | sourceTree = "";
112 | };
113 | 97C146F01CF9000F007C117D /* Runner */ = {
114 | isa = PBXGroup;
115 | children = (
116 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
117 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
118 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
119 | 97C147021CF9000F007C117D /* Info.plist */,
120 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
121 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
122 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
123 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
124 | );
125 | path = Runner;
126 | sourceTree = "";
127 | };
128 | /* End PBXGroup section */
129 |
130 | /* Begin PBXNativeTarget section */
131 | 97C146ED1CF9000F007C117D /* Runner */ = {
132 | isa = PBXNativeTarget;
133 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
134 | buildPhases = (
135 | 64D07BF313DCA0F7676741BC /* [CP] Check Pods Manifest.lock */,
136 | 9740EEB61CF901F6004384FC /* Run Script */,
137 | 97C146EA1CF9000F007C117D /* Sources */,
138 | 97C146EB1CF9000F007C117D /* Frameworks */,
139 | 97C146EC1CF9000F007C117D /* Resources */,
140 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
141 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
142 | A51514C2139A03FB66E32089 /* [CP] Embed Pods Frameworks */,
143 | );
144 | buildRules = (
145 | );
146 | dependencies = (
147 | );
148 | name = Runner;
149 | productName = Runner;
150 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
151 | productType = "com.apple.product-type.application";
152 | };
153 | /* End PBXNativeTarget section */
154 |
155 | /* Begin PBXProject section */
156 | 97C146E61CF9000F007C117D /* Project object */ = {
157 | isa = PBXProject;
158 | attributes = {
159 | LastUpgradeCheck = 1300;
160 | ORGANIZATIONNAME = "";
161 | TargetAttributes = {
162 | 97C146ED1CF9000F007C117D = {
163 | CreatedOnToolsVersion = 7.3.1;
164 | LastSwiftMigration = 1100;
165 | };
166 | };
167 | };
168 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
169 | compatibilityVersion = "Xcode 9.3";
170 | developmentRegion = en;
171 | hasScannedForEncodings = 0;
172 | knownRegions = (
173 | en,
174 | Base,
175 | );
176 | mainGroup = 97C146E51CF9000F007C117D;
177 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
178 | projectDirPath = "";
179 | projectRoot = "";
180 | targets = (
181 | 97C146ED1CF9000F007C117D /* Runner */,
182 | );
183 | };
184 | /* End PBXProject section */
185 |
186 | /* Begin PBXResourcesBuildPhase section */
187 | 97C146EC1CF9000F007C117D /* Resources */ = {
188 | isa = PBXResourcesBuildPhase;
189 | buildActionMask = 2147483647;
190 | files = (
191 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
192 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
193 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
194 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
195 | );
196 | runOnlyForDeploymentPostprocessing = 0;
197 | };
198 | /* End PBXResourcesBuildPhase section */
199 |
200 | /* Begin PBXShellScriptBuildPhase section */
201 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
202 | isa = PBXShellScriptBuildPhase;
203 | buildActionMask = 2147483647;
204 | files = (
205 | );
206 | inputPaths = (
207 | );
208 | name = "Thin Binary";
209 | outputPaths = (
210 | );
211 | runOnlyForDeploymentPostprocessing = 0;
212 | shellPath = /bin/sh;
213 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
214 | };
215 | 64D07BF313DCA0F7676741BC /* [CP] Check Pods Manifest.lock */ = {
216 | isa = PBXShellScriptBuildPhase;
217 | buildActionMask = 2147483647;
218 | files = (
219 | );
220 | inputFileListPaths = (
221 | );
222 | inputPaths = (
223 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
224 | "${PODS_ROOT}/Manifest.lock",
225 | );
226 | name = "[CP] Check Pods Manifest.lock";
227 | outputFileListPaths = (
228 | );
229 | outputPaths = (
230 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
231 | );
232 | runOnlyForDeploymentPostprocessing = 0;
233 | shellPath = /bin/sh;
234 | 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";
235 | showEnvVarsInLog = 0;
236 | };
237 | 9740EEB61CF901F6004384FC /* Run Script */ = {
238 | isa = PBXShellScriptBuildPhase;
239 | buildActionMask = 2147483647;
240 | files = (
241 | );
242 | inputPaths = (
243 | );
244 | name = "Run Script";
245 | outputPaths = (
246 | );
247 | runOnlyForDeploymentPostprocessing = 0;
248 | shellPath = /bin/sh;
249 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
250 | };
251 | A51514C2139A03FB66E32089 /* [CP] Embed Pods Frameworks */ = {
252 | isa = PBXShellScriptBuildPhase;
253 | buildActionMask = 2147483647;
254 | files = (
255 | );
256 | inputFileListPaths = (
257 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
258 | );
259 | name = "[CP] Embed Pods Frameworks";
260 | outputFileListPaths = (
261 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
262 | );
263 | runOnlyForDeploymentPostprocessing = 0;
264 | shellPath = /bin/sh;
265 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
266 | showEnvVarsInLog = 0;
267 | };
268 | /* End PBXShellScriptBuildPhase section */
269 |
270 | /* Begin PBXSourcesBuildPhase section */
271 | 97C146EA1CF9000F007C117D /* Sources */ = {
272 | isa = PBXSourcesBuildPhase;
273 | buildActionMask = 2147483647;
274 | files = (
275 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
276 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
277 | );
278 | runOnlyForDeploymentPostprocessing = 0;
279 | };
280 | /* End PBXSourcesBuildPhase section */
281 |
282 | /* Begin PBXVariantGroup section */
283 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
284 | isa = PBXVariantGroup;
285 | children = (
286 | 97C146FB1CF9000F007C117D /* Base */,
287 | );
288 | name = Main.storyboard;
289 | sourceTree = "";
290 | };
291 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
292 | isa = PBXVariantGroup;
293 | children = (
294 | 97C147001CF9000F007C117D /* Base */,
295 | );
296 | name = LaunchScreen.storyboard;
297 | sourceTree = "";
298 | };
299 | /* End PBXVariantGroup section */
300 |
301 | /* Begin XCBuildConfiguration section */
302 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
303 | isa = XCBuildConfiguration;
304 | buildSettings = {
305 | ALWAYS_SEARCH_USER_PATHS = NO;
306 | CLANG_ANALYZER_NONNULL = YES;
307 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
308 | CLANG_CXX_LIBRARY = "libc++";
309 | CLANG_ENABLE_MODULES = YES;
310 | CLANG_ENABLE_OBJC_ARC = YES;
311 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
312 | CLANG_WARN_BOOL_CONVERSION = YES;
313 | CLANG_WARN_COMMA = YES;
314 | CLANG_WARN_CONSTANT_CONVERSION = YES;
315 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
316 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
317 | CLANG_WARN_EMPTY_BODY = YES;
318 | CLANG_WARN_ENUM_CONVERSION = YES;
319 | CLANG_WARN_INFINITE_RECURSION = YES;
320 | CLANG_WARN_INT_CONVERSION = YES;
321 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
322 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
323 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
324 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
325 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
326 | CLANG_WARN_STRICT_PROTOTYPES = YES;
327 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
328 | CLANG_WARN_UNREACHABLE_CODE = YES;
329 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
330 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
331 | COPY_PHASE_STRIP = NO;
332 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
333 | ENABLE_NS_ASSERTIONS = NO;
334 | ENABLE_STRICT_OBJC_MSGSEND = YES;
335 | GCC_C_LANGUAGE_STANDARD = gnu99;
336 | GCC_NO_COMMON_BLOCKS = YES;
337 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
338 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
339 | GCC_WARN_UNDECLARED_SELECTOR = YES;
340 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
341 | GCC_WARN_UNUSED_FUNCTION = YES;
342 | GCC_WARN_UNUSED_VARIABLE = YES;
343 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
344 | MTL_ENABLE_DEBUG_INFO = NO;
345 | SDKROOT = iphoneos;
346 | SUPPORTED_PLATFORMS = iphoneos;
347 | TARGETED_DEVICE_FAMILY = "1,2";
348 | VALIDATE_PRODUCT = YES;
349 | };
350 | name = Profile;
351 | };
352 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
353 | isa = XCBuildConfiguration;
354 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
355 | buildSettings = {
356 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
357 | CLANG_ENABLE_MODULES = YES;
358 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
359 | DEVELOPMENT_TEAM = 2J8BUB9735;
360 | ENABLE_BITCODE = NO;
361 | INFOPLIST_FILE = Runner/Info.plist;
362 | LD_RUNPATH_SEARCH_PATHS = (
363 | "$(inherited)",
364 | "@executable_path/Frameworks",
365 | );
366 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterPuzzleHack;
367 | PRODUCT_NAME = "$(TARGET_NAME)";
368 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
369 | SWIFT_VERSION = 5.0;
370 | VERSIONING_SYSTEM = "apple-generic";
371 | };
372 | name = Profile;
373 | };
374 | 97C147031CF9000F007C117D /* Debug */ = {
375 | isa = XCBuildConfiguration;
376 | buildSettings = {
377 | ALWAYS_SEARCH_USER_PATHS = NO;
378 | CLANG_ANALYZER_NONNULL = YES;
379 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
380 | CLANG_CXX_LIBRARY = "libc++";
381 | CLANG_ENABLE_MODULES = YES;
382 | CLANG_ENABLE_OBJC_ARC = YES;
383 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
384 | CLANG_WARN_BOOL_CONVERSION = YES;
385 | CLANG_WARN_COMMA = YES;
386 | CLANG_WARN_CONSTANT_CONVERSION = YES;
387 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
388 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
389 | CLANG_WARN_EMPTY_BODY = YES;
390 | CLANG_WARN_ENUM_CONVERSION = YES;
391 | CLANG_WARN_INFINITE_RECURSION = YES;
392 | CLANG_WARN_INT_CONVERSION = YES;
393 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
394 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
395 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
396 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
397 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
398 | CLANG_WARN_STRICT_PROTOTYPES = YES;
399 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
400 | CLANG_WARN_UNREACHABLE_CODE = YES;
401 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
402 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
403 | COPY_PHASE_STRIP = NO;
404 | DEBUG_INFORMATION_FORMAT = dwarf;
405 | ENABLE_STRICT_OBJC_MSGSEND = YES;
406 | ENABLE_TESTABILITY = YES;
407 | GCC_C_LANGUAGE_STANDARD = gnu99;
408 | GCC_DYNAMIC_NO_PIC = NO;
409 | GCC_NO_COMMON_BLOCKS = YES;
410 | GCC_OPTIMIZATION_LEVEL = 0;
411 | GCC_PREPROCESSOR_DEFINITIONS = (
412 | "DEBUG=1",
413 | "$(inherited)",
414 | );
415 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
416 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
417 | GCC_WARN_UNDECLARED_SELECTOR = YES;
418 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
419 | GCC_WARN_UNUSED_FUNCTION = YES;
420 | GCC_WARN_UNUSED_VARIABLE = YES;
421 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
422 | MTL_ENABLE_DEBUG_INFO = YES;
423 | ONLY_ACTIVE_ARCH = YES;
424 | SDKROOT = iphoneos;
425 | TARGETED_DEVICE_FAMILY = "1,2";
426 | };
427 | name = Debug;
428 | };
429 | 97C147041CF9000F007C117D /* Release */ = {
430 | isa = XCBuildConfiguration;
431 | buildSettings = {
432 | ALWAYS_SEARCH_USER_PATHS = NO;
433 | CLANG_ANALYZER_NONNULL = YES;
434 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
435 | CLANG_CXX_LIBRARY = "libc++";
436 | CLANG_ENABLE_MODULES = YES;
437 | CLANG_ENABLE_OBJC_ARC = YES;
438 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
439 | CLANG_WARN_BOOL_CONVERSION = YES;
440 | CLANG_WARN_COMMA = YES;
441 | CLANG_WARN_CONSTANT_CONVERSION = YES;
442 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
443 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
444 | CLANG_WARN_EMPTY_BODY = YES;
445 | CLANG_WARN_ENUM_CONVERSION = YES;
446 | CLANG_WARN_INFINITE_RECURSION = YES;
447 | CLANG_WARN_INT_CONVERSION = YES;
448 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
449 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
450 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
451 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
452 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
453 | CLANG_WARN_STRICT_PROTOTYPES = YES;
454 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
455 | CLANG_WARN_UNREACHABLE_CODE = YES;
456 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
457 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
458 | COPY_PHASE_STRIP = NO;
459 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
460 | ENABLE_NS_ASSERTIONS = NO;
461 | ENABLE_STRICT_OBJC_MSGSEND = YES;
462 | GCC_C_LANGUAGE_STANDARD = gnu99;
463 | GCC_NO_COMMON_BLOCKS = YES;
464 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
465 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
466 | GCC_WARN_UNDECLARED_SELECTOR = YES;
467 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
468 | GCC_WARN_UNUSED_FUNCTION = YES;
469 | GCC_WARN_UNUSED_VARIABLE = YES;
470 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
471 | MTL_ENABLE_DEBUG_INFO = NO;
472 | SDKROOT = iphoneos;
473 | SUPPORTED_PLATFORMS = iphoneos;
474 | SWIFT_COMPILATION_MODE = wholemodule;
475 | SWIFT_OPTIMIZATION_LEVEL = "-O";
476 | TARGETED_DEVICE_FAMILY = "1,2";
477 | VALIDATE_PRODUCT = YES;
478 | };
479 | name = Release;
480 | };
481 | 97C147061CF9000F007C117D /* Debug */ = {
482 | isa = XCBuildConfiguration;
483 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
484 | buildSettings = {
485 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
486 | CLANG_ENABLE_MODULES = YES;
487 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
488 | DEVELOPMENT_TEAM = 2J8BUB9735;
489 | ENABLE_BITCODE = NO;
490 | INFOPLIST_FILE = Runner/Info.plist;
491 | LD_RUNPATH_SEARCH_PATHS = (
492 | "$(inherited)",
493 | "@executable_path/Frameworks",
494 | );
495 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterPuzzleHack;
496 | PRODUCT_NAME = "$(TARGET_NAME)";
497 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
498 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
499 | SWIFT_VERSION = 5.0;
500 | VERSIONING_SYSTEM = "apple-generic";
501 | };
502 | name = Debug;
503 | };
504 | 97C147071CF9000F007C117D /* Release */ = {
505 | isa = XCBuildConfiguration;
506 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
507 | buildSettings = {
508 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
509 | CLANG_ENABLE_MODULES = YES;
510 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
511 | DEVELOPMENT_TEAM = 2J8BUB9735;
512 | ENABLE_BITCODE = NO;
513 | INFOPLIST_FILE = Runner/Info.plist;
514 | LD_RUNPATH_SEARCH_PATHS = (
515 | "$(inherited)",
516 | "@executable_path/Frameworks",
517 | );
518 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterPuzzleHack;
519 | PRODUCT_NAME = "$(TARGET_NAME)";
520 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
521 | SWIFT_VERSION = 5.0;
522 | VERSIONING_SYSTEM = "apple-generic";
523 | };
524 | name = Release;
525 | };
526 | /* End XCBuildConfiguration section */
527 |
528 | /* Begin XCConfigurationList section */
529 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
530 | isa = XCConfigurationList;
531 | buildConfigurations = (
532 | 97C147031CF9000F007C117D /* Debug */,
533 | 97C147041CF9000F007C117D /* Release */,
534 | 249021D3217E4FDB00AE95B9 /* Profile */,
535 | );
536 | defaultConfigurationIsVisible = 0;
537 | defaultConfigurationName = Release;
538 | };
539 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
540 | isa = XCConfigurationList;
541 | buildConfigurations = (
542 | 97C147061CF9000F007C117D /* Debug */,
543 | 97C147071CF9000F007C117D /* Release */,
544 | 249021D4217E4FDB00AE95B9 /* Profile */,
545 | );
546 | defaultConfigurationIsVisible = 0;
547 | defaultConfigurationName = Release;
548 | };
549 | /* End XCConfigurationList section */
550 | };
551 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
552 | }
553 |
--------------------------------------------------------------------------------