();
68 | return users;
69 | }
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'kotlin-android'
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 |
28 | android {
29 | compileSdkVersion 33
30 | ndkVersion flutter.ndkVersion
31 |
32 | compileOptions {
33 | sourceCompatibility JavaVersion.VERSION_1_8
34 | targetCompatibility JavaVersion.VERSION_1_8
35 | }
36 |
37 | kotlinOptions {
38 | jvmTarget = '1.8'
39 | }
40 |
41 | sourceSets {
42 | main.java.srcDirs += 'src/main/kotlin'
43 | }
44 |
45 | defaultConfig {
46 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
47 | applicationId "com.example.flutter_dio_example"
48 | // You can update the following values to match your application needs.
49 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
50 | minSdkVersion flutter.minSdkVersion
51 | targetSdkVersion flutter.targetSdkVersion
52 | versionCode flutterVersionCode.toInteger()
53 | versionName flutterVersionName
54 | }
55 |
56 | buildTypes {
57 | release {
58 | // TODO: Add your own signing config for the release build.
59 | // Signing with the debug keys for now, so `flutter run --release` works.
60 | signingConfig signingConfigs.debug
61 | }
62 | }
63 | }
64 |
65 | flutter {
66 | source '../..'
67 | }
68 |
69 | dependencies {
70 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
71 | }
72 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/lib/widgets/output_panel.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_dio_example/extensions/extensions.dart';
3 | import 'package:flutter_dio_example/models/models.dart';
4 |
5 | class OutputPanel extends StatelessWidget {
6 | const OutputPanel({
7 | Key? key,
8 | this.user,
9 | this.showLoading = false,
10 | }) : super(key: key);
11 | final User? user;
12 | final bool showLoading;
13 |
14 | @override
15 | Widget build(BuildContext context) {
16 | return Container(
17 | height: 195.0,
18 | decoration: BoxDecoration(
19 | color: Colors.grey[200],
20 | borderRadius: BorderRadius.circular(8.0),
21 | ),
22 | padding: const EdgeInsets.all(10.0),
23 | child: Column(
24 | crossAxisAlignment: CrossAxisAlignment.stretch,
25 | children: [
26 | const Text('Output Log').fontSize(15.0).bold(),
27 | const SizedBox(height: 16.0),
28 | showLoading
29 | ? const Center(child: CircularProgressIndicator())
30 | : user == null
31 | ? const Center(child: Text('No output log to show'))
32 | : Padding(
33 | padding: const EdgeInsets.symmetric(horizontal: 12.0),
34 | child: Column(
35 | children: [
36 | UserData(
37 | dataKey: 'id',
38 | dataValue: user!.id!.toString(),
39 | ),
40 | UserData(dataKey: 'name', dataValue: user!.name),
41 | UserData(dataKey: 'email', dataValue: user!.email),
42 | UserData(
43 | dataKey: 'gender',
44 | dataValue: user!.gender.toString(),
45 | ),
46 | UserData(
47 | dataKey: 'status',
48 | dataValue: user!.status.toString(),
49 | ),
50 | ],
51 | ),
52 | ),
53 | ],
54 | ),
55 | );
56 | }
57 | }
58 |
59 | class UserData extends StatelessWidget {
60 | const UserData({
61 | Key? key,
62 | required this.dataKey,
63 | required this.dataValue,
64 | }) : super(key: key);
65 | final String dataKey;
66 | final String dataValue;
67 |
68 | @override
69 | Widget build(BuildContext context) {
70 | return Padding(
71 | padding: const EdgeInsets.only(bottom: 4.0),
72 | child: Row(
73 | children: [
74 | Expanded(flex: 1, child: Text('$dataKey: ').fontSize(15.0).bold()),
75 | Expanded(flex: 3, child: Text(dataValue).fontSize(15.0)),
76 | ],
77 | ),
78 | );
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
Flutter Dio Cache Interceptor Example
3 |
4 |
5 | Overview
6 |
7 | Caching is a crucial process for storing API responses on a user's device to reduce network requests and improve performance in Flutter apps. This example demonstrates how to implement caching for API requests using the Dio HTTP client and the Dio Cache Interceptor.
8 |
9 | Key Components
10 |
11 |
12 | - Dio: A powerful HTTP client for Flutter.
13 | - Dio Cache Interceptor: An interceptor for Dio that allows efficient API response caching.
14 | - Hive: A fast and lightweight key-value database in Dart used as the cache store.
15 |
16 |
17 | Implementation Steps
18 |
19 | 1. Add Dependencies
20 |
21 | In your `pubspec.yaml` file, add the required packages:
22 |
23 |
24 |
25 | dependencies:
26 | dio: ^4.0.6
27 | dio_cache_interceptor: ^3.3.0
28 | dio_cache_interceptor_hive_store: ^3.2.0
29 | hive: ^2.0.5
30 |
31 |
32 |
33 | 2. Set Up Cache Directory
34 |
35 | Get the temporary directory on the device where cached data will be stored. It's recommended to use the temporary directory provided by Flutter:
36 |
37 |
38 |
39 | var cacheDir = await getTemporaryDirectory();
40 |
41 |
42 |
43 | 3. Build Cache Store
44 |
45 | Create a cacheStore object, specifying the cache directory path and a unique hiveBoxName for your app:
46 |
47 |
48 |
49 | var cacheStore = HiveCacheStore(
50 | cacheDir.path,
51 | hiveBoxName: "your_app_name",
52 | );
53 |
54 |
55 |
56 | 4. Define Cache Options
57 |
58 | Customize cache options to control caching behavior, such as cache policy, priority, maxStale duration, key building, and more:
59 |
60 |
61 |
62 | var customCacheOptions = CacheOptions(
63 | store: cacheStore,
64 | policy: CachePolicy.forceCache,
65 | priority: CachePriority.high,
66 | maxStale: const Duration(minutes: 5),
67 | hitCacheOnErrorExcept: [401, 404],
68 | keyBuilder: (request) {
69 | return request.uri.toString();
70 | },
71 | allowPostMethod: false,
72 | );
73 |
74 |
75 |
76 | 5. Build Dio with Cache Interceptor
77 |
78 | Create a Dio instance and add the cache interceptor with your custom cache options:
79 |
80 |
81 |
82 | var customDio = Dio()
83 | ..interceptors.add(DioCacheInterceptor(options: customCacheOptions));
84 |
85 |
86 |
87 | Best Practices for Network Calling and Error Handling
88 |
89 | Follow these best practices when using Dio for network requests:
90 |
91 |
92 | - Use Dio's try-catch mechanism to handle network errors gracefully.
93 | - Implement loading indicators to provide feedback during network requests.
94 | - Handle timeouts and connectivity issues.
95 | - Display appropriate error messages to the user.
96 |
97 |
98 | Usage
99 |
100 | Now, all your GET requests made using the customDio object will be cached in the user's device storage temporary directory while following best practices for network calling and error handling.
101 |
102 | Feel free to explore and customize this example for your Flutter app's caching needs.
103 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
69 |
71 |
77 |
78 |
79 |
80 |
82 |
83 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/lib/network/caller.dart:
--------------------------------------------------------------------------------
1 | import 'package:dio/dio.dart';
2 | import 'package:dio_cache_interceptor/dio_cache_interceptor.dart';
3 | import 'dart:io';
4 |
5 | class Caller {
6 | const Caller({
7 | required this.cacheStore,
8 | required this.cacheOptions,
9 | required this.dio,
10 | });
11 |
12 | final CacheStore cacheStore;
13 | final CacheOptions cacheOptions;
14 | final Dio dio;
15 |
16 | Future noCacheCall(String url) async {
17 | final resp = await _call(url: url, policy: CachePolicy.noCache);
18 | if (resp == null) return 'No response';
19 | return _getResponseContent(resp);
20 | }
21 |
22 | Future requestCall(String url) async {
23 | final resp = await _call(url: url);
24 | if (resp == null) return 'No response';
25 | return _getResponseContent(resp);
26 | }
27 |
28 | Future refreshCall(String url) async {
29 | final resp = await _call(url: url, policy: CachePolicy.refresh);
30 | if (resp == null) return 'No response';
31 | return _getResponseContent(resp);
32 | }
33 |
34 | Future forceCacheCall(String url) async {
35 | final resp = await _call(url: url, policy: CachePolicy.forceCache);
36 | if (resp == null) return 'No response';
37 | return _getResponseContent(resp);
38 | }
39 |
40 | Future refreshForceCacheCall(String url) async {
41 | final resp = await _call(url: url, policy: CachePolicy.refreshForceCache);
42 | if (resp == null) return 'No response';
43 | return _getResponseContent(resp);
44 | }
45 |
46 | Future deleteEntry(String url) async {
47 | final key = CacheOptions.defaultCacheKeyBuilder(
48 | RequestOptions(path: url),
49 | );
50 | await cacheStore.delete(key);
51 | return 'Entry "$url" cleared';
52 | }
53 |
54 | Future cleanStore() async {
55 | await cacheStore.clean();
56 | return 'Store cleared completely';
57 | }
58 |
59 | Future _call({
60 | required String url,
61 | CachePolicy? policy,
62 | }) {
63 | Options? options;
64 | options = cacheOptions.copyWith(policy: policy).toOptions();
65 |
66 | try {
67 | return dio.get(url, options: options);
68 | } on DioError catch (err) {
69 | return Future.value(null);
70 | }
71 | }
72 |
73 | String _getResponseContent(Response response) {
74 | final date = response.headers[HttpHeaders.dateHeader]?.first;
75 | final etag = response.headers[HttpHeaders.etagHeader]?.first;
76 | final expires = response.headers[HttpHeaders.expiresHeader]?.first;
77 | final lastModified =
78 | response.headers[HttpHeaders.lastModifiedHeader]?.first;
79 | final cacheControl =
80 | response.headers[HttpHeaders.cacheControlHeader]?.first;
81 |
82 | final buffer = StringBuffer();
83 | buffer.writeln('');
84 | buffer.writeln('Call returned ${response.statusCode}\n');
85 |
86 | buffer.writeln('Request headers:');
87 | buffer.writeln('${response.requestOptions.headers.toString()}\n');
88 |
89 | buffer.writeln('Response headers (cache related):');
90 | if (date != null) {
91 | buffer.writeln('${HttpHeaders.dateHeader}: $date');
92 | }
93 | if (etag != null) {
94 | buffer.writeln('${HttpHeaders.etagHeader}: $etag');
95 | }
96 | if (expires != null) {
97 | buffer.writeln('${HttpHeaders.expiresHeader}: $expires');
98 | }
99 | if (lastModified != null) {
100 | buffer.writeln('${HttpHeaders.lastModifiedHeader}: $lastModified');
101 | }
102 | if (cacheControl != null) {
103 | buffer.writeln('${HttpHeaders.cacheControlHeader}: $cacheControl');
104 | }
105 |
106 | buffer.writeln('');
107 | buffer.writeln('Response body (truncated):');
108 | buffer.writeln('${response.data.toString().substring(0, 200)}...');
109 |
110 | return buffer.toString();
111 | }
112 | }
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | _fe_analyzer_shared:
5 | dependency: transitive
6 | description:
7 | name: _fe_analyzer_shared
8 | url: "https://pub.dartlang.org"
9 | source: hosted
10 | version: "50.0.0"
11 | analyzer:
12 | dependency: transitive
13 | description:
14 | name: analyzer
15 | url: "https://pub.dartlang.org"
16 | source: hosted
17 | version: "5.2.0"
18 | args:
19 | dependency: transitive
20 | description:
21 | name: args
22 | url: "https://pub.dartlang.org"
23 | source: hosted
24 | version: "2.4.1"
25 | async:
26 | dependency: transitive
27 | description:
28 | name: async
29 | url: "https://pub.dartlang.org"
30 | source: hosted
31 | version: "2.9.0"
32 | boolean_selector:
33 | dependency: transitive
34 | description:
35 | name: boolean_selector
36 | url: "https://pub.dartlang.org"
37 | source: hosted
38 | version: "2.1.0"
39 | build:
40 | dependency: transitive
41 | description:
42 | name: build
43 | url: "https://pub.dartlang.org"
44 | source: hosted
45 | version: "2.3.1"
46 | build_config:
47 | dependency: transitive
48 | description:
49 | name: build_config
50 | url: "https://pub.dartlang.org"
51 | source: hosted
52 | version: "1.1.1"
53 | build_daemon:
54 | dependency: transitive
55 | description:
56 | name: build_daemon
57 | url: "https://pub.dartlang.org"
58 | source: hosted
59 | version: "3.1.1"
60 | build_resolvers:
61 | dependency: transitive
62 | description:
63 | name: build_resolvers
64 | url: "https://pub.dartlang.org"
65 | source: hosted
66 | version: "2.1.0"
67 | build_runner:
68 | dependency: "direct dev"
69 | description:
70 | name: build_runner
71 | url: "https://pub.dartlang.org"
72 | source: hosted
73 | version: "2.3.3"
74 | build_runner_core:
75 | dependency: transitive
76 | description:
77 | name: build_runner_core
78 | url: "https://pub.dartlang.org"
79 | source: hosted
80 | version: "7.2.7"
81 | built_collection:
82 | dependency: transitive
83 | description:
84 | name: built_collection
85 | url: "https://pub.dartlang.org"
86 | source: hosted
87 | version: "5.1.1"
88 | built_value:
89 | dependency: transitive
90 | description:
91 | name: built_value
92 | url: "https://pub.dartlang.org"
93 | source: hosted
94 | version: "8.6.2"
95 | characters:
96 | dependency: transitive
97 | description:
98 | name: characters
99 | url: "https://pub.dartlang.org"
100 | source: hosted
101 | version: "1.2.1"
102 | checked_yaml:
103 | dependency: transitive
104 | description:
105 | name: checked_yaml
106 | url: "https://pub.dartlang.org"
107 | source: hosted
108 | version: "2.0.2"
109 | clock:
110 | dependency: transitive
111 | description:
112 | name: clock
113 | url: "https://pub.dartlang.org"
114 | source: hosted
115 | version: "1.1.1"
116 | code_builder:
117 | dependency: transitive
118 | description:
119 | name: code_builder
120 | url: "https://pub.dartlang.org"
121 | source: hosted
122 | version: "4.4.0"
123 | collection:
124 | dependency: transitive
125 | description:
126 | name: collection
127 | url: "https://pub.dartlang.org"
128 | source: hosted
129 | version: "1.16.0"
130 | convert:
131 | dependency: transitive
132 | description:
133 | name: convert
134 | url: "https://pub.dartlang.org"
135 | source: hosted
136 | version: "3.1.1"
137 | crypto:
138 | dependency: transitive
139 | description:
140 | name: crypto
141 | url: "https://pub.dartlang.org"
142 | source: hosted
143 | version: "3.0.2"
144 | cupertino_icons:
145 | dependency: "direct main"
146 | description:
147 | name: cupertino_icons
148 | url: "https://pub.dartlang.org"
149 | source: hosted
150 | version: "1.0.5"
151 | dart_style:
152 | dependency: transitive
153 | description:
154 | name: dart_style
155 | url: "https://pub.dartlang.org"
156 | source: hosted
157 | version: "2.2.5"
158 | dio:
159 | dependency: "direct main"
160 | description:
161 | name: dio
162 | url: "https://pub.dartlang.org"
163 | source: hosted
164 | version: "4.0.6"
165 | dio_cache_interceptor:
166 | dependency: "direct main"
167 | description:
168 | name: dio_cache_interceptor
169 | url: "https://pub.dartlang.org"
170 | source: hosted
171 | version: "3.4.2"
172 | dio_cache_interceptor_hive_store:
173 | dependency: "direct main"
174 | description:
175 | name: dio_cache_interceptor_hive_store
176 | url: "https://pub.dartlang.org"
177 | source: hosted
178 | version: "3.2.1"
179 | equatable:
180 | dependency: "direct main"
181 | description:
182 | name: equatable
183 | url: "https://pub.dartlang.org"
184 | source: hosted
185 | version: "2.0.5"
186 | fake_async:
187 | dependency: transitive
188 | description:
189 | name: fake_async
190 | url: "https://pub.dartlang.org"
191 | source: hosted
192 | version: "1.3.1"
193 | ffi:
194 | dependency: transitive
195 | description:
196 | name: ffi
197 | url: "https://pub.dartlang.org"
198 | source: hosted
199 | version: "2.0.2"
200 | file:
201 | dependency: transitive
202 | description:
203 | name: file
204 | url: "https://pub.dartlang.org"
205 | source: hosted
206 | version: "6.1.4"
207 | fixnum:
208 | dependency: transitive
209 | description:
210 | name: fixnum
211 | url: "https://pub.dartlang.org"
212 | source: hosted
213 | version: "1.0.1"
214 | flutter:
215 | dependency: "direct main"
216 | description: flutter
217 | source: sdk
218 | version: "0.0.0"
219 | flutter_lints:
220 | dependency: "direct dev"
221 | description:
222 | name: flutter_lints
223 | url: "https://pub.dartlang.org"
224 | source: hosted
225 | version: "2.0.2"
226 | flutter_test:
227 | dependency: "direct dev"
228 | description: flutter
229 | source: sdk
230 | version: "0.0.0"
231 | frontend_server_client:
232 | dependency: transitive
233 | description:
234 | name: frontend_server_client
235 | url: "https://pub.dartlang.org"
236 | source: hosted
237 | version: "3.2.0"
238 | glob:
239 | dependency: transitive
240 | description:
241 | name: glob
242 | url: "https://pub.dartlang.org"
243 | source: hosted
244 | version: "2.1.1"
245 | graphs:
246 | dependency: transitive
247 | description:
248 | name: graphs
249 | url: "https://pub.dartlang.org"
250 | source: hosted
251 | version: "2.3.1"
252 | hive:
253 | dependency: transitive
254 | description:
255 | name: hive
256 | url: "https://pub.dartlang.org"
257 | source: hosted
258 | version: "2.2.3"
259 | http_multi_server:
260 | dependency: transitive
261 | description:
262 | name: http_multi_server
263 | url: "https://pub.dartlang.org"
264 | source: hosted
265 | version: "3.2.1"
266 | http_parser:
267 | dependency: transitive
268 | description:
269 | name: http_parser
270 | url: "https://pub.dartlang.org"
271 | source: hosted
272 | version: "4.0.2"
273 | io:
274 | dependency: transitive
275 | description:
276 | name: io
277 | url: "https://pub.dartlang.org"
278 | source: hosted
279 | version: "1.0.4"
280 | js:
281 | dependency: transitive
282 | description:
283 | name: js
284 | url: "https://pub.dartlang.org"
285 | source: hosted
286 | version: "0.6.5"
287 | json_annotation:
288 | dependency: "direct main"
289 | description:
290 | name: json_annotation
291 | url: "https://pub.dartlang.org"
292 | source: hosted
293 | version: "4.8.0"
294 | json_serializable:
295 | dependency: "direct dev"
296 | description:
297 | name: json_serializable
298 | url: "https://pub.dartlang.org"
299 | source: hosted
300 | version: "6.6.1"
301 | lints:
302 | dependency: transitive
303 | description:
304 | name: lints
305 | url: "https://pub.dartlang.org"
306 | source: hosted
307 | version: "2.0.1"
308 | logger:
309 | dependency: "direct main"
310 | description:
311 | name: logger
312 | url: "https://pub.dartlang.org"
313 | source: hosted
314 | version: "1.4.0"
315 | logging:
316 | dependency: transitive
317 | description:
318 | name: logging
319 | url: "https://pub.dartlang.org"
320 | source: hosted
321 | version: "1.1.1"
322 | matcher:
323 | dependency: transitive
324 | description:
325 | name: matcher
326 | url: "https://pub.dartlang.org"
327 | source: hosted
328 | version: "0.12.12"
329 | material_color_utilities:
330 | dependency: transitive
331 | description:
332 | name: material_color_utilities
333 | url: "https://pub.dartlang.org"
334 | source: hosted
335 | version: "0.1.5"
336 | meta:
337 | dependency: transitive
338 | description:
339 | name: meta
340 | url: "https://pub.dartlang.org"
341 | source: hosted
342 | version: "1.8.0"
343 | mime:
344 | dependency: transitive
345 | description:
346 | name: mime
347 | url: "https://pub.dartlang.org"
348 | source: hosted
349 | version: "1.0.4"
350 | package_config:
351 | dependency: transitive
352 | description:
353 | name: package_config
354 | url: "https://pub.dartlang.org"
355 | source: hosted
356 | version: "2.1.0"
357 | path:
358 | dependency: transitive
359 | description:
360 | name: path
361 | url: "https://pub.dartlang.org"
362 | source: hosted
363 | version: "1.8.2"
364 | path_provider:
365 | dependency: "direct main"
366 | description:
367 | name: path_provider
368 | url: "https://pub.dartlang.org"
369 | source: hosted
370 | version: "2.1.0"
371 | path_provider_android:
372 | dependency: transitive
373 | description:
374 | name: path_provider_android
375 | url: "https://pub.dartlang.org"
376 | source: hosted
377 | version: "2.1.0"
378 | path_provider_foundation:
379 | dependency: transitive
380 | description:
381 | name: path_provider_foundation
382 | url: "https://pub.dartlang.org"
383 | source: hosted
384 | version: "2.3.0"
385 | path_provider_linux:
386 | dependency: transitive
387 | description:
388 | name: path_provider_linux
389 | url: "https://pub.dartlang.org"
390 | source: hosted
391 | version: "2.2.0"
392 | path_provider_platform_interface:
393 | dependency: transitive
394 | description:
395 | name: path_provider_platform_interface
396 | url: "https://pub.dartlang.org"
397 | source: hosted
398 | version: "2.1.0"
399 | path_provider_windows:
400 | dependency: transitive
401 | description:
402 | name: path_provider_windows
403 | url: "https://pub.dartlang.org"
404 | source: hosted
405 | version: "2.2.0"
406 | platform:
407 | dependency: transitive
408 | description:
409 | name: platform
410 | url: "https://pub.dartlang.org"
411 | source: hosted
412 | version: "3.1.1"
413 | plugin_platform_interface:
414 | dependency: transitive
415 | description:
416 | name: plugin_platform_interface
417 | url: "https://pub.dartlang.org"
418 | source: hosted
419 | version: "2.1.5"
420 | pool:
421 | dependency: transitive
422 | description:
423 | name: pool
424 | url: "https://pub.dartlang.org"
425 | source: hosted
426 | version: "1.5.1"
427 | pub_semver:
428 | dependency: transitive
429 | description:
430 | name: pub_semver
431 | url: "https://pub.dartlang.org"
432 | source: hosted
433 | version: "2.1.4"
434 | pubspec_parse:
435 | dependency: transitive
436 | description:
437 | name: pubspec_parse
438 | url: "https://pub.dartlang.org"
439 | source: hosted
440 | version: "1.2.3"
441 | shelf:
442 | dependency: transitive
443 | description:
444 | name: shelf
445 | url: "https://pub.dartlang.org"
446 | source: hosted
447 | version: "1.4.1"
448 | shelf_web_socket:
449 | dependency: transitive
450 | description:
451 | name: shelf_web_socket
452 | url: "https://pub.dartlang.org"
453 | source: hosted
454 | version: "1.0.4"
455 | sky_engine:
456 | dependency: transitive
457 | description: flutter
458 | source: sdk
459 | version: "0.0.99"
460 | source_gen:
461 | dependency: transitive
462 | description:
463 | name: source_gen
464 | url: "https://pub.dartlang.org"
465 | source: hosted
466 | version: "1.3.2"
467 | source_helper:
468 | dependency: transitive
469 | description:
470 | name: source_helper
471 | url: "https://pub.dartlang.org"
472 | source: hosted
473 | version: "1.3.3"
474 | source_span:
475 | dependency: transitive
476 | description:
477 | name: source_span
478 | url: "https://pub.dartlang.org"
479 | source: hosted
480 | version: "1.9.0"
481 | stack_trace:
482 | dependency: transitive
483 | description:
484 | name: stack_trace
485 | url: "https://pub.dartlang.org"
486 | source: hosted
487 | version: "1.10.0"
488 | stream_channel:
489 | dependency: transitive
490 | description:
491 | name: stream_channel
492 | url: "https://pub.dartlang.org"
493 | source: hosted
494 | version: "2.1.0"
495 | stream_transform:
496 | dependency: transitive
497 | description:
498 | name: stream_transform
499 | url: "https://pub.dartlang.org"
500 | source: hosted
501 | version: "2.1.0"
502 | string_scanner:
503 | dependency: transitive
504 | description:
505 | name: string_scanner
506 | url: "https://pub.dartlang.org"
507 | source: hosted
508 | version: "1.1.1"
509 | term_glyph:
510 | dependency: transitive
511 | description:
512 | name: term_glyph
513 | url: "https://pub.dartlang.org"
514 | source: hosted
515 | version: "1.2.1"
516 | test_api:
517 | dependency: transitive
518 | description:
519 | name: test_api
520 | url: "https://pub.dartlang.org"
521 | source: hosted
522 | version: "0.4.12"
523 | timing:
524 | dependency: transitive
525 | description:
526 | name: timing
527 | url: "https://pub.dartlang.org"
528 | source: hosted
529 | version: "1.0.1"
530 | typed_data:
531 | dependency: transitive
532 | description:
533 | name: typed_data
534 | url: "https://pub.dartlang.org"
535 | source: hosted
536 | version: "1.3.2"
537 | uuid:
538 | dependency: transitive
539 | description:
540 | name: uuid
541 | url: "https://pub.dartlang.org"
542 | source: hosted
543 | version: "3.0.7"
544 | vector_math:
545 | dependency: transitive
546 | description:
547 | name: vector_math
548 | url: "https://pub.dartlang.org"
549 | source: hosted
550 | version: "2.1.2"
551 | watcher:
552 | dependency: transitive
553 | description:
554 | name: watcher
555 | url: "https://pub.dartlang.org"
556 | source: hosted
557 | version: "1.0.2"
558 | web_socket_channel:
559 | dependency: transitive
560 | description:
561 | name: web_socket_channel
562 | url: "https://pub.dartlang.org"
563 | source: hosted
564 | version: "2.4.0"
565 | win32:
566 | dependency: transitive
567 | description:
568 | name: win32
569 | url: "https://pub.dartlang.org"
570 | source: hosted
571 | version: "4.1.4"
572 | xdg_directories:
573 | dependency: transitive
574 | description:
575 | name: xdg_directories
576 | url: "https://pub.dartlang.org"
577 | source: hosted
578 | version: "1.0.2"
579 | yaml:
580 | dependency: transitive
581 | description:
582 | name: yaml
583 | url: "https://pub.dartlang.org"
584 | source: hosted
585 | version: "3.1.1"
586 | sdks:
587 | dart: ">=2.18.0 <3.0.0"
588 | flutter: ">=3.3.0"
589 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 29AED51BA990BC000800B405 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC73E221E6E33698B73B9874 /* 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 | 127791481E073B6738D586C7 /* 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 = ""; };
34 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
35 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
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 | 7F737BB7D1C7220CF94513A2 /* 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 = ""; };
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 | BC73E221E6E33698B73B9874 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
49 | F77B4BBEC172AD019E23950D /* 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 | 29AED51BA990BC000800B405 /* Pods_Runner.framework in Frameworks */,
58 | );
59 | runOnlyForDeploymentPostprocessing = 0;
60 | };
61 | /* End PBXFrameworksBuildPhase section */
62 |
63 | /* Begin PBXGroup section */
64 | 4E7765D14514DF90B76E6DF2 /* Frameworks */ = {
65 | isa = PBXGroup;
66 | children = (
67 | BC73E221E6E33698B73B9874 /* Pods_Runner.framework */,
68 | );
69 | name = Frameworks;
70 | sourceTree = "";
71 | };
72 | 66E3AFCF1FB860DD2BFFC40A /* Pods */ = {
73 | isa = PBXGroup;
74 | children = (
75 | F77B4BBEC172AD019E23950D /* Pods-Runner.debug.xcconfig */,
76 | 7F737BB7D1C7220CF94513A2 /* Pods-Runner.release.xcconfig */,
77 | 127791481E073B6738D586C7 /* Pods-Runner.profile.xcconfig */,
78 | );
79 | path = Pods;
80 | sourceTree = "";
81 | };
82 | 9740EEB11CF90186004384FC /* Flutter */ = {
83 | isa = PBXGroup;
84 | children = (
85 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
86 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
87 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
88 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
89 | );
90 | name = Flutter;
91 | sourceTree = "";
92 | };
93 | 97C146E51CF9000F007C117D = {
94 | isa = PBXGroup;
95 | children = (
96 | 9740EEB11CF90186004384FC /* Flutter */,
97 | 97C146F01CF9000F007C117D /* Runner */,
98 | 97C146EF1CF9000F007C117D /* Products */,
99 | 66E3AFCF1FB860DD2BFFC40A /* Pods */,
100 | 4E7765D14514DF90B76E6DF2 /* Frameworks */,
101 | );
102 | sourceTree = "";
103 | };
104 | 97C146EF1CF9000F007C117D /* Products */ = {
105 | isa = PBXGroup;
106 | children = (
107 | 97C146EE1CF9000F007C117D /* Runner.app */,
108 | );
109 | name = Products;
110 | sourceTree = "";
111 | };
112 | 97C146F01CF9000F007C117D /* Runner */ = {
113 | isa = PBXGroup;
114 | children = (
115 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
116 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
117 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
118 | 97C147021CF9000F007C117D /* Info.plist */,
119 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
120 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
121 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
122 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
123 | );
124 | path = Runner;
125 | sourceTree = "";
126 | };
127 | /* End PBXGroup section */
128 |
129 | /* Begin PBXNativeTarget section */
130 | 97C146ED1CF9000F007C117D /* Runner */ = {
131 | isa = PBXNativeTarget;
132 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
133 | buildPhases = (
134 | 7F84C9B4E5ECCA7417D9273F /* [CP] Check Pods Manifest.lock */,
135 | 9740EEB61CF901F6004384FC /* Run Script */,
136 | 97C146EA1CF9000F007C117D /* Sources */,
137 | 97C146EB1CF9000F007C117D /* Frameworks */,
138 | 97C146EC1CF9000F007C117D /* Resources */,
139 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
140 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
141 | 6D3DE76C4252F4B814B9E95E /* [CP] Embed Pods Frameworks */,
142 | );
143 | buildRules = (
144 | );
145 | dependencies = (
146 | );
147 | name = Runner;
148 | productName = Runner;
149 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
150 | productType = "com.apple.product-type.application";
151 | };
152 | /* End PBXNativeTarget section */
153 |
154 | /* Begin PBXProject section */
155 | 97C146E61CF9000F007C117D /* Project object */ = {
156 | isa = PBXProject;
157 | attributes = {
158 | LastUpgradeCheck = 1300;
159 | ORGANIZATIONNAME = "";
160 | TargetAttributes = {
161 | 97C146ED1CF9000F007C117D = {
162 | CreatedOnToolsVersion = 7.3.1;
163 | LastSwiftMigration = 1100;
164 | };
165 | };
166 | };
167 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
168 | compatibilityVersion = "Xcode 9.3";
169 | developmentRegion = en;
170 | hasScannedForEncodings = 0;
171 | knownRegions = (
172 | en,
173 | Base,
174 | );
175 | mainGroup = 97C146E51CF9000F007C117D;
176 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
177 | projectDirPath = "";
178 | projectRoot = "";
179 | targets = (
180 | 97C146ED1CF9000F007C117D /* Runner */,
181 | );
182 | };
183 | /* End PBXProject section */
184 |
185 | /* Begin PBXResourcesBuildPhase section */
186 | 97C146EC1CF9000F007C117D /* Resources */ = {
187 | isa = PBXResourcesBuildPhase;
188 | buildActionMask = 2147483647;
189 | files = (
190 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
191 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
192 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
193 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
194 | );
195 | runOnlyForDeploymentPostprocessing = 0;
196 | };
197 | /* End PBXResourcesBuildPhase section */
198 |
199 | /* Begin PBXShellScriptBuildPhase section */
200 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
201 | isa = PBXShellScriptBuildPhase;
202 | alwaysOutOfDate = 1;
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 | 6D3DE76C4252F4B814B9E95E /* [CP] Embed Pods Frameworks */ = {
216 | isa = PBXShellScriptBuildPhase;
217 | buildActionMask = 2147483647;
218 | files = (
219 | );
220 | inputFileListPaths = (
221 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
222 | );
223 | name = "[CP] Embed Pods Frameworks";
224 | outputFileListPaths = (
225 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
226 | );
227 | runOnlyForDeploymentPostprocessing = 0;
228 | shellPath = /bin/sh;
229 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
230 | showEnvVarsInLog = 0;
231 | };
232 | 7F84C9B4E5ECCA7417D9273F /* [CP] Check Pods Manifest.lock */ = {
233 | isa = PBXShellScriptBuildPhase;
234 | buildActionMask = 2147483647;
235 | files = (
236 | );
237 | inputFileListPaths = (
238 | );
239 | inputPaths = (
240 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
241 | "${PODS_ROOT}/Manifest.lock",
242 | );
243 | name = "[CP] Check Pods Manifest.lock";
244 | outputFileListPaths = (
245 | );
246 | outputPaths = (
247 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
248 | );
249 | runOnlyForDeploymentPostprocessing = 0;
250 | shellPath = /bin/sh;
251 | 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";
252 | showEnvVarsInLog = 0;
253 | };
254 | 9740EEB61CF901F6004384FC /* Run Script */ = {
255 | isa = PBXShellScriptBuildPhase;
256 | alwaysOutOfDate = 1;
257 | buildActionMask = 2147483647;
258 | files = (
259 | );
260 | inputPaths = (
261 | );
262 | name = "Run Script";
263 | outputPaths = (
264 | );
265 | runOnlyForDeploymentPostprocessing = 0;
266 | shellPath = /bin/sh;
267 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
268 | };
269 | /* End PBXShellScriptBuildPhase section */
270 |
271 | /* Begin PBXSourcesBuildPhase section */
272 | 97C146EA1CF9000F007C117D /* Sources */ = {
273 | isa = PBXSourcesBuildPhase;
274 | buildActionMask = 2147483647;
275 | files = (
276 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
277 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
278 | );
279 | runOnlyForDeploymentPostprocessing = 0;
280 | };
281 | /* End PBXSourcesBuildPhase section */
282 |
283 | /* Begin PBXVariantGroup section */
284 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
285 | isa = PBXVariantGroup;
286 | children = (
287 | 97C146FB1CF9000F007C117D /* Base */,
288 | );
289 | name = Main.storyboard;
290 | sourceTree = "";
291 | };
292 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
293 | isa = PBXVariantGroup;
294 | children = (
295 | 97C147001CF9000F007C117D /* Base */,
296 | );
297 | name = LaunchScreen.storyboard;
298 | sourceTree = "";
299 | };
300 | /* End PBXVariantGroup section */
301 |
302 | /* Begin XCBuildConfiguration section */
303 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
304 | isa = XCBuildConfiguration;
305 | buildSettings = {
306 | ALWAYS_SEARCH_USER_PATHS = NO;
307 | CLANG_ANALYZER_NONNULL = YES;
308 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
309 | CLANG_CXX_LIBRARY = "libc++";
310 | CLANG_ENABLE_MODULES = YES;
311 | CLANG_ENABLE_OBJC_ARC = YES;
312 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
313 | CLANG_WARN_BOOL_CONVERSION = YES;
314 | CLANG_WARN_COMMA = YES;
315 | CLANG_WARN_CONSTANT_CONVERSION = YES;
316 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
317 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
318 | CLANG_WARN_EMPTY_BODY = YES;
319 | CLANG_WARN_ENUM_CONVERSION = YES;
320 | CLANG_WARN_INFINITE_RECURSION = YES;
321 | CLANG_WARN_INT_CONVERSION = YES;
322 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
323 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
324 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
325 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
326 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
327 | CLANG_WARN_STRICT_PROTOTYPES = YES;
328 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
329 | CLANG_WARN_UNREACHABLE_CODE = YES;
330 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
331 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
332 | COPY_PHASE_STRIP = NO;
333 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
334 | ENABLE_NS_ASSERTIONS = NO;
335 | ENABLE_STRICT_OBJC_MSGSEND = YES;
336 | GCC_C_LANGUAGE_STANDARD = gnu99;
337 | GCC_NO_COMMON_BLOCKS = YES;
338 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
339 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
340 | GCC_WARN_UNDECLARED_SELECTOR = YES;
341 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
342 | GCC_WARN_UNUSED_FUNCTION = YES;
343 | GCC_WARN_UNUSED_VARIABLE = YES;
344 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
345 | MTL_ENABLE_DEBUG_INFO = NO;
346 | SDKROOT = iphoneos;
347 | SUPPORTED_PLATFORMS = iphoneos;
348 | TARGETED_DEVICE_FAMILY = "1,2";
349 | VALIDATE_PRODUCT = YES;
350 | };
351 | name = Profile;
352 | };
353 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
354 | isa = XCBuildConfiguration;
355 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
356 | buildSettings = {
357 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
358 | CLANG_ENABLE_MODULES = YES;
359 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
360 | DEVELOPMENT_TEAM = URQZL73W77;
361 | ENABLE_BITCODE = NO;
362 | INFOPLIST_FILE = Runner/Info.plist;
363 | LD_RUNPATH_SEARCH_PATHS = (
364 | "$(inherited)",
365 | "@executable_path/Frameworks",
366 | );
367 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterDioExample;
368 | PRODUCT_NAME = "$(TARGET_NAME)";
369 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
370 | SWIFT_VERSION = 5.0;
371 | VERSIONING_SYSTEM = "apple-generic";
372 | };
373 | name = Profile;
374 | };
375 | 97C147031CF9000F007C117D /* Debug */ = {
376 | isa = XCBuildConfiguration;
377 | buildSettings = {
378 | ALWAYS_SEARCH_USER_PATHS = NO;
379 | CLANG_ANALYZER_NONNULL = YES;
380 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
381 | CLANG_CXX_LIBRARY = "libc++";
382 | CLANG_ENABLE_MODULES = YES;
383 | CLANG_ENABLE_OBJC_ARC = YES;
384 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
385 | CLANG_WARN_BOOL_CONVERSION = YES;
386 | CLANG_WARN_COMMA = YES;
387 | CLANG_WARN_CONSTANT_CONVERSION = YES;
388 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
389 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
390 | CLANG_WARN_EMPTY_BODY = YES;
391 | CLANG_WARN_ENUM_CONVERSION = YES;
392 | CLANG_WARN_INFINITE_RECURSION = YES;
393 | CLANG_WARN_INT_CONVERSION = YES;
394 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
395 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
396 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
397 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
398 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
399 | CLANG_WARN_STRICT_PROTOTYPES = YES;
400 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
401 | CLANG_WARN_UNREACHABLE_CODE = YES;
402 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
403 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
404 | COPY_PHASE_STRIP = NO;
405 | DEBUG_INFORMATION_FORMAT = dwarf;
406 | ENABLE_STRICT_OBJC_MSGSEND = YES;
407 | ENABLE_TESTABILITY = YES;
408 | GCC_C_LANGUAGE_STANDARD = gnu99;
409 | GCC_DYNAMIC_NO_PIC = NO;
410 | GCC_NO_COMMON_BLOCKS = YES;
411 | GCC_OPTIMIZATION_LEVEL = 0;
412 | GCC_PREPROCESSOR_DEFINITIONS = (
413 | "DEBUG=1",
414 | "$(inherited)",
415 | );
416 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
417 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
418 | GCC_WARN_UNDECLARED_SELECTOR = YES;
419 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
420 | GCC_WARN_UNUSED_FUNCTION = YES;
421 | GCC_WARN_UNUSED_VARIABLE = YES;
422 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
423 | MTL_ENABLE_DEBUG_INFO = YES;
424 | ONLY_ACTIVE_ARCH = YES;
425 | SDKROOT = iphoneos;
426 | TARGETED_DEVICE_FAMILY = "1,2";
427 | };
428 | name = Debug;
429 | };
430 | 97C147041CF9000F007C117D /* Release */ = {
431 | isa = XCBuildConfiguration;
432 | buildSettings = {
433 | ALWAYS_SEARCH_USER_PATHS = NO;
434 | CLANG_ANALYZER_NONNULL = YES;
435 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
436 | CLANG_CXX_LIBRARY = "libc++";
437 | CLANG_ENABLE_MODULES = YES;
438 | CLANG_ENABLE_OBJC_ARC = YES;
439 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
440 | CLANG_WARN_BOOL_CONVERSION = YES;
441 | CLANG_WARN_COMMA = YES;
442 | CLANG_WARN_CONSTANT_CONVERSION = YES;
443 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
444 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
445 | CLANG_WARN_EMPTY_BODY = YES;
446 | CLANG_WARN_ENUM_CONVERSION = YES;
447 | CLANG_WARN_INFINITE_RECURSION = YES;
448 | CLANG_WARN_INT_CONVERSION = YES;
449 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
450 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
451 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
452 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
453 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
454 | CLANG_WARN_STRICT_PROTOTYPES = YES;
455 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
456 | CLANG_WARN_UNREACHABLE_CODE = YES;
457 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
458 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
459 | COPY_PHASE_STRIP = NO;
460 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
461 | ENABLE_NS_ASSERTIONS = NO;
462 | ENABLE_STRICT_OBJC_MSGSEND = YES;
463 | GCC_C_LANGUAGE_STANDARD = gnu99;
464 | GCC_NO_COMMON_BLOCKS = YES;
465 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
466 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
467 | GCC_WARN_UNDECLARED_SELECTOR = YES;
468 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
469 | GCC_WARN_UNUSED_FUNCTION = YES;
470 | GCC_WARN_UNUSED_VARIABLE = YES;
471 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
472 | MTL_ENABLE_DEBUG_INFO = NO;
473 | SDKROOT = iphoneos;
474 | SUPPORTED_PLATFORMS = iphoneos;
475 | SWIFT_COMPILATION_MODE = wholemodule;
476 | SWIFT_OPTIMIZATION_LEVEL = "-O";
477 | TARGETED_DEVICE_FAMILY = "1,2";
478 | VALIDATE_PRODUCT = YES;
479 | };
480 | name = Release;
481 | };
482 | 97C147061CF9000F007C117D /* Debug */ = {
483 | isa = XCBuildConfiguration;
484 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
485 | buildSettings = {
486 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
487 | CLANG_ENABLE_MODULES = YES;
488 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
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.flutterDioExample;
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 | ENABLE_BITCODE = NO;
512 | INFOPLIST_FILE = Runner/Info.plist;
513 | LD_RUNPATH_SEARCH_PATHS = (
514 | "$(inherited)",
515 | "@executable_path/Frameworks",
516 | );
517 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterDioExample;
518 | PRODUCT_NAME = "$(TARGET_NAME)";
519 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
520 | SWIFT_VERSION = 5.0;
521 | VERSIONING_SYSTEM = "apple-generic";
522 | };
523 | name = Release;
524 | };
525 | /* End XCBuildConfiguration section */
526 |
527 | /* Begin XCConfigurationList section */
528 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
529 | isa = XCConfigurationList;
530 | buildConfigurations = (
531 | 97C147031CF9000F007C117D /* Debug */,
532 | 97C147041CF9000F007C117D /* Release */,
533 | 249021D3217E4FDB00AE95B9 /* Profile */,
534 | );
535 | defaultConfigurationIsVisible = 0;
536 | defaultConfigurationName = Release;
537 | };
538 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
539 | isa = XCConfigurationList;
540 | buildConfigurations = (
541 | 97C147061CF9000F007C117D /* Debug */,
542 | 97C147071CF9000F007C117D /* Release */,
543 | 249021D4217E4FDB00AE95B9 /* Profile */,
544 | );
545 | defaultConfigurationIsVisible = 0;
546 | defaultConfigurationName = Release;
547 | };
548 | /* End XCConfigurationList section */
549 | };
550 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
551 | }
552 |
--------------------------------------------------------------------------------