├── ios
├── Runner
│ ├── Runner-Bridging-Header.h
│ ├── Assets.xcassets
│ │ ├── LaunchImage.imageset
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ ├── README.md
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ └── Contents.json
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.storyboard
│ └── Info.plist
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── AppFrameworkInfo.plist
├── Runner.xcodeproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── WorkspaceSettings.xcsettings
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── xcshareddata
│ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ └── project.pbxproj
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
├── Podfile.lock
├── RunnerTests
│ └── RunnerTests.swift
├── .gitignore
└── Podfile
├── lib
├── helpers
│ ├── helpers.dart
│ ├── remap.dart
│ └── spring_simulation.dart
├── main.dart
├── onboarding_page.dart
└── twodos_icon.dart
├── macos
├── Runner
│ ├── Configs
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ ├── Warnings.xcconfig
│ │ └── AppInfo.xcconfig
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── app_icon_16.png
│ │ │ ├── app_icon_32.png
│ │ │ ├── app_icon_64.png
│ │ │ ├── app_icon_1024.png
│ │ │ ├── app_icon_128.png
│ │ │ ├── app_icon_256.png
│ │ │ ├── app_icon_512.png
│ │ │ └── Contents.json
│ ├── AppDelegate.swift
│ ├── Release.entitlements
│ ├── DebugProfile.entitlements
│ ├── MainFlutterWindow.swift
│ ├── Info.plist
│ └── Base.lproj
│ │ └── MainMenu.xib
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ ├── Flutter-Release.xcconfig
│ └── GeneratedPluginRegistrant.swift
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Runner.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── xcshareddata
│ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ └── project.pbxproj
├── RunnerTests
│ └── RunnerTests.swift
├── Podfile.lock
└── Podfile
├── assets
└── fonts
│ ├── SF-Pro-Rounded-Medium.ttf
│ └── SF-Pro-Rounded-Regular.ttf
├── analysis_options.yaml
├── README.md
├── pubspec.yaml
├── .gitignore
├── LICENSE
├── .metadata
└── pubspec.lock
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/helpers/helpers.dart:
--------------------------------------------------------------------------------
1 | export 'remap.dart';
2 | export 'spring_simulation.dart';
3 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Debug.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Release.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/macos/.gitignore:
--------------------------------------------------------------------------------
1 | # Flutter-related
2 | **/Flutter/ephemeral/
3 | **/Pods/
4 |
5 | # Xcode-related
6 | **/dgph
7 | **/xcuserdata/
8 |
--------------------------------------------------------------------------------
/assets/fonts/SF-Pro-Rounded-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/assets/fonts/SF-Pro-Rounded-Medium.ttf
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/assets/fonts/SF-Pro-Rounded-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/assets/fonts/SF-Pro-Rounded-Regular.ttf
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml
2 |
3 | linter:
4 | rules:
5 | public_member_api_docs: false
--------------------------------------------------------------------------------
/macos/Flutter/Flutter-Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "ephemeral/Flutter-Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/macos/Flutter/Flutter-Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "ephemeral/Flutter-Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ksokolovskyi/twodos_onboarding/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/macos/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | @NSApplicationMain
5 | class AppDelegate: FlutterAppDelegate {
6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
7 | return true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/macos/Runner/Release.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/lib/helpers/remap.dart:
--------------------------------------------------------------------------------
1 | extension Remap on double {
2 | double remap({
3 | required double fromLow,
4 | required double fromHigh,
5 | required double toLow,
6 | required double toHigh,
7 | }) {
8 | return (this - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/macos/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Flutter (1.0.0)
3 |
4 | DEPENDENCIES:
5 | - Flutter (from `Flutter`)
6 |
7 | EXTERNAL SOURCES:
8 | Flutter:
9 | :path: Flutter
10 |
11 | SPEC CHECKSUMS:
12 | Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
13 |
14 | PODFILE CHECKSUM: 70d9d25280d0dd177a5f637cdb0f0b0b12c6a189
15 |
16 | COCOAPODS: 1.14.3
17 |
--------------------------------------------------------------------------------
/macos/Flutter/GeneratedPluginRegistrant.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | import FlutterMacOS
6 | import Foundation
7 |
8 | import tactile_feedback
9 |
10 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
11 | TactileFeedbackPlugin.register(with: registry.registrar(forPlugin: "TactileFeedbackPlugin"))
12 | }
13 |
--------------------------------------------------------------------------------
/ios/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 | import XCTest
4 |
5 | class RunnerTests: XCTestCase {
6 |
7 | func testExample() {
8 | // If you add code to the Runner application, consider adding tests here.
9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/macos/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import FlutterMacOS
2 | import Cocoa
3 | import XCTest
4 |
5 | class RunnerTests: XCTestCase {
6 |
7 | func testExample() {
8 | // If you add code to the Runner application, consider adding tests here.
9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Twodos Onboarding
2 |
3 | https://github.com/ksokolovskyi/twodos_onboarding/assets/30288967/159ed5be-029f-46de-8e33-676ee31edd5b
4 |
5 | This demo is made with [Flutter](https://flutter.dev/).
6 |
7 | The author of the idea and the creator of the [Twodos](https://apps.apple.com/ca/app/twodos-simple-todos/id6463499163) app is [Adam Whitcroft](https://twitter.com/AdamWhitcroft).
8 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/macos/Runner/DebugProfile.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.cs.allow-jit
8 |
9 | com.apple.security.network.server
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:twodos_onboarding/onboarding_page.dart';
3 |
4 | void main() {
5 | runApp(const App());
6 | }
7 |
8 | class App extends StatelessWidget {
9 | const App({super.key});
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 | return const MaterialApp(
14 | debugShowCheckedModeBanner: false,
15 | home: OnboardingPage(),
16 | );
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/macos/Runner/MainFlutterWindow.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | class MainFlutterWindow: NSWindow {
5 | override func awakeFromNib() {
6 | let flutterViewController = FlutterViewController()
7 | let windowFrame = self.frame
8 | self.contentViewController = flutterViewController
9 | self.setFrame(windowFrame, display: true)
10 |
11 | RegisterGeneratedPlugins(registry: flutterViewController)
12 |
13 | super.awakeFromNib()
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Warnings.xcconfig:
--------------------------------------------------------------------------------
1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
2 | GCC_WARN_UNDECLARED_SELECTOR = YES
3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
6 | CLANG_WARN_PRAGMA_PACK = YES
7 | CLANG_WARN_STRICT_PROTOTYPES = YES
8 | CLANG_WARN_COMMA = YES
9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES
10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
12 | GCC_WARN_SHADOW = YES
13 | CLANG_WARN_UNREACHABLE_CODE = YES
14 |
--------------------------------------------------------------------------------
/macos/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - FlutterMacOS (1.0.0)
3 | - tactile_feedback (0.0.1):
4 | - FlutterMacOS
5 |
6 | DEPENDENCIES:
7 | - FlutterMacOS (from `Flutter/ephemeral`)
8 | - tactile_feedback (from `Flutter/ephemeral/.symlinks/plugins/tactile_feedback/macos`)
9 |
10 | EXTERNAL SOURCES:
11 | FlutterMacOS:
12 | :path: Flutter/ephemeral
13 | tactile_feedback:
14 | :path: Flutter/ephemeral/.symlinks/plugins/tactile_feedback/macos
15 |
16 | SPEC CHECKSUMS:
17 | FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
18 | tactile_feedback: 1f7f76ae961b62210977f8dba73c625375326dd1
19 |
20 | PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367
21 |
22 | COCOAPODS: 1.14.3
23 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/AppInfo.xcconfig:
--------------------------------------------------------------------------------
1 | // Application-level settings for the Runner target.
2 | //
3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
4 | // future. If not, the values below would default to using the project name when this becomes a
5 | // 'flutter create' template.
6 |
7 | // The application's name. By default this is also the title of the Flutter window.
8 | PRODUCT_NAME = twodos_onboarding
9 |
10 | // The application's bundle identifier
11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.twodosOnboarding
12 |
13 | // The copyright displayed in application information
14 | PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved.
15 |
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | **/dgph
2 | *.mode1v3
3 | *.mode2v3
4 | *.moved-aside
5 | *.pbxuser
6 | *.perspectivev3
7 | **/*sync/
8 | .sconsign.dblite
9 | .tags*
10 | **/.vagrant/
11 | **/DerivedData/
12 | Icon?
13 | **/Pods/
14 | **/.symlinks/
15 | profile
16 | xcuserdata
17 | **/.generated/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/ephemeral/
23 | Flutter/app.flx
24 | Flutter/app.zip
25 | Flutter/flutter_assets/
26 | Flutter/flutter_export_environment.sh
27 | ServiceDefinitions.json
28 | Runner/GeneratedPluginRegistrant.*
29 |
30 | # Exceptions to above rules.
31 | !default.mode1v3
32 | !default.mode2v3
33 | !default.pbxuser
34 | !default.perspectivev3
35 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: twodos_onboarding
2 | description: "Twodos Onboarding"
3 | publish_to: 'none'
4 | version: 1.0.0
5 |
6 | environment:
7 | sdk: '>=3.2.3 <4.0.0'
8 |
9 | dependencies:
10 | cupertino_icons: 1.0.6
11 | flutter:
12 | sdk: flutter
13 | tactile_feedback:
14 | git: https://github.com/ksokolovskyi/tactile_feedback
15 |
16 | dev_dependencies:
17 | flutter_test:
18 | sdk: flutter
19 | very_good_analysis: 5.1.0
20 |
21 | flutter:
22 | fonts:
23 | - family: SF Pro Rounded
24 | fonts:
25 | - asset: assets/fonts/SF-Pro-Rounded-Regular.ttf
26 | weight: 400
27 | - asset: assets/fonts/SF-Pro-Rounded-Medium.ttf
28 | weight: 500
29 |
30 | uses-material-design: false
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 | migrate_working_dir/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 |
19 | # The .vscode folder contains launch configuration and tasks you configure in
20 | # VS Code which you may wish to be included in version control, so this line
21 | # is commented out by default.
22 | .vscode/
23 |
24 | # Flutter/Dart/Pub related
25 | **/doc/api/
26 | **/ios/Flutter/.last_build_id
27 | .dart_tool/
28 | .flutter-plugins
29 | .flutter-plugins-dependencies
30 | .pub-cache/
31 | .pub/
32 | /build/
33 |
34 | # Symbolication related
35 | app.*.symbols
36 |
37 | # Obfuscation related
38 | app.*.map.json
39 |
40 | # Android Studio will place build artifacts here
41 | /android/app/debug
42 | /android/app/profile
43 | /android/app/release
44 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 11.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Kostia Sokolovskyi
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/macos/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(FLUTTER_BUILD_NAME)
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSHumanReadableCopyright
26 | $(PRODUCT_COPYRIGHT)
27 | NSMainNibFile
28 | MainMenu
29 | NSPrincipalClass
30 | NSApplication
31 |
32 |
33 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: "78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9"
8 | channel: "stable"
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
17 | base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
18 | - platform: ios
19 | create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
20 | base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
21 | - platform: macos
22 | create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
23 | base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
24 |
25 | # User provided section
26 |
27 | # List of Local paths (relative to this file) that should be
28 | # ignored by the migrate tool.
29 | #
30 | # Files that are not part of the templates will be ignored by default.
31 | unmanaged_files:
32 | - 'lib/main.dart'
33 | - 'ios/Runner.xcodeproj/project.pbxproj'
34 |
--------------------------------------------------------------------------------
/macos/Podfile:
--------------------------------------------------------------------------------
1 | platform :osx, '10.14'
2 |
3 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
4 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
5 |
6 | project 'Runner', {
7 | 'Debug' => :debug,
8 | 'Profile' => :release,
9 | 'Release' => :release,
10 | }
11 |
12 | def flutter_root
13 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
14 | unless File.exist?(generated_xcode_build_settings_path)
15 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
16 | end
17 |
18 | File.foreach(generated_xcode_build_settings_path) do |line|
19 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
20 | return matches[1].strip if matches
21 | end
22 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
23 | end
24 |
25 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
26 |
27 | flutter_macos_podfile_setup
28 |
29 | target 'Runner' do
30 | use_frameworks!
31 | use_modular_headers!
32 |
33 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
34 | target 'RunnerTests' do
35 | inherit! :search_paths
36 | end
37 | end
38 |
39 | post_install do |installer|
40 | installer.pods_project.targets.each do |target|
41 | flutter_additional_macos_build_settings(target)
42 | end
43 | end
44 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | # platform :ios, '11.0'
3 |
4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
6 |
7 | project 'Runner', {
8 | 'Debug' => :debug,
9 | 'Profile' => :release,
10 | 'Release' => :release,
11 | }
12 |
13 | def flutter_root
14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
15 | unless File.exist?(generated_xcode_build_settings_path)
16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
17 | end
18 |
19 | File.foreach(generated_xcode_build_settings_path) do |line|
20 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
21 | return matches[1].strip if matches
22 | end
23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
24 | end
25 |
26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
27 |
28 | flutter_ios_podfile_setup
29 |
30 | target 'Runner' do
31 | use_frameworks!
32 | use_modular_headers!
33 |
34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
35 | target 'RunnerTests' do
36 | inherit! :search_paths
37 | end
38 | end
39 |
40 | post_install do |installer|
41 | installer.pods_project.targets.each do |target|
42 | flutter_additional_ios_build_settings(target)
43 | end
44 | end
45 |
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "16x16",
5 | "idiom" : "mac",
6 | "filename" : "app_icon_16.png",
7 | "scale" : "1x"
8 | },
9 | {
10 | "size" : "16x16",
11 | "idiom" : "mac",
12 | "filename" : "app_icon_32.png",
13 | "scale" : "2x"
14 | },
15 | {
16 | "size" : "32x32",
17 | "idiom" : "mac",
18 | "filename" : "app_icon_32.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "32x32",
23 | "idiom" : "mac",
24 | "filename" : "app_icon_64.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "128x128",
29 | "idiom" : "mac",
30 | "filename" : "app_icon_128.png",
31 | "scale" : "1x"
32 | },
33 | {
34 | "size" : "128x128",
35 | "idiom" : "mac",
36 | "filename" : "app_icon_256.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "256x256",
41 | "idiom" : "mac",
42 | "filename" : "app_icon_256.png",
43 | "scale" : "1x"
44 | },
45 | {
46 | "size" : "256x256",
47 | "idiom" : "mac",
48 | "filename" : "app_icon_512.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "512x512",
53 | "idiom" : "mac",
54 | "filename" : "app_icon_512.png",
55 | "scale" : "1x"
56 | },
57 | {
58 | "size" : "512x512",
59 | "idiom" : "mac",
60 | "filename" : "app_icon_1024.png",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.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 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | Twodos Onboarding
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | twodos_onboarding
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(FLUTTER_BUILD_NAME)
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | $(FLUTTER_BUILD_NUMBER)
25 | LSRequiresIPhoneOS
26 |
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIMainStoryboardFile
30 | Main
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 | CADisableMinimumFrameDurationOnPhone
45 |
46 | UIApplicationSupportsIndirectInputEvents
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/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/helpers/spring_simulation.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 | import 'package:flutter/gestures.dart';
3 | import 'package:flutter/physics.dart';
4 | import 'package:flutter/scheduler.dart';
5 |
6 | // Copied from https://github.com/ksokolovskyi/avara_homepage/blob/main/lib/spring_simulation.dart
7 | class SpringSimulation2D with ChangeNotifier {
8 | SpringSimulation2D({
9 | required TickerProvider tickerProvider,
10 | required this.spring,
11 | Offset anchorPosition = Offset.zero,
12 | Offset springPosition = Offset.zero,
13 | }) : _anchorPosition = anchorPosition,
14 | _springPosition = springPosition,
15 | _previousVelocity = Offset.zero {
16 | _ticker = tickerProvider.createTicker(_onTick);
17 | }
18 |
19 | final SpringDescription spring;
20 |
21 | late final Ticker _ticker;
22 |
23 | Offset _previousVelocity;
24 |
25 | SpringSimulation? _simulationX;
26 | SpringSimulation? _simulationY;
27 |
28 | Offset _anchorPosition;
29 | Offset get anchorPosition => _anchorPosition;
30 | set anchorPosition(Offset value) {
31 | if (value == _anchorPosition) {
32 | return;
33 | }
34 | end();
35 | _anchorPosition = value;
36 | notifyListeners();
37 | }
38 |
39 | Offset _springPosition;
40 | Offset get springPosition => _springPosition;
41 | set springPosition(Offset value) {
42 | if (value == _springPosition) {
43 | return;
44 | }
45 | end();
46 | _springPosition = value;
47 | notifyListeners();
48 | }
49 |
50 | @override
51 | void dispose() {
52 | _ticker.dispose();
53 | super.dispose();
54 | }
55 |
56 | TickerFuture start() {
57 | _simulationX = SpringSimulation(
58 | spring,
59 | _springPosition.dx,
60 | _anchorPosition.dx,
61 | _previousVelocity.dx,
62 | );
63 |
64 | _simulationY = SpringSimulation(
65 | spring,
66 | _springPosition.dy,
67 | _anchorPosition.dy,
68 | _previousVelocity.dy,
69 | );
70 |
71 | return _ticker.start();
72 | }
73 |
74 | void end() {
75 | _ticker.stop();
76 | }
77 |
78 | void _onTick(Duration elapsedTime) {
79 | assert(_simulationX != null && _simulationY != null, '');
80 |
81 | final simulationX = _simulationX!;
82 | final simulationY = _simulationY!;
83 |
84 | final elapsedSecondsFraction = elapsedTime.inMilliseconds / 1000.0;
85 |
86 | _springPosition = Offset(
87 | simulationX.x(elapsedSecondsFraction),
88 | simulationY.x(elapsedSecondsFraction),
89 | );
90 |
91 | _previousVelocity = Offset(
92 | simulationX.dx(elapsedSecondsFraction),
93 | simulationY.dx(elapsedSecondsFraction),
94 | );
95 |
96 | notifyListeners();
97 |
98 | if (simulationX.isDone(elapsedSecondsFraction) &&
99 | simulationY.isDone(elapsedSecondsFraction)) {
100 | end();
101 | }
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
43 |
49 |
50 |
51 |
52 |
53 |
63 |
65 |
71 |
72 |
73 |
74 |
80 |
82 |
88 |
89 |
90 |
91 |
93 |
94 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
43 |
49 |
50 |
51 |
52 |
53 |
63 |
65 |
71 |
72 |
73 |
74 |
80 |
82 |
88 |
89 |
90 |
91 |
93 |
94 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/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 | boolean_selector:
13 | dependency: transitive
14 | description:
15 | name: boolean_selector
16 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
17 | url: "https://pub.dev"
18 | source: hosted
19 | version: "2.1.1"
20 | characters:
21 | dependency: transitive
22 | description:
23 | name: characters
24 | sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
25 | url: "https://pub.dev"
26 | source: hosted
27 | version: "1.3.0"
28 | clock:
29 | dependency: transitive
30 | description:
31 | name: clock
32 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
33 | url: "https://pub.dev"
34 | source: hosted
35 | version: "1.1.1"
36 | collection:
37 | dependency: transitive
38 | description:
39 | name: collection
40 | sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
41 | url: "https://pub.dev"
42 | source: hosted
43 | version: "1.18.0"
44 | cupertino_icons:
45 | dependency: "direct main"
46 | description:
47 | name: cupertino_icons
48 | sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
49 | url: "https://pub.dev"
50 | source: hosted
51 | version: "1.0.6"
52 | fake_async:
53 | dependency: transitive
54 | description:
55 | name: fake_async
56 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
57 | url: "https://pub.dev"
58 | source: hosted
59 | version: "1.3.1"
60 | flutter:
61 | dependency: "direct main"
62 | description: flutter
63 | source: sdk
64 | version: "0.0.0"
65 | flutter_test:
66 | dependency: "direct dev"
67 | description: flutter
68 | source: sdk
69 | version: "0.0.0"
70 | matcher:
71 | dependency: transitive
72 | description:
73 | name: matcher
74 | sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
75 | url: "https://pub.dev"
76 | source: hosted
77 | version: "0.12.16"
78 | material_color_utilities:
79 | dependency: transitive
80 | description:
81 | name: material_color_utilities
82 | sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
83 | url: "https://pub.dev"
84 | source: hosted
85 | version: "0.5.0"
86 | meta:
87 | dependency: transitive
88 | description:
89 | name: meta
90 | sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
91 | url: "https://pub.dev"
92 | source: hosted
93 | version: "1.10.0"
94 | path:
95 | dependency: transitive
96 | description:
97 | name: path
98 | sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
99 | url: "https://pub.dev"
100 | source: hosted
101 | version: "1.8.3"
102 | plugin_platform_interface:
103 | dependency: transitive
104 | description:
105 | name: plugin_platform_interface
106 | sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
107 | url: "https://pub.dev"
108 | source: hosted
109 | version: "2.1.4"
110 | sky_engine:
111 | dependency: transitive
112 | description: flutter
113 | source: sdk
114 | version: "0.0.99"
115 | source_span:
116 | dependency: transitive
117 | description:
118 | name: source_span
119 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
120 | url: "https://pub.dev"
121 | source: hosted
122 | version: "1.10.0"
123 | stack_trace:
124 | dependency: transitive
125 | description:
126 | name: stack_trace
127 | sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
128 | url: "https://pub.dev"
129 | source: hosted
130 | version: "1.11.1"
131 | stream_channel:
132 | dependency: transitive
133 | description:
134 | name: stream_channel
135 | sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
136 | url: "https://pub.dev"
137 | source: hosted
138 | version: "2.1.2"
139 | string_scanner:
140 | dependency: transitive
141 | description:
142 | name: string_scanner
143 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
144 | url: "https://pub.dev"
145 | source: hosted
146 | version: "1.2.0"
147 | tactile_feedback:
148 | dependency: "direct main"
149 | description:
150 | path: "."
151 | ref: HEAD
152 | resolved-ref: "014245c2d2c2a0a888c37fc63a016141f10956c8"
153 | url: "https://github.com/ksokolovskyi/tactile_feedback"
154 | source: git
155 | version: "1.0.2"
156 | term_glyph:
157 | dependency: transitive
158 | description:
159 | name: term_glyph
160 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
161 | url: "https://pub.dev"
162 | source: hosted
163 | version: "1.2.1"
164 | test_api:
165 | dependency: transitive
166 | description:
167 | name: test_api
168 | sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
169 | url: "https://pub.dev"
170 | source: hosted
171 | version: "0.6.1"
172 | vector_math:
173 | dependency: transitive
174 | description:
175 | name: vector_math
176 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
177 | url: "https://pub.dev"
178 | source: hosted
179 | version: "2.1.4"
180 | very_good_analysis:
181 | dependency: "direct dev"
182 | description:
183 | name: very_good_analysis
184 | sha256: "9ae7f3a3bd5764fb021b335ca28a34f040cd0ab6eec00a1b213b445dae58a4b8"
185 | url: "https://pub.dev"
186 | source: hosted
187 | version: "5.1.0"
188 | web:
189 | dependency: transitive
190 | description:
191 | name: web
192 | sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
193 | url: "https://pub.dev"
194 | source: hosted
195 | version: "0.3.0"
196 | sdks:
197 | dart: ">=3.2.3 <4.0.0"
198 | flutter: ">=2.5.0"
199 |
--------------------------------------------------------------------------------
/lib/onboarding_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/cupertino.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:tactile_feedback/tactile_feedback.dart';
4 | import 'package:twodos_onboarding/helpers/helpers.dart';
5 | import 'package:twodos_onboarding/twodos_icon.dart';
6 |
7 | class OnboardingPage extends StatefulWidget {
8 | const OnboardingPage({super.key});
9 |
10 | @override
11 | State createState() => _OnboardingPageState();
12 | }
13 |
14 | class _OnboardingPageState extends State
15 | with TickerProviderStateMixin {
16 | /// Animation controller that drives the appearance of the page parts.
17 | late final _appearanceController = AnimationController(
18 | vsync: this,
19 | duration: const Duration(milliseconds: 1000),
20 | );
21 |
22 | late final _iconAndTitleOpacity = Tween(begin: 0, end: 1)
23 | .chain(CurveTween(curve: const Interval(0, 0.25, curve: Curves.easeIn)))
24 | .animate(_appearanceController);
25 |
26 | late final _titlePosition = Tween(
27 | begin: const Offset(0, 0.5),
28 | end: Offset.zero,
29 | )
30 | .chain(
31 | CurveTween(curve: const Interval(0, 0.75, curve: ElasticOutCurve(0.7))),
32 | )
33 | .animate(_appearanceController);
34 |
35 | late final _subtitleOpacity = Tween(begin: 0, end: 1)
36 | .chain(CurveTween(curve: const Interval(0.3, 0.55, curve: Curves.easeIn)))
37 | .animate(_appearanceController);
38 |
39 | late final _subtitlePosition = Tween(
40 | begin: const Offset(0, 0.5),
41 | end: Offset.zero,
42 | )
43 | .chain(
44 | CurveTween(curve: const Interval(0.3, 1, curve: ElasticOutCurve(0.7))),
45 | )
46 | .animate(_appearanceController);
47 |
48 | late final _slideToUnlockOpacity = Tween(begin: 0, end: 1)
49 | .chain(CurveTween(curve: const Interval(0.9, 1, curve: Curves.easeIn)))
50 | .animate(_appearanceController);
51 |
52 | /// Spring simulation which is used to create spring effect when drag ends.
53 | late final _springSimulation = SpringSimulation2D(
54 | tickerProvider: this,
55 | spring: const SpringDescription(
56 | mass: 1,
57 | stiffness: 350,
58 | damping: 15,
59 | ),
60 | );
61 |
62 | late final _progress = AnimationController(
63 | vsync: this,
64 | duration: const Duration(milliseconds: 250),
65 | );
66 |
67 | late final _angle = ValueNotifier(0);
68 |
69 | /// Total distance of the current drag in pixels.
70 | var _dragDistance = 0.0;
71 |
72 | /// Whether [_playFeedback] was called after full progress was reached.
73 | var _didNotifyFullProgress = false;
74 |
75 | /// Calculates friction factor according to the [_dragDistance].
76 | double get _frictionFactor {
77 | // Maximum distance for the full friction effect.
78 | const maxDistance = 100.0;
79 | // Maximum friction factor.
80 | const maxFriction = 3.0;
81 |
82 | final normalizedDistance =
83 | _dragDistance.abs().clamp(0.0, maxDistance) / maxDistance;
84 |
85 | return (maxFriction * normalizedDistance) + 1;
86 | }
87 |
88 | @override
89 | void initState() {
90 | super.initState();
91 |
92 | // Starting the appearance animations.
93 | _appearanceController.forward();
94 |
95 | // Setting the initial offset for the spring simulation to create the
96 | // bouncy appearance animation.
97 | _springSimulation
98 | ..springPosition = const Offset(-50, 0)
99 | ..addListener(_maybeUpdateAngle);
100 |
101 | // Setting the initial angle for icon.
102 | _maybeUpdateAngle();
103 |
104 | // Setting the delayed callback for the bouncy appearance animation.
105 | Future.delayed(const Duration(milliseconds: 900), () {
106 | if (!mounted) {
107 | return;
108 | }
109 |
110 | _springSimulation.start();
111 | _playFeedback();
112 | });
113 | }
114 |
115 | @override
116 | void dispose() {
117 | _appearanceController.dispose();
118 | _springSimulation.dispose();
119 | _progress.dispose();
120 | _angle.dispose();
121 | super.dispose();
122 | }
123 |
124 | /// Calculates the new progress value according to the drag progress,
125 | /// updates [_progress] value if needed.
126 | void _maybeUpdateProgress() {
127 | final dragOffset = _springSimulation.springPosition.dx.clamp(0.0, 50.0);
128 | final progress =
129 | dragOffset.remap(fromLow: 0, fromHigh: 50, toLow: 0, toHigh: 1);
130 |
131 | if (_progress.value != progress) {
132 | _progress.value = progress;
133 | }
134 |
135 | if (_progress.value == 1 && !_didNotifyFullProgress) {
136 | _playFeedback();
137 | _didNotifyFullProgress = true;
138 | } else if (_progress.value != 1 && _didNotifyFullProgress) {
139 | _playFeedback();
140 | _didNotifyFullProgress = false;
141 | }
142 | }
143 |
144 | void _resetProgress() {
145 | _progress.reverse();
146 | _didNotifyFullProgress = false;
147 | }
148 |
149 | /// Calculates the new angle value according to the drag progress and
150 | /// updates [_angle] value if needed.
151 | void _maybeUpdateAngle() {
152 | final dragOffset = _springSimulation.springPosition.dx.clamp(-50.0, 200.0);
153 | final angle = switch (dragOffset) {
154 | -50 => 0.0,
155 | > -50 && <= 0 =>
156 | dragOffset.remap(fromLow: -50, fromHigh: 0, toLow: 0, toHigh: 1),
157 | _ => dragOffset.remap(fromLow: 0, fromHigh: 200, toLow: 1, toHigh: 4),
158 | };
159 |
160 | if (_angle.value != angle) {
161 | _angle.value = angle;
162 | }
163 | }
164 |
165 | /// Plays haptic feedback on iOS, Android, and MacOS trackpad.
166 | void _playFeedback() {
167 | TactileFeedback.impact();
168 | }
169 |
170 | @override
171 | Widget build(BuildContext context) {
172 | return GestureDetector(
173 | onHorizontalDragStart: (_) {
174 | _dragDistance = 0;
175 | _springSimulation.end();
176 | },
177 | onHorizontalDragUpdate: (details) {
178 | _dragDistance += details.delta.dx;
179 | _springSimulation.springPosition += details.delta / _frictionFactor;
180 | _maybeUpdateProgress();
181 | },
182 | onHorizontalDragEnd: (_) {
183 | _dragDistance = 0;
184 | _springSimulation.start();
185 | _resetProgress();
186 | _playFeedback();
187 | },
188 | onHorizontalDragCancel: () {
189 | _dragDistance = 0;
190 | _springSimulation.start();
191 | _resetProgress();
192 | _playFeedback();
193 | },
194 | child: Scaffold(
195 | backgroundColor: Colors.white,
196 | body: Center(
197 | child: Column(
198 | mainAxisAlignment: MainAxisAlignment.center,
199 | children: [
200 | FadeTransition(
201 | opacity: _iconAndTitleOpacity,
202 | child: TwodosIcon(
203 | progress: _progress,
204 | angle: _angle,
205 | ),
206 | ),
207 | const SizedBox(height: 30),
208 | FadeTransition(
209 | opacity: _iconAndTitleOpacity,
210 | child: SlideTransition(
211 | position: _titlePosition,
212 | child: const _TitleText(),
213 | ),
214 | ),
215 | const SizedBox(height: 25),
216 | FadeTransition(
217 | opacity: _subtitleOpacity,
218 | child: SlideTransition(
219 | position: _subtitlePosition,
220 | child: const _SubtitleText(),
221 | ),
222 | ),
223 | const SizedBox(height: 25),
224 | RepaintBoundary(
225 | child: FadeTransition(
226 | opacity: _slideToUnlockOpacity,
227 | child: ListenableBuilder(
228 | listenable: _springSimulation,
229 | builder: (context, child) {
230 | return Transform.translate(
231 | offset: _springSimulation.springPosition,
232 | child: child,
233 | );
234 | },
235 | child: const _SlideToUnlockText(),
236 | ),
237 | ),
238 | ),
239 | ],
240 | ),
241 | ),
242 | ),
243 | );
244 | }
245 | }
246 |
247 | class _TitleText extends StatelessWidget {
248 | const _TitleText();
249 |
250 | @override
251 | Widget build(BuildContext context) {
252 | return const Text(
253 | 'Welcome to Twodos',
254 | textAlign: TextAlign.center,
255 | style: TextStyle(
256 | color: Colors.black,
257 | fontSize: 19,
258 | fontFamily: 'SF Pro Rounded',
259 | fontWeight: FontWeight.w500,
260 | height: 23 / 19,
261 | letterSpacing: 0.57,
262 | ),
263 | );
264 | }
265 | }
266 |
267 | class _SubtitleText extends StatelessWidget {
268 | const _SubtitleText();
269 |
270 | @override
271 | Widget build(BuildContext context) {
272 | return const Padding(
273 | padding: EdgeInsets.symmetric(horizontal: 40),
274 | child: Text(
275 | 'A delightfully simple todo app that '
276 | 'respects your focus and privacy.',
277 | textAlign: TextAlign.center,
278 | style: TextStyle(
279 | color: Colors.black,
280 | fontSize: 17,
281 | fontFamily: 'SF Pro Rounded',
282 | fontWeight: FontWeight.w400,
283 | height: 20 / 17,
284 | letterSpacing: 0.39,
285 | ),
286 | ),
287 | );
288 | }
289 | }
290 |
291 | class _SlideToUnlockText extends StatelessWidget {
292 | const _SlideToUnlockText();
293 |
294 | @override
295 | Widget build(BuildContext context) {
296 | return const Row(
297 | mainAxisAlignment: MainAxisAlignment.center,
298 | children: [
299 | Text(
300 | 'Slide to Unlock',
301 | textAlign: TextAlign.center,
302 | style: TextStyle(
303 | color: Color(0xFF8A888A),
304 | fontSize: 17,
305 | fontFamily: 'SF Pro Rounded',
306 | fontWeight: FontWeight.w500,
307 | height: 20 / 17,
308 | letterSpacing: 0.34,
309 | ),
310 | ),
311 | SizedBox(width: 8),
312 | Icon(
313 | CupertinoIcons.arrow_right,
314 | color: Color(0xFF8A888A),
315 | size: 20,
316 | ),
317 | ],
318 | );
319 | }
320 | }
321 |
--------------------------------------------------------------------------------
/lib/twodos_icon.dart:
--------------------------------------------------------------------------------
1 | import 'dart:math' as math;
2 | import 'dart:ui';
3 |
4 | import 'package:flutter/foundation.dart';
5 | import 'package:flutter/material.dart';
6 |
7 | const _frontPageIdleAngle = math.pi / 30;
8 | const _backPageIdleAngle = -math.pi / 25;
9 |
10 | class TwodosIcon extends StatefulWidget {
11 | const TwodosIcon({
12 | required this.progress,
13 | required this.angle,
14 | super.key,
15 | });
16 |
17 | /// Determines the check progress.
18 | ///
19 | /// The value has to be in range [0, 1].
20 | final ValueListenable progress;
21 |
22 | /// Determines the pages' rotation angle.
23 | ///
24 | /// The value has to be in the range [0, n], where n is a positive number.
25 | /// The value will be used to scale the pages' idle angles via multiplication.
26 | /// A higher value will result in a larger angle, while a lower value will
27 | /// result in a smaller angle.
28 | final ValueListenable angle;
29 |
30 | @override
31 | State createState() => _TwodosIconState();
32 | }
33 |
34 | class _TwodosIconState extends State {
35 | final _pagePainter = _PagePainter();
36 |
37 | @override
38 | void dispose() {
39 | _pagePainter.dispose();
40 | super.dispose();
41 | }
42 |
43 | @override
44 | Widget build(BuildContext context) {
45 | return RepaintBoundary(
46 | child: ConstrainedBox(
47 | constraints: const BoxConstraints(maxHeight: 112, maxWidth: 112),
48 | child: AspectRatio(
49 | aspectRatio: 1,
50 | child: Stack(
51 | children: [
52 | ValueListenableBuilder(
53 | valueListenable: widget.angle,
54 | builder: (context, angle, child) {
55 | return Transform.rotate(
56 | angle: _backPageIdleAngle * angle,
57 | alignment: const Alignment(0.5, 0.2),
58 | child: child,
59 | );
60 | },
61 | child: ColorFiltered(
62 | colorFilter: ColorFilter.mode(
63 | Colors.white.withOpacity(0.5),
64 | BlendMode.srcOver,
65 | ),
66 | child: CustomPaint(
67 | size: Size.infinite,
68 | painter: _pagePainter,
69 | ),
70 | ),
71 | ),
72 | ValueListenableBuilder(
73 | valueListenable: widget.angle,
74 | builder: (context, angle, child) {
75 | return Transform.rotate(
76 | angle: _frontPageIdleAngle * angle,
77 | alignment: const Alignment(0.5, 1),
78 | child: child,
79 | );
80 | },
81 | child: CustomPaint(
82 | size: Size.infinite,
83 | painter: _pagePainter,
84 | ),
85 | ),
86 | ValueListenableBuilder(
87 | valueListenable: widget.angle,
88 | builder: (context, angle, child) {
89 | return Transform.rotate(
90 | angle: _frontPageIdleAngle * angle,
91 | alignment: const Alignment(0.5, 1),
92 | child: child,
93 | );
94 | },
95 | child: CustomPaint(
96 | size: Size.infinite,
97 | painter: _CheckPainter(progress: widget.progress),
98 | ),
99 | ),
100 | ],
101 | ),
102 | ),
103 | ),
104 | );
105 | }
106 | }
107 |
108 | class _PagePainter extends CustomPainter {
109 | /// Rect for which [_picture] was recorded.
110 | Rect? _cachedRect;
111 |
112 | /// Recorded picture of the page.
113 | Picture? _picture;
114 |
115 | void dispose() {
116 | _picture?.dispose();
117 | }
118 |
119 | @override
120 | void paint(Canvas canvas, Size size) {
121 | final rect = Offset.zero & size;
122 |
123 | // Check if we need to construct _picture.
124 | // The construction may happen in 2 cases:
125 | // 1) _picture == null || _cachedRect == null (first paint);
126 | // 2) _cachedRect != rect (size has changed).
127 | if (_picture == null || rect != _cachedRect) {
128 | _picture?.dispose();
129 | _cachedRect = rect;
130 |
131 | // Creating the recorder and canvas to record on.
132 | final recorder = PictureRecorder();
133 | final canvas = Canvas(recorder);
134 |
135 | // Drawing shadows.
136 | const shadows = [
137 | BoxShadow(
138 | color: Color(0x40E49907),
139 | blurRadius: 2,
140 | offset: Offset(2.5, 2),
141 | spreadRadius: -2,
142 | ),
143 | BoxShadow(
144 | color: Color(0x40E49907),
145 | blurRadius: 2,
146 | offset: Offset(-2.5, 2),
147 | spreadRadius: -2,
148 | ),
149 | BoxShadow(
150 | color: Color(0x7FB45D03),
151 | blurRadius: 4,
152 | offset: Offset(0, 3),
153 | spreadRadius: -2,
154 | ),
155 | ];
156 |
157 | final backgroundRRect = RRect.fromRectAndRadius(
158 | rect,
159 | const Radius.circular(24),
160 | );
161 |
162 | for (final shadow in shadows) {
163 | final paint = shadow.toPaint();
164 | final rrect =
165 | backgroundRRect.shift(shadow.offset).inflate(shadow.spreadRadius);
166 | canvas.drawRRect(rrect, paint);
167 | }
168 |
169 | // Applying clipping of the lines' parts overflowing the page shape.
170 | canvas.clipRRect(backgroundRRect);
171 |
172 | // Drawing the page background.
173 | const backgroundGradient = LinearGradient(
174 | colors: [
175 | Color(0xFFFEF9EE),
176 | Color(0xFFFEF5E3),
177 | Color(0xFFFDF1D6),
178 | ],
179 | stops: [0, 0.5, 1],
180 | begin: Alignment.topCenter,
181 | end: Alignment.bottomCenter,
182 | );
183 | final backgroundPaint = Paint()
184 | ..shader = backgroundGradient.createShader(rect);
185 |
186 | canvas.drawRRect(backgroundRRect, backgroundPaint);
187 |
188 | // Drawing the border.
189 | const borderWidth = 0.5;
190 | const borderGradient = LinearGradient(
191 | colors: [
192 | Color(0xFFFCF7EF),
193 | Color(0xFFF6EBE1),
194 | Color(0xFFDCCEBC),
195 | Color(0xFFDCCEBA),
196 | Color(0xFFE0C1A0),
197 | Color(0xFFD5B58E),
198 | ],
199 | stops: [0, 0.1, 0.35, 0.5, 0.8, 1],
200 | begin: Alignment.topCenter,
201 | end: Alignment.bottomCenter,
202 | );
203 | final borderPaint = Paint()
204 | ..shader = borderGradient.createShader(rect)
205 | ..strokeWidth = borderWidth
206 | ..style = PaintingStyle.stroke;
207 |
208 | canvas.drawRRect(
209 | backgroundRRect.deflate(borderWidth / 2),
210 | borderPaint,
211 | );
212 |
213 | // Drawing red vertical line.
214 | const lineWidth = 0.75;
215 | const spaceBetween = 16.55;
216 | const totalHeight = spaceBetween * 5 + lineWidth * 6;
217 | final topPadding = (rect.height - totalHeight) / 2;
218 |
219 | var dy = topPadding + lineWidth / 2;
220 | for (var i = 0; i < 6; i++) {
221 | canvas.drawLine(
222 | Offset(rect.left, dy),
223 | Offset(rect.right, dy),
224 | Paint()
225 | ..color = const Color(0xFF154EE1).withOpacity(0.2)
226 | ..strokeWidth = lineWidth,
227 | );
228 | dy += spaceBetween + lineWidth;
229 | }
230 |
231 | // Drawing blue horizontal lines.
232 | const dx = 12 + lineWidth / 2;
233 | canvas.drawLine(
234 | Offset(dx, rect.top),
235 | Offset(dx, rect.bottom),
236 | Paint()
237 | ..color = const Color(0xFFCA3100).withOpacity(0.2)
238 | ..strokeWidth = lineWidth,
239 | );
240 |
241 | _picture = recorder.endRecording();
242 | }
243 |
244 | assert(_picture != null, 'On this step picture have to be initialized');
245 |
246 | // Drawing the cached picture.
247 | canvas.drawPicture(_picture!);
248 | }
249 |
250 | @override
251 | bool shouldRepaint(covariant CustomPainter oldDelegate) {
252 | return false;
253 | }
254 | }
255 |
256 | class _CheckPainter extends CustomPainter {
257 | _CheckPainter({required this.progress}) : super(repaint: progress);
258 |
259 | final ValueListenable progress;
260 |
261 | @override
262 | void paint(Canvas canvas, Size size) {
263 | final rect = Offset.zero & size;
264 |
265 | // Drawing the border.
266 | const radius = 20.0;
267 | const checkBorderWidth = 7.0;
268 |
269 | final checkBorderRRect = RRect.fromRectAndRadius(
270 | rect.deflate(20 + checkBorderWidth / 2),
271 | const Radius.circular(radius),
272 | );
273 | final checkBorderPaint = Paint()
274 | ..color = const Color(0x33E5A901)
275 | ..style = PaintingStyle.stroke
276 | ..strokeWidth = checkBorderWidth;
277 | canvas.drawRRect(checkBorderRRect, checkBorderPaint);
278 |
279 | // Drawing the check.
280 | final checkRect = Rect.fromCenter(
281 | center: rect.center,
282 | width: 36,
283 | height: 36,
284 | );
285 | final checkPath = Path()
286 | ..moveTo(checkRect.left + 4.95, checkRect.top + 22.9)
287 | ..lineTo(checkRect.left + 15.97, checkRect.top + 32)
288 | ..lineTo(checkRect.left + 31.02, checkRect.top + 7.54);
289 |
290 | canvas.drawPath(
291 | checkPath,
292 | Paint()
293 | ..color = Colors.black
294 | ..style = PaintingStyle.stroke
295 | ..strokeWidth = 6
296 | ..strokeCap = StrokeCap.round
297 | ..strokeJoin = StrokeJoin.round
298 | ..strokeMiterLimit = 30,
299 | );
300 |
301 | // Skip further drawings if progress equals 0.
302 | if (progress.value == 0) {
303 | return;
304 | }
305 |
306 | final progressPaint = Paint()
307 | ..color = Colors.black
308 | ..style = PaintingStyle.stroke
309 | ..strokeWidth = checkBorderWidth
310 | ..strokeCap = StrokeCap.round;
311 |
312 | // If progress equals 1, then drawing solid RRect to improve performance.
313 | if (progress.value == 1) {
314 | canvas.drawRRect(checkBorderRRect, progressPaint);
315 | return;
316 | }
317 |
318 | // Drawing the progress border.
319 | final progressPath = Path()
320 | ..moveTo(
321 | checkBorderRRect.right - checkBorderRRect.width / 2,
322 | checkBorderRRect.top,
323 | )
324 | ..lineTo(checkBorderRRect.right - radius, checkBorderRRect.top)
325 | ..arcToPoint(
326 | Offset(checkBorderRRect.right, checkBorderRRect.top + radius),
327 | radius: const Radius.circular(radius),
328 | )
329 | ..lineTo(checkBorderRRect.right, checkBorderRRect.bottom - radius)
330 | ..arcToPoint(
331 | Offset(checkBorderRRect.right - radius, checkBorderRRect.bottom),
332 | radius: const Radius.circular(radius),
333 | )
334 | ..lineTo(checkBorderRRect.left + radius, checkBorderRRect.bottom)
335 | ..arcToPoint(
336 | Offset(checkBorderRRect.left, checkBorderRRect.bottom - radius),
337 | radius: const Radius.circular(radius),
338 | )
339 | ..lineTo(checkBorderRRect.left, checkBorderRRect.top + radius)
340 | ..arcToPoint(
341 | Offset(checkBorderRRect.left + radius, checkBorderRRect.top),
342 | radius: const Radius.circular(radius),
343 | )
344 | ..close();
345 |
346 | final metric = progressPath.computeMetrics().first;
347 |
348 | canvas.drawPath(
349 | metric.extractPath(0, metric.length * progress.value),
350 | progressPaint,
351 | );
352 | }
353 |
354 | @override
355 | bool shouldRepaint(_CheckPainter oldDelegate) {
356 | return oldDelegate.progress != progress;
357 | }
358 | }
359 |
--------------------------------------------------------------------------------
/macos/Runner/Base.lproj/MainMenu.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
--------------------------------------------------------------------------------
/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 | 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
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 | D48E61082F13CD1B19853B7A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4B3E0146C8EFD21EFCFCB3C /* Pods_Runner.framework */; };
18 | EEBBFA27FD673B0497DD3386 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 514308C0499F82D18CEDDB63 /* Pods_RunnerTests.framework */; };
19 | /* End PBXBuildFile section */
20 |
21 | /* Begin PBXContainerItemProxy section */
22 | 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
23 | isa = PBXContainerItemProxy;
24 | containerPortal = 97C146E61CF9000F007C117D /* Project object */;
25 | proxyType = 1;
26 | remoteGlobalIDString = 97C146ED1CF9000F007C117D;
27 | remoteInfo = Runner;
28 | };
29 | /* End PBXContainerItemProxy section */
30 |
31 | /* Begin PBXCopyFilesBuildPhase section */
32 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
33 | isa = PBXCopyFilesBuildPhase;
34 | buildActionMask = 2147483647;
35 | dstPath = "";
36 | dstSubfolderSpec = 10;
37 | files = (
38 | );
39 | name = "Embed Frameworks";
40 | runOnlyForDeploymentPostprocessing = 0;
41 | };
42 | /* End PBXCopyFilesBuildPhase section */
43 |
44 | /* Begin PBXFileReference section */
45 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
46 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
47 | 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
48 | 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
49 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
50 | 514308C0499F82D18CEDDB63 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
51 | 5D9EB81163A7017A2F9CEE7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
52 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
53 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
54 | 76622F1FBFB5B753AA9BA6B1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
55 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
56 | 8A05359F696FE30FEA747FBE /* 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 = ""; };
57 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
58 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
59 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
60 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
61 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
62 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
63 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
64 | 9E73E896E81FCBB50AA4198C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
65 | C884E7E0406B693165C7AE96 /* 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 = ""; };
66 | E4B3E0146C8EFD21EFCFCB3C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
67 | EC76FBD1B0E5EBAEE189BEDF /* 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 = ""; };
68 | /* End PBXFileReference section */
69 |
70 | /* Begin PBXFrameworksBuildPhase section */
71 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
72 | isa = PBXFrameworksBuildPhase;
73 | buildActionMask = 2147483647;
74 | files = (
75 | D48E61082F13CD1B19853B7A /* Pods_Runner.framework in Frameworks */,
76 | );
77 | runOnlyForDeploymentPostprocessing = 0;
78 | };
79 | C1651EAF523145B8F9FD4A5C /* Frameworks */ = {
80 | isa = PBXFrameworksBuildPhase;
81 | buildActionMask = 2147483647;
82 | files = (
83 | EEBBFA27FD673B0497DD3386 /* Pods_RunnerTests.framework in Frameworks */,
84 | );
85 | runOnlyForDeploymentPostprocessing = 0;
86 | };
87 | /* End PBXFrameworksBuildPhase section */
88 |
89 | /* Begin PBXGroup section */
90 | 331C8082294A63A400263BE5 /* RunnerTests */ = {
91 | isa = PBXGroup;
92 | children = (
93 | 331C807B294A618700263BE5 /* RunnerTests.swift */,
94 | );
95 | path = RunnerTests;
96 | sourceTree = "";
97 | };
98 | 9740EEB11CF90186004384FC /* Flutter */ = {
99 | isa = PBXGroup;
100 | children = (
101 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
102 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
103 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
104 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
105 | );
106 | name = Flutter;
107 | sourceTree = "";
108 | };
109 | 97C146E51CF9000F007C117D = {
110 | isa = PBXGroup;
111 | children = (
112 | 9740EEB11CF90186004384FC /* Flutter */,
113 | 97C146F01CF9000F007C117D /* Runner */,
114 | 97C146EF1CF9000F007C117D /* Products */,
115 | 331C8082294A63A400263BE5 /* RunnerTests */,
116 | EB57B3B4B7856245C93B4F79 /* Pods */,
117 | F46BD22EC9B54D3653D0DFE1 /* Frameworks */,
118 | );
119 | sourceTree = "";
120 | };
121 | 97C146EF1CF9000F007C117D /* Products */ = {
122 | isa = PBXGroup;
123 | children = (
124 | 97C146EE1CF9000F007C117D /* Runner.app */,
125 | 331C8081294A63A400263BE5 /* RunnerTests.xctest */,
126 | );
127 | name = Products;
128 | sourceTree = "";
129 | };
130 | 97C146F01CF9000F007C117D /* Runner */ = {
131 | isa = PBXGroup;
132 | children = (
133 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
134 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
135 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
136 | 97C147021CF9000F007C117D /* Info.plist */,
137 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
138 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
139 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
140 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
141 | );
142 | path = Runner;
143 | sourceTree = "";
144 | };
145 | EB57B3B4B7856245C93B4F79 /* Pods */ = {
146 | isa = PBXGroup;
147 | children = (
148 | C884E7E0406B693165C7AE96 /* Pods-Runner.debug.xcconfig */,
149 | EC76FBD1B0E5EBAEE189BEDF /* Pods-Runner.release.xcconfig */,
150 | 8A05359F696FE30FEA747FBE /* Pods-Runner.profile.xcconfig */,
151 | 5D9EB81163A7017A2F9CEE7A /* Pods-RunnerTests.debug.xcconfig */,
152 | 9E73E896E81FCBB50AA4198C /* Pods-RunnerTests.release.xcconfig */,
153 | 76622F1FBFB5B753AA9BA6B1 /* Pods-RunnerTests.profile.xcconfig */,
154 | );
155 | name = Pods;
156 | path = Pods;
157 | sourceTree = "";
158 | };
159 | F46BD22EC9B54D3653D0DFE1 /* Frameworks */ = {
160 | isa = PBXGroup;
161 | children = (
162 | E4B3E0146C8EFD21EFCFCB3C /* Pods_Runner.framework */,
163 | 514308C0499F82D18CEDDB63 /* Pods_RunnerTests.framework */,
164 | );
165 | name = Frameworks;
166 | sourceTree = "";
167 | };
168 | /* End PBXGroup section */
169 |
170 | /* Begin PBXNativeTarget section */
171 | 331C8080294A63A400263BE5 /* RunnerTests */ = {
172 | isa = PBXNativeTarget;
173 | buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
174 | buildPhases = (
175 | 962A9829B3234389E490E7A0 /* [CP] Check Pods Manifest.lock */,
176 | 331C807D294A63A400263BE5 /* Sources */,
177 | 331C807F294A63A400263BE5 /* Resources */,
178 | C1651EAF523145B8F9FD4A5C /* Frameworks */,
179 | );
180 | buildRules = (
181 | );
182 | dependencies = (
183 | 331C8086294A63A400263BE5 /* PBXTargetDependency */,
184 | );
185 | name = RunnerTests;
186 | productName = RunnerTests;
187 | productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
188 | productType = "com.apple.product-type.bundle.unit-test";
189 | };
190 | 97C146ED1CF9000F007C117D /* Runner */ = {
191 | isa = PBXNativeTarget;
192 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
193 | buildPhases = (
194 | 34B70147383D63CF3DAC118A /* [CP] Check Pods Manifest.lock */,
195 | 9740EEB61CF901F6004384FC /* Run Script */,
196 | 97C146EA1CF9000F007C117D /* Sources */,
197 | 97C146EB1CF9000F007C117D /* Frameworks */,
198 | 97C146EC1CF9000F007C117D /* Resources */,
199 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
200 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
201 | );
202 | buildRules = (
203 | );
204 | dependencies = (
205 | );
206 | name = Runner;
207 | productName = Runner;
208 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
209 | productType = "com.apple.product-type.application";
210 | };
211 | /* End PBXNativeTarget section */
212 |
213 | /* Begin PBXProject section */
214 | 97C146E61CF9000F007C117D /* Project object */ = {
215 | isa = PBXProject;
216 | attributes = {
217 | BuildIndependentTargetsInParallel = YES;
218 | LastUpgradeCheck = 1430;
219 | ORGANIZATIONNAME = "";
220 | TargetAttributes = {
221 | 331C8080294A63A400263BE5 = {
222 | CreatedOnToolsVersion = 14.0;
223 | TestTargetID = 97C146ED1CF9000F007C117D;
224 | };
225 | 97C146ED1CF9000F007C117D = {
226 | CreatedOnToolsVersion = 7.3.1;
227 | LastSwiftMigration = 1100;
228 | };
229 | };
230 | };
231 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
232 | compatibilityVersion = "Xcode 9.3";
233 | developmentRegion = en;
234 | hasScannedForEncodings = 0;
235 | knownRegions = (
236 | en,
237 | Base,
238 | );
239 | mainGroup = 97C146E51CF9000F007C117D;
240 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
241 | projectDirPath = "";
242 | projectRoot = "";
243 | targets = (
244 | 97C146ED1CF9000F007C117D /* Runner */,
245 | 331C8080294A63A400263BE5 /* RunnerTests */,
246 | );
247 | };
248 | /* End PBXProject section */
249 |
250 | /* Begin PBXResourcesBuildPhase section */
251 | 331C807F294A63A400263BE5 /* Resources */ = {
252 | isa = PBXResourcesBuildPhase;
253 | buildActionMask = 2147483647;
254 | files = (
255 | );
256 | runOnlyForDeploymentPostprocessing = 0;
257 | };
258 | 97C146EC1CF9000F007C117D /* Resources */ = {
259 | isa = PBXResourcesBuildPhase;
260 | buildActionMask = 2147483647;
261 | files = (
262 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
263 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
264 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
265 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
266 | );
267 | runOnlyForDeploymentPostprocessing = 0;
268 | };
269 | /* End PBXResourcesBuildPhase section */
270 |
271 | /* Begin PBXShellScriptBuildPhase section */
272 | 34B70147383D63CF3DAC118A /* [CP] Check Pods Manifest.lock */ = {
273 | isa = PBXShellScriptBuildPhase;
274 | buildActionMask = 2147483647;
275 | files = (
276 | );
277 | inputFileListPaths = (
278 | );
279 | inputPaths = (
280 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
281 | "${PODS_ROOT}/Manifest.lock",
282 | );
283 | name = "[CP] Check Pods Manifest.lock";
284 | outputFileListPaths = (
285 | );
286 | outputPaths = (
287 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
288 | );
289 | runOnlyForDeploymentPostprocessing = 0;
290 | shellPath = /bin/sh;
291 | 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";
292 | showEnvVarsInLog = 0;
293 | };
294 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
295 | isa = PBXShellScriptBuildPhase;
296 | alwaysOutOfDate = 1;
297 | buildActionMask = 2147483647;
298 | files = (
299 | );
300 | inputPaths = (
301 | "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
302 | );
303 | name = "Thin Binary";
304 | outputPaths = (
305 | );
306 | runOnlyForDeploymentPostprocessing = 0;
307 | shellPath = /bin/sh;
308 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
309 | };
310 | 962A9829B3234389E490E7A0 /* [CP] Check Pods Manifest.lock */ = {
311 | isa = PBXShellScriptBuildPhase;
312 | buildActionMask = 2147483647;
313 | files = (
314 | );
315 | inputFileListPaths = (
316 | );
317 | inputPaths = (
318 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
319 | "${PODS_ROOT}/Manifest.lock",
320 | );
321 | name = "[CP] Check Pods Manifest.lock";
322 | outputFileListPaths = (
323 | );
324 | outputPaths = (
325 | "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
326 | );
327 | runOnlyForDeploymentPostprocessing = 0;
328 | shellPath = /bin/sh;
329 | 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";
330 | showEnvVarsInLog = 0;
331 | };
332 | 9740EEB61CF901F6004384FC /* Run Script */ = {
333 | isa = PBXShellScriptBuildPhase;
334 | alwaysOutOfDate = 1;
335 | buildActionMask = 2147483647;
336 | files = (
337 | );
338 | inputPaths = (
339 | );
340 | name = "Run Script";
341 | outputPaths = (
342 | );
343 | runOnlyForDeploymentPostprocessing = 0;
344 | shellPath = /bin/sh;
345 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
346 | };
347 | /* End PBXShellScriptBuildPhase section */
348 |
349 | /* Begin PBXSourcesBuildPhase section */
350 | 331C807D294A63A400263BE5 /* Sources */ = {
351 | isa = PBXSourcesBuildPhase;
352 | buildActionMask = 2147483647;
353 | files = (
354 | 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
355 | );
356 | runOnlyForDeploymentPostprocessing = 0;
357 | };
358 | 97C146EA1CF9000F007C117D /* Sources */ = {
359 | isa = PBXSourcesBuildPhase;
360 | buildActionMask = 2147483647;
361 | files = (
362 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
363 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
364 | );
365 | runOnlyForDeploymentPostprocessing = 0;
366 | };
367 | /* End PBXSourcesBuildPhase section */
368 |
369 | /* Begin PBXTargetDependency section */
370 | 331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
371 | isa = PBXTargetDependency;
372 | target = 97C146ED1CF9000F007C117D /* Runner */;
373 | targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
374 | };
375 | /* End PBXTargetDependency section */
376 |
377 | /* Begin PBXVariantGroup section */
378 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
379 | isa = PBXVariantGroup;
380 | children = (
381 | 97C146FB1CF9000F007C117D /* Base */,
382 | );
383 | name = Main.storyboard;
384 | sourceTree = "";
385 | };
386 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
387 | isa = PBXVariantGroup;
388 | children = (
389 | 97C147001CF9000F007C117D /* Base */,
390 | );
391 | name = LaunchScreen.storyboard;
392 | sourceTree = "";
393 | };
394 | /* End PBXVariantGroup section */
395 |
396 | /* Begin XCBuildConfiguration section */
397 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
398 | isa = XCBuildConfiguration;
399 | buildSettings = {
400 | ALWAYS_SEARCH_USER_PATHS = NO;
401 | CLANG_ANALYZER_NONNULL = YES;
402 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
403 | CLANG_CXX_LIBRARY = "libc++";
404 | CLANG_ENABLE_MODULES = YES;
405 | CLANG_ENABLE_OBJC_ARC = YES;
406 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
407 | CLANG_WARN_BOOL_CONVERSION = YES;
408 | CLANG_WARN_COMMA = YES;
409 | CLANG_WARN_CONSTANT_CONVERSION = YES;
410 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
411 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
412 | CLANG_WARN_EMPTY_BODY = YES;
413 | CLANG_WARN_ENUM_CONVERSION = YES;
414 | CLANG_WARN_INFINITE_RECURSION = YES;
415 | CLANG_WARN_INT_CONVERSION = YES;
416 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
417 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
418 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
419 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
420 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
421 | CLANG_WARN_STRICT_PROTOTYPES = YES;
422 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
423 | CLANG_WARN_UNREACHABLE_CODE = YES;
424 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
425 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
426 | COPY_PHASE_STRIP = NO;
427 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
428 | ENABLE_NS_ASSERTIONS = NO;
429 | ENABLE_STRICT_OBJC_MSGSEND = YES;
430 | GCC_C_LANGUAGE_STANDARD = gnu99;
431 | GCC_NO_COMMON_BLOCKS = YES;
432 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
433 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
434 | GCC_WARN_UNDECLARED_SELECTOR = YES;
435 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
436 | GCC_WARN_UNUSED_FUNCTION = YES;
437 | GCC_WARN_UNUSED_VARIABLE = YES;
438 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
439 | MTL_ENABLE_DEBUG_INFO = NO;
440 | SDKROOT = iphoneos;
441 | SUPPORTED_PLATFORMS = iphoneos;
442 | TARGETED_DEVICE_FAMILY = "1,2";
443 | VALIDATE_PRODUCT = YES;
444 | };
445 | name = Profile;
446 | };
447 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
448 | isa = XCBuildConfiguration;
449 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
450 | buildSettings = {
451 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
452 | CLANG_ENABLE_MODULES = YES;
453 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
454 | DEVELOPMENT_TEAM = 7Z8954849U;
455 | ENABLE_BITCODE = NO;
456 | INFOPLIST_FILE = Runner/Info.plist;
457 | LD_RUNPATH_SEARCH_PATHS = (
458 | "$(inherited)",
459 | "@executable_path/Frameworks",
460 | );
461 | PRODUCT_BUNDLE_IDENTIFIER = com.example.twodosOnboarding;
462 | PRODUCT_NAME = "$(TARGET_NAME)";
463 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
464 | SWIFT_VERSION = 5.0;
465 | VERSIONING_SYSTEM = "apple-generic";
466 | };
467 | name = Profile;
468 | };
469 | 331C8088294A63A400263BE5 /* Debug */ = {
470 | isa = XCBuildConfiguration;
471 | baseConfigurationReference = 5D9EB81163A7017A2F9CEE7A /* Pods-RunnerTests.debug.xcconfig */;
472 | buildSettings = {
473 | BUNDLE_LOADER = "$(TEST_HOST)";
474 | CODE_SIGN_STYLE = Automatic;
475 | CURRENT_PROJECT_VERSION = 1;
476 | GENERATE_INFOPLIST_FILE = YES;
477 | MARKETING_VERSION = 1.0;
478 | PRODUCT_BUNDLE_IDENTIFIER = com.example.twodosOnboarding.RunnerTests;
479 | PRODUCT_NAME = "$(TARGET_NAME)";
480 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
481 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
482 | SWIFT_VERSION = 5.0;
483 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
484 | };
485 | name = Debug;
486 | };
487 | 331C8089294A63A400263BE5 /* Release */ = {
488 | isa = XCBuildConfiguration;
489 | baseConfigurationReference = 9E73E896E81FCBB50AA4198C /* Pods-RunnerTests.release.xcconfig */;
490 | buildSettings = {
491 | BUNDLE_LOADER = "$(TEST_HOST)";
492 | CODE_SIGN_STYLE = Automatic;
493 | CURRENT_PROJECT_VERSION = 1;
494 | GENERATE_INFOPLIST_FILE = YES;
495 | MARKETING_VERSION = 1.0;
496 | PRODUCT_BUNDLE_IDENTIFIER = com.example.twodosOnboarding.RunnerTests;
497 | PRODUCT_NAME = "$(TARGET_NAME)";
498 | SWIFT_VERSION = 5.0;
499 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
500 | };
501 | name = Release;
502 | };
503 | 331C808A294A63A400263BE5 /* Profile */ = {
504 | isa = XCBuildConfiguration;
505 | baseConfigurationReference = 76622F1FBFB5B753AA9BA6B1 /* Pods-RunnerTests.profile.xcconfig */;
506 | buildSettings = {
507 | BUNDLE_LOADER = "$(TEST_HOST)";
508 | CODE_SIGN_STYLE = Automatic;
509 | CURRENT_PROJECT_VERSION = 1;
510 | GENERATE_INFOPLIST_FILE = YES;
511 | MARKETING_VERSION = 1.0;
512 | PRODUCT_BUNDLE_IDENTIFIER = com.example.twodosOnboarding.RunnerTests;
513 | PRODUCT_NAME = "$(TARGET_NAME)";
514 | SWIFT_VERSION = 5.0;
515 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
516 | };
517 | name = Profile;
518 | };
519 | 97C147031CF9000F007C117D /* Debug */ = {
520 | isa = XCBuildConfiguration;
521 | buildSettings = {
522 | ALWAYS_SEARCH_USER_PATHS = NO;
523 | CLANG_ANALYZER_NONNULL = YES;
524 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
525 | CLANG_CXX_LIBRARY = "libc++";
526 | CLANG_ENABLE_MODULES = YES;
527 | CLANG_ENABLE_OBJC_ARC = YES;
528 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
529 | CLANG_WARN_BOOL_CONVERSION = YES;
530 | CLANG_WARN_COMMA = YES;
531 | CLANG_WARN_CONSTANT_CONVERSION = YES;
532 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
533 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
534 | CLANG_WARN_EMPTY_BODY = YES;
535 | CLANG_WARN_ENUM_CONVERSION = YES;
536 | CLANG_WARN_INFINITE_RECURSION = YES;
537 | CLANG_WARN_INT_CONVERSION = YES;
538 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
539 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
540 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
541 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
542 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
543 | CLANG_WARN_STRICT_PROTOTYPES = YES;
544 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
545 | CLANG_WARN_UNREACHABLE_CODE = YES;
546 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
547 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
548 | COPY_PHASE_STRIP = NO;
549 | DEBUG_INFORMATION_FORMAT = dwarf;
550 | ENABLE_STRICT_OBJC_MSGSEND = YES;
551 | ENABLE_TESTABILITY = YES;
552 | GCC_C_LANGUAGE_STANDARD = gnu99;
553 | GCC_DYNAMIC_NO_PIC = NO;
554 | GCC_NO_COMMON_BLOCKS = YES;
555 | GCC_OPTIMIZATION_LEVEL = 0;
556 | GCC_PREPROCESSOR_DEFINITIONS = (
557 | "DEBUG=1",
558 | "$(inherited)",
559 | );
560 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
561 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
562 | GCC_WARN_UNDECLARED_SELECTOR = YES;
563 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
564 | GCC_WARN_UNUSED_FUNCTION = YES;
565 | GCC_WARN_UNUSED_VARIABLE = YES;
566 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
567 | MTL_ENABLE_DEBUG_INFO = YES;
568 | ONLY_ACTIVE_ARCH = YES;
569 | SDKROOT = iphoneos;
570 | TARGETED_DEVICE_FAMILY = "1,2";
571 | };
572 | name = Debug;
573 | };
574 | 97C147041CF9000F007C117D /* Release */ = {
575 | isa = XCBuildConfiguration;
576 | buildSettings = {
577 | ALWAYS_SEARCH_USER_PATHS = NO;
578 | CLANG_ANALYZER_NONNULL = YES;
579 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
580 | CLANG_CXX_LIBRARY = "libc++";
581 | CLANG_ENABLE_MODULES = YES;
582 | CLANG_ENABLE_OBJC_ARC = YES;
583 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
584 | CLANG_WARN_BOOL_CONVERSION = YES;
585 | CLANG_WARN_COMMA = YES;
586 | CLANG_WARN_CONSTANT_CONVERSION = YES;
587 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
588 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
589 | CLANG_WARN_EMPTY_BODY = YES;
590 | CLANG_WARN_ENUM_CONVERSION = YES;
591 | CLANG_WARN_INFINITE_RECURSION = YES;
592 | CLANG_WARN_INT_CONVERSION = YES;
593 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
594 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
595 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
596 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
597 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
598 | CLANG_WARN_STRICT_PROTOTYPES = YES;
599 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
600 | CLANG_WARN_UNREACHABLE_CODE = YES;
601 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
602 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
603 | COPY_PHASE_STRIP = NO;
604 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
605 | ENABLE_NS_ASSERTIONS = NO;
606 | ENABLE_STRICT_OBJC_MSGSEND = YES;
607 | GCC_C_LANGUAGE_STANDARD = gnu99;
608 | GCC_NO_COMMON_BLOCKS = YES;
609 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
610 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
611 | GCC_WARN_UNDECLARED_SELECTOR = YES;
612 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
613 | GCC_WARN_UNUSED_FUNCTION = YES;
614 | GCC_WARN_UNUSED_VARIABLE = YES;
615 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
616 | MTL_ENABLE_DEBUG_INFO = NO;
617 | SDKROOT = iphoneos;
618 | SUPPORTED_PLATFORMS = iphoneos;
619 | SWIFT_COMPILATION_MODE = wholemodule;
620 | SWIFT_OPTIMIZATION_LEVEL = "-O";
621 | TARGETED_DEVICE_FAMILY = "1,2";
622 | VALIDATE_PRODUCT = YES;
623 | };
624 | name = Release;
625 | };
626 | 97C147061CF9000F007C117D /* Debug */ = {
627 | isa = XCBuildConfiguration;
628 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
629 | buildSettings = {
630 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
631 | CLANG_ENABLE_MODULES = YES;
632 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
633 | DEVELOPMENT_TEAM = 7Z8954849U;
634 | ENABLE_BITCODE = NO;
635 | INFOPLIST_FILE = Runner/Info.plist;
636 | LD_RUNPATH_SEARCH_PATHS = (
637 | "$(inherited)",
638 | "@executable_path/Frameworks",
639 | );
640 | PRODUCT_BUNDLE_IDENTIFIER = com.example.twodosOnboarding;
641 | PRODUCT_NAME = "$(TARGET_NAME)";
642 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
643 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
644 | SWIFT_VERSION = 5.0;
645 | VERSIONING_SYSTEM = "apple-generic";
646 | };
647 | name = Debug;
648 | };
649 | 97C147071CF9000F007C117D /* Release */ = {
650 | isa = XCBuildConfiguration;
651 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
652 | buildSettings = {
653 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
654 | CLANG_ENABLE_MODULES = YES;
655 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
656 | DEVELOPMENT_TEAM = 7Z8954849U;
657 | ENABLE_BITCODE = NO;
658 | INFOPLIST_FILE = Runner/Info.plist;
659 | LD_RUNPATH_SEARCH_PATHS = (
660 | "$(inherited)",
661 | "@executable_path/Frameworks",
662 | );
663 | PRODUCT_BUNDLE_IDENTIFIER = com.example.twodosOnboarding;
664 | PRODUCT_NAME = "$(TARGET_NAME)";
665 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
666 | SWIFT_VERSION = 5.0;
667 | VERSIONING_SYSTEM = "apple-generic";
668 | };
669 | name = Release;
670 | };
671 | /* End XCBuildConfiguration section */
672 |
673 | /* Begin XCConfigurationList section */
674 | 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
675 | isa = XCConfigurationList;
676 | buildConfigurations = (
677 | 331C8088294A63A400263BE5 /* Debug */,
678 | 331C8089294A63A400263BE5 /* Release */,
679 | 331C808A294A63A400263BE5 /* Profile */,
680 | );
681 | defaultConfigurationIsVisible = 0;
682 | defaultConfigurationName = Release;
683 | };
684 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
685 | isa = XCConfigurationList;
686 | buildConfigurations = (
687 | 97C147031CF9000F007C117D /* Debug */,
688 | 97C147041CF9000F007C117D /* Release */,
689 | 249021D3217E4FDB00AE95B9 /* Profile */,
690 | );
691 | defaultConfigurationIsVisible = 0;
692 | defaultConfigurationName = Release;
693 | };
694 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
695 | isa = XCConfigurationList;
696 | buildConfigurations = (
697 | 97C147061CF9000F007C117D /* Debug */,
698 | 97C147071CF9000F007C117D /* Release */,
699 | 249021D4217E4FDB00AE95B9 /* Profile */,
700 | );
701 | defaultConfigurationIsVisible = 0;
702 | defaultConfigurationName = Release;
703 | };
704 | /* End XCConfigurationList section */
705 | };
706 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
707 | }
708 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXAggregateTarget section */
10 | 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
11 | isa = PBXAggregateTarget;
12 | buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
13 | buildPhases = (
14 | 33CC111E2044C6BF0003C045 /* ShellScript */,
15 | );
16 | dependencies = (
17 | );
18 | name = "Flutter Assemble";
19 | productName = FLX;
20 | };
21 | /* End PBXAggregateTarget section */
22 |
23 | /* Begin PBXBuildFile section */
24 | 25DFE78BFACA90C81F45FD93 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D53C3938916A70B5CF6B475 /* Pods_RunnerTests.framework */; };
25 | 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; };
26 | 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
27 | 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
28 | 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
29 | 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
30 | 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
31 | E439FB8BD0787BA7754EBA8D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F72EDD60C859369A96737ADA /* Pods_Runner.framework */; };
32 | /* End PBXBuildFile section */
33 |
34 | /* Begin PBXContainerItemProxy section */
35 | 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = {
36 | isa = PBXContainerItemProxy;
37 | containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
38 | proxyType = 1;
39 | remoteGlobalIDString = 33CC10EC2044A3C60003C045;
40 | remoteInfo = Runner;
41 | };
42 | 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
43 | isa = PBXContainerItemProxy;
44 | containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
45 | proxyType = 1;
46 | remoteGlobalIDString = 33CC111A2044C6BA0003C045;
47 | remoteInfo = FLX;
48 | };
49 | /* End PBXContainerItemProxy section */
50 |
51 | /* Begin PBXCopyFilesBuildPhase section */
52 | 33CC110E2044A8840003C045 /* Bundle Framework */ = {
53 | isa = PBXCopyFilesBuildPhase;
54 | buildActionMask = 2147483647;
55 | dstPath = "";
56 | dstSubfolderSpec = 10;
57 | files = (
58 | );
59 | name = "Bundle Framework";
60 | runOnlyForDeploymentPostprocessing = 0;
61 | };
62 | /* End PBXCopyFilesBuildPhase section */
63 |
64 | /* Begin PBXFileReference section */
65 | 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
66 | 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
67 | 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
68 | 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; };
69 | 33CC10ED2044A3C60003C045 /* twodos_onboarding.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = twodos_onboarding.app; sourceTree = BUILT_PRODUCTS_DIR; };
70 | 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
71 | 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; };
72 | 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
73 | 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; };
74 | 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; };
75 | 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; };
76 | 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; };
77 | 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; };
78 | 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; };
79 | 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; };
80 | 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; };
81 | 6B269F5D5557BD13DDE04946 /* 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 = ""; };
82 | 6E15F9BA00D1B676EF9EEE02 /* 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 = ""; };
83 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
84 | 7D53C3938916A70B5CF6B475 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
85 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
86 | A6BD3417B0A55018CD90B280 /* 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 = ""; };
87 | AADA0EC075437372A75B064E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
88 | B5A2B3B83054C577AEC6FF29 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
89 | F28B1A2E7972FBBACB180246 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
90 | F72EDD60C859369A96737ADA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
91 | /* End PBXFileReference section */
92 |
93 | /* Begin PBXFrameworksBuildPhase section */
94 | 331C80D2294CF70F00263BE5 /* Frameworks */ = {
95 | isa = PBXFrameworksBuildPhase;
96 | buildActionMask = 2147483647;
97 | files = (
98 | 25DFE78BFACA90C81F45FD93 /* Pods_RunnerTests.framework in Frameworks */,
99 | );
100 | runOnlyForDeploymentPostprocessing = 0;
101 | };
102 | 33CC10EA2044A3C60003C045 /* Frameworks */ = {
103 | isa = PBXFrameworksBuildPhase;
104 | buildActionMask = 2147483647;
105 | files = (
106 | E439FB8BD0787BA7754EBA8D /* Pods_Runner.framework in Frameworks */,
107 | );
108 | runOnlyForDeploymentPostprocessing = 0;
109 | };
110 | /* End PBXFrameworksBuildPhase section */
111 |
112 | /* Begin PBXGroup section */
113 | 331C80D6294CF71000263BE5 /* RunnerTests */ = {
114 | isa = PBXGroup;
115 | children = (
116 | 331C80D7294CF71000263BE5 /* RunnerTests.swift */,
117 | );
118 | path = RunnerTests;
119 | sourceTree = "";
120 | };
121 | 33BA886A226E78AF003329D5 /* Configs */ = {
122 | isa = PBXGroup;
123 | children = (
124 | 33E5194F232828860026EE4D /* AppInfo.xcconfig */,
125 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
126 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
127 | 333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
128 | );
129 | path = Configs;
130 | sourceTree = "";
131 | };
132 | 33CC10E42044A3C60003C045 = {
133 | isa = PBXGroup;
134 | children = (
135 | 33FAB671232836740065AC1E /* Runner */,
136 | 33CEB47122A05771004F2AC0 /* Flutter */,
137 | 331C80D6294CF71000263BE5 /* RunnerTests */,
138 | 33CC10EE2044A3C60003C045 /* Products */,
139 | D73912EC22F37F3D000D13A0 /* Frameworks */,
140 | E283D81B4DD843E4FED26C95 /* Pods */,
141 | );
142 | sourceTree = "";
143 | };
144 | 33CC10EE2044A3C60003C045 /* Products */ = {
145 | isa = PBXGroup;
146 | children = (
147 | 33CC10ED2044A3C60003C045 /* twodos_onboarding.app */,
148 | 331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
149 | );
150 | name = Products;
151 | sourceTree = "";
152 | };
153 | 33CC11242044D66E0003C045 /* Resources */ = {
154 | isa = PBXGroup;
155 | children = (
156 | 33CC10F22044A3C60003C045 /* Assets.xcassets */,
157 | 33CC10F42044A3C60003C045 /* MainMenu.xib */,
158 | 33CC10F72044A3C60003C045 /* Info.plist */,
159 | );
160 | name = Resources;
161 | path = ..;
162 | sourceTree = "";
163 | };
164 | 33CEB47122A05771004F2AC0 /* Flutter */ = {
165 | isa = PBXGroup;
166 | children = (
167 | 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
168 | 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
169 | 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
170 | 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
171 | );
172 | path = Flutter;
173 | sourceTree = "";
174 | };
175 | 33FAB671232836740065AC1E /* Runner */ = {
176 | isa = PBXGroup;
177 | children = (
178 | 33CC10F02044A3C60003C045 /* AppDelegate.swift */,
179 | 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
180 | 33E51913231747F40026EE4D /* DebugProfile.entitlements */,
181 | 33E51914231749380026EE4D /* Release.entitlements */,
182 | 33CC11242044D66E0003C045 /* Resources */,
183 | 33BA886A226E78AF003329D5 /* Configs */,
184 | );
185 | path = Runner;
186 | sourceTree = "";
187 | };
188 | D73912EC22F37F3D000D13A0 /* Frameworks */ = {
189 | isa = PBXGroup;
190 | children = (
191 | F72EDD60C859369A96737ADA /* Pods_Runner.framework */,
192 | 7D53C3938916A70B5CF6B475 /* Pods_RunnerTests.framework */,
193 | );
194 | name = Frameworks;
195 | sourceTree = "";
196 | };
197 | E283D81B4DD843E4FED26C95 /* Pods */ = {
198 | isa = PBXGroup;
199 | children = (
200 | 6E15F9BA00D1B676EF9EEE02 /* Pods-Runner.debug.xcconfig */,
201 | A6BD3417B0A55018CD90B280 /* Pods-Runner.release.xcconfig */,
202 | 6B269F5D5557BD13DDE04946 /* Pods-Runner.profile.xcconfig */,
203 | B5A2B3B83054C577AEC6FF29 /* Pods-RunnerTests.debug.xcconfig */,
204 | F28B1A2E7972FBBACB180246 /* Pods-RunnerTests.release.xcconfig */,
205 | AADA0EC075437372A75B064E /* Pods-RunnerTests.profile.xcconfig */,
206 | );
207 | name = Pods;
208 | path = Pods;
209 | sourceTree = "";
210 | };
211 | /* End PBXGroup section */
212 |
213 | /* Begin PBXNativeTarget section */
214 | 331C80D4294CF70F00263BE5 /* RunnerTests */ = {
215 | isa = PBXNativeTarget;
216 | buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
217 | buildPhases = (
218 | 97173DC7853D6EBD8EDAB1F9 /* [CP] Check Pods Manifest.lock */,
219 | 331C80D1294CF70F00263BE5 /* Sources */,
220 | 331C80D2294CF70F00263BE5 /* Frameworks */,
221 | 331C80D3294CF70F00263BE5 /* Resources */,
222 | );
223 | buildRules = (
224 | );
225 | dependencies = (
226 | 331C80DA294CF71000263BE5 /* PBXTargetDependency */,
227 | );
228 | name = RunnerTests;
229 | productName = RunnerTests;
230 | productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */;
231 | productType = "com.apple.product-type.bundle.unit-test";
232 | };
233 | 33CC10EC2044A3C60003C045 /* Runner */ = {
234 | isa = PBXNativeTarget;
235 | buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
236 | buildPhases = (
237 | 942B3E0EC98484F740E27FF8 /* [CP] Check Pods Manifest.lock */,
238 | 33CC10E92044A3C60003C045 /* Sources */,
239 | 33CC10EA2044A3C60003C045 /* Frameworks */,
240 | 33CC10EB2044A3C60003C045 /* Resources */,
241 | 33CC110E2044A8840003C045 /* Bundle Framework */,
242 | 3399D490228B24CF009A79C7 /* ShellScript */,
243 | EF10DB637E8EF2CF949B79E4 /* [CP] Embed Pods Frameworks */,
244 | );
245 | buildRules = (
246 | );
247 | dependencies = (
248 | 33CC11202044C79F0003C045 /* PBXTargetDependency */,
249 | );
250 | name = Runner;
251 | productName = Runner;
252 | productReference = 33CC10ED2044A3C60003C045 /* twodos_onboarding.app */;
253 | productType = "com.apple.product-type.application";
254 | };
255 | /* End PBXNativeTarget section */
256 |
257 | /* Begin PBXProject section */
258 | 33CC10E52044A3C60003C045 /* Project object */ = {
259 | isa = PBXProject;
260 | attributes = {
261 | LastSwiftUpdateCheck = 0920;
262 | LastUpgradeCheck = 1430;
263 | ORGANIZATIONNAME = "";
264 | TargetAttributes = {
265 | 331C80D4294CF70F00263BE5 = {
266 | CreatedOnToolsVersion = 14.0;
267 | TestTargetID = 33CC10EC2044A3C60003C045;
268 | };
269 | 33CC10EC2044A3C60003C045 = {
270 | CreatedOnToolsVersion = 9.2;
271 | LastSwiftMigration = 1100;
272 | ProvisioningStyle = Automatic;
273 | SystemCapabilities = {
274 | com.apple.Sandbox = {
275 | enabled = 1;
276 | };
277 | };
278 | };
279 | 33CC111A2044C6BA0003C045 = {
280 | CreatedOnToolsVersion = 9.2;
281 | ProvisioningStyle = Manual;
282 | };
283 | };
284 | };
285 | buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
286 | compatibilityVersion = "Xcode 9.3";
287 | developmentRegion = en;
288 | hasScannedForEncodings = 0;
289 | knownRegions = (
290 | en,
291 | Base,
292 | );
293 | mainGroup = 33CC10E42044A3C60003C045;
294 | productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
295 | projectDirPath = "";
296 | projectRoot = "";
297 | targets = (
298 | 33CC10EC2044A3C60003C045 /* Runner */,
299 | 331C80D4294CF70F00263BE5 /* RunnerTests */,
300 | 33CC111A2044C6BA0003C045 /* Flutter Assemble */,
301 | );
302 | };
303 | /* End PBXProject section */
304 |
305 | /* Begin PBXResourcesBuildPhase section */
306 | 331C80D3294CF70F00263BE5 /* Resources */ = {
307 | isa = PBXResourcesBuildPhase;
308 | buildActionMask = 2147483647;
309 | files = (
310 | );
311 | runOnlyForDeploymentPostprocessing = 0;
312 | };
313 | 33CC10EB2044A3C60003C045 /* Resources */ = {
314 | isa = PBXResourcesBuildPhase;
315 | buildActionMask = 2147483647;
316 | files = (
317 | 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
318 | 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
319 | );
320 | runOnlyForDeploymentPostprocessing = 0;
321 | };
322 | /* End PBXResourcesBuildPhase section */
323 |
324 | /* Begin PBXShellScriptBuildPhase section */
325 | 3399D490228B24CF009A79C7 /* ShellScript */ = {
326 | isa = PBXShellScriptBuildPhase;
327 | alwaysOutOfDate = 1;
328 | buildActionMask = 2147483647;
329 | files = (
330 | );
331 | inputFileListPaths = (
332 | );
333 | inputPaths = (
334 | );
335 | outputFileListPaths = (
336 | );
337 | outputPaths = (
338 | );
339 | runOnlyForDeploymentPostprocessing = 0;
340 | shellPath = /bin/sh;
341 | shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
342 | };
343 | 33CC111E2044C6BF0003C045 /* ShellScript */ = {
344 | isa = PBXShellScriptBuildPhase;
345 | buildActionMask = 2147483647;
346 | files = (
347 | );
348 | inputFileListPaths = (
349 | Flutter/ephemeral/FlutterInputs.xcfilelist,
350 | );
351 | inputPaths = (
352 | Flutter/ephemeral/tripwire,
353 | );
354 | outputFileListPaths = (
355 | Flutter/ephemeral/FlutterOutputs.xcfilelist,
356 | );
357 | outputPaths = (
358 | );
359 | runOnlyForDeploymentPostprocessing = 0;
360 | shellPath = /bin/sh;
361 | shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
362 | };
363 | 942B3E0EC98484F740E27FF8 /* [CP] Check Pods Manifest.lock */ = {
364 | isa = PBXShellScriptBuildPhase;
365 | buildActionMask = 2147483647;
366 | files = (
367 | );
368 | inputFileListPaths = (
369 | );
370 | inputPaths = (
371 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
372 | "${PODS_ROOT}/Manifest.lock",
373 | );
374 | name = "[CP] Check Pods Manifest.lock";
375 | outputFileListPaths = (
376 | );
377 | outputPaths = (
378 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
379 | );
380 | runOnlyForDeploymentPostprocessing = 0;
381 | shellPath = /bin/sh;
382 | 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";
383 | showEnvVarsInLog = 0;
384 | };
385 | 97173DC7853D6EBD8EDAB1F9 /* [CP] Check Pods Manifest.lock */ = {
386 | isa = PBXShellScriptBuildPhase;
387 | buildActionMask = 2147483647;
388 | files = (
389 | );
390 | inputFileListPaths = (
391 | );
392 | inputPaths = (
393 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
394 | "${PODS_ROOT}/Manifest.lock",
395 | );
396 | name = "[CP] Check Pods Manifest.lock";
397 | outputFileListPaths = (
398 | );
399 | outputPaths = (
400 | "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
401 | );
402 | runOnlyForDeploymentPostprocessing = 0;
403 | shellPath = /bin/sh;
404 | 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";
405 | showEnvVarsInLog = 0;
406 | };
407 | EF10DB637E8EF2CF949B79E4 /* [CP] Embed Pods Frameworks */ = {
408 | isa = PBXShellScriptBuildPhase;
409 | buildActionMask = 2147483647;
410 | files = (
411 | );
412 | inputFileListPaths = (
413 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
414 | );
415 | name = "[CP] Embed Pods Frameworks";
416 | outputFileListPaths = (
417 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
418 | );
419 | runOnlyForDeploymentPostprocessing = 0;
420 | shellPath = /bin/sh;
421 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
422 | showEnvVarsInLog = 0;
423 | };
424 | /* End PBXShellScriptBuildPhase section */
425 |
426 | /* Begin PBXSourcesBuildPhase section */
427 | 331C80D1294CF70F00263BE5 /* Sources */ = {
428 | isa = PBXSourcesBuildPhase;
429 | buildActionMask = 2147483647;
430 | files = (
431 | 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */,
432 | );
433 | runOnlyForDeploymentPostprocessing = 0;
434 | };
435 | 33CC10E92044A3C60003C045 /* Sources */ = {
436 | isa = PBXSourcesBuildPhase;
437 | buildActionMask = 2147483647;
438 | files = (
439 | 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
440 | 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
441 | 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
442 | );
443 | runOnlyForDeploymentPostprocessing = 0;
444 | };
445 | /* End PBXSourcesBuildPhase section */
446 |
447 | /* Begin PBXTargetDependency section */
448 | 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = {
449 | isa = PBXTargetDependency;
450 | target = 33CC10EC2044A3C60003C045 /* Runner */;
451 | targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */;
452 | };
453 | 33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
454 | isa = PBXTargetDependency;
455 | target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
456 | targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
457 | };
458 | /* End PBXTargetDependency section */
459 |
460 | /* Begin PBXVariantGroup section */
461 | 33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
462 | isa = PBXVariantGroup;
463 | children = (
464 | 33CC10F52044A3C60003C045 /* Base */,
465 | );
466 | name = MainMenu.xib;
467 | path = Runner;
468 | sourceTree = "";
469 | };
470 | /* End PBXVariantGroup section */
471 |
472 | /* Begin XCBuildConfiguration section */
473 | 331C80DB294CF71000263BE5 /* Debug */ = {
474 | isa = XCBuildConfiguration;
475 | baseConfigurationReference = B5A2B3B83054C577AEC6FF29 /* Pods-RunnerTests.debug.xcconfig */;
476 | buildSettings = {
477 | BUNDLE_LOADER = "$(TEST_HOST)";
478 | CURRENT_PROJECT_VERSION = 1;
479 | GENERATE_INFOPLIST_FILE = YES;
480 | MARKETING_VERSION = 1.0;
481 | PRODUCT_BUNDLE_IDENTIFIER = com.example.twodosOnboarding.RunnerTests;
482 | PRODUCT_NAME = "$(TARGET_NAME)";
483 | SWIFT_VERSION = 5.0;
484 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/twodos_onboarding.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/twodos_onboarding";
485 | };
486 | name = Debug;
487 | };
488 | 331C80DC294CF71000263BE5 /* Release */ = {
489 | isa = XCBuildConfiguration;
490 | baseConfigurationReference = F28B1A2E7972FBBACB180246 /* Pods-RunnerTests.release.xcconfig */;
491 | buildSettings = {
492 | BUNDLE_LOADER = "$(TEST_HOST)";
493 | CURRENT_PROJECT_VERSION = 1;
494 | GENERATE_INFOPLIST_FILE = YES;
495 | MARKETING_VERSION = 1.0;
496 | PRODUCT_BUNDLE_IDENTIFIER = com.example.twodosOnboarding.RunnerTests;
497 | PRODUCT_NAME = "$(TARGET_NAME)";
498 | SWIFT_VERSION = 5.0;
499 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/twodos_onboarding.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/twodos_onboarding";
500 | };
501 | name = Release;
502 | };
503 | 331C80DD294CF71000263BE5 /* Profile */ = {
504 | isa = XCBuildConfiguration;
505 | baseConfigurationReference = AADA0EC075437372A75B064E /* Pods-RunnerTests.profile.xcconfig */;
506 | buildSettings = {
507 | BUNDLE_LOADER = "$(TEST_HOST)";
508 | CURRENT_PROJECT_VERSION = 1;
509 | GENERATE_INFOPLIST_FILE = YES;
510 | MARKETING_VERSION = 1.0;
511 | PRODUCT_BUNDLE_IDENTIFIER = com.example.twodosOnboarding.RunnerTests;
512 | PRODUCT_NAME = "$(TARGET_NAME)";
513 | SWIFT_VERSION = 5.0;
514 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/twodos_onboarding.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/twodos_onboarding";
515 | };
516 | name = Profile;
517 | };
518 | 338D0CE9231458BD00FA5F75 /* Profile */ = {
519 | isa = XCBuildConfiguration;
520 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
521 | buildSettings = {
522 | ALWAYS_SEARCH_USER_PATHS = NO;
523 | CLANG_ANALYZER_NONNULL = YES;
524 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
525 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
526 | CLANG_CXX_LIBRARY = "libc++";
527 | CLANG_ENABLE_MODULES = YES;
528 | CLANG_ENABLE_OBJC_ARC = YES;
529 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
530 | CLANG_WARN_BOOL_CONVERSION = YES;
531 | CLANG_WARN_CONSTANT_CONVERSION = YES;
532 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
533 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
534 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
535 | CLANG_WARN_EMPTY_BODY = YES;
536 | CLANG_WARN_ENUM_CONVERSION = YES;
537 | CLANG_WARN_INFINITE_RECURSION = YES;
538 | CLANG_WARN_INT_CONVERSION = YES;
539 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
540 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
541 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
542 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
543 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
544 | CODE_SIGN_IDENTITY = "-";
545 | COPY_PHASE_STRIP = NO;
546 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
547 | ENABLE_NS_ASSERTIONS = NO;
548 | ENABLE_STRICT_OBJC_MSGSEND = YES;
549 | GCC_C_LANGUAGE_STANDARD = gnu11;
550 | GCC_NO_COMMON_BLOCKS = YES;
551 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
552 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
553 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
554 | GCC_WARN_UNUSED_FUNCTION = YES;
555 | GCC_WARN_UNUSED_VARIABLE = YES;
556 | MACOSX_DEPLOYMENT_TARGET = 10.14;
557 | MTL_ENABLE_DEBUG_INFO = NO;
558 | SDKROOT = macosx;
559 | SWIFT_COMPILATION_MODE = wholemodule;
560 | SWIFT_OPTIMIZATION_LEVEL = "-O";
561 | };
562 | name = Profile;
563 | };
564 | 338D0CEA231458BD00FA5F75 /* Profile */ = {
565 | isa = XCBuildConfiguration;
566 | baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
567 | buildSettings = {
568 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
569 | CLANG_ENABLE_MODULES = YES;
570 | CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
571 | CODE_SIGN_STYLE = Automatic;
572 | COMBINE_HIDPI_IMAGES = YES;
573 | INFOPLIST_FILE = Runner/Info.plist;
574 | LD_RUNPATH_SEARCH_PATHS = (
575 | "$(inherited)",
576 | "@executable_path/../Frameworks",
577 | );
578 | PROVISIONING_PROFILE_SPECIFIER = "";
579 | SWIFT_VERSION = 5.0;
580 | };
581 | name = Profile;
582 | };
583 | 338D0CEB231458BD00FA5F75 /* Profile */ = {
584 | isa = XCBuildConfiguration;
585 | buildSettings = {
586 | CODE_SIGN_STYLE = Manual;
587 | PRODUCT_NAME = "$(TARGET_NAME)";
588 | };
589 | name = Profile;
590 | };
591 | 33CC10F92044A3C60003C045 /* Debug */ = {
592 | isa = XCBuildConfiguration;
593 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
594 | buildSettings = {
595 | ALWAYS_SEARCH_USER_PATHS = NO;
596 | CLANG_ANALYZER_NONNULL = YES;
597 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
598 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
599 | CLANG_CXX_LIBRARY = "libc++";
600 | CLANG_ENABLE_MODULES = YES;
601 | CLANG_ENABLE_OBJC_ARC = YES;
602 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
603 | CLANG_WARN_BOOL_CONVERSION = YES;
604 | CLANG_WARN_CONSTANT_CONVERSION = YES;
605 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
606 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
607 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
608 | CLANG_WARN_EMPTY_BODY = YES;
609 | CLANG_WARN_ENUM_CONVERSION = YES;
610 | CLANG_WARN_INFINITE_RECURSION = YES;
611 | CLANG_WARN_INT_CONVERSION = YES;
612 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
613 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
614 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
615 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
616 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
617 | CODE_SIGN_IDENTITY = "-";
618 | COPY_PHASE_STRIP = NO;
619 | DEBUG_INFORMATION_FORMAT = dwarf;
620 | ENABLE_STRICT_OBJC_MSGSEND = YES;
621 | ENABLE_TESTABILITY = YES;
622 | GCC_C_LANGUAGE_STANDARD = gnu11;
623 | GCC_DYNAMIC_NO_PIC = NO;
624 | GCC_NO_COMMON_BLOCKS = YES;
625 | GCC_OPTIMIZATION_LEVEL = 0;
626 | GCC_PREPROCESSOR_DEFINITIONS = (
627 | "DEBUG=1",
628 | "$(inherited)",
629 | );
630 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
631 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
632 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
633 | GCC_WARN_UNUSED_FUNCTION = YES;
634 | GCC_WARN_UNUSED_VARIABLE = YES;
635 | MACOSX_DEPLOYMENT_TARGET = 10.14;
636 | MTL_ENABLE_DEBUG_INFO = YES;
637 | ONLY_ACTIVE_ARCH = YES;
638 | SDKROOT = macosx;
639 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
640 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
641 | };
642 | name = Debug;
643 | };
644 | 33CC10FA2044A3C60003C045 /* Release */ = {
645 | isa = XCBuildConfiguration;
646 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
647 | buildSettings = {
648 | ALWAYS_SEARCH_USER_PATHS = NO;
649 | CLANG_ANALYZER_NONNULL = YES;
650 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
651 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
652 | CLANG_CXX_LIBRARY = "libc++";
653 | CLANG_ENABLE_MODULES = YES;
654 | CLANG_ENABLE_OBJC_ARC = YES;
655 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
656 | CLANG_WARN_BOOL_CONVERSION = YES;
657 | CLANG_WARN_CONSTANT_CONVERSION = YES;
658 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
659 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
660 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
661 | CLANG_WARN_EMPTY_BODY = YES;
662 | CLANG_WARN_ENUM_CONVERSION = YES;
663 | CLANG_WARN_INFINITE_RECURSION = YES;
664 | CLANG_WARN_INT_CONVERSION = YES;
665 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
666 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
667 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
668 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
669 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
670 | CODE_SIGN_IDENTITY = "-";
671 | COPY_PHASE_STRIP = NO;
672 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
673 | ENABLE_NS_ASSERTIONS = NO;
674 | ENABLE_STRICT_OBJC_MSGSEND = YES;
675 | GCC_C_LANGUAGE_STANDARD = gnu11;
676 | GCC_NO_COMMON_BLOCKS = YES;
677 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
678 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
679 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
680 | GCC_WARN_UNUSED_FUNCTION = YES;
681 | GCC_WARN_UNUSED_VARIABLE = YES;
682 | MACOSX_DEPLOYMENT_TARGET = 10.14;
683 | MTL_ENABLE_DEBUG_INFO = NO;
684 | SDKROOT = macosx;
685 | SWIFT_COMPILATION_MODE = wholemodule;
686 | SWIFT_OPTIMIZATION_LEVEL = "-O";
687 | };
688 | name = Release;
689 | };
690 | 33CC10FC2044A3C60003C045 /* Debug */ = {
691 | isa = XCBuildConfiguration;
692 | baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
693 | buildSettings = {
694 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
695 | CLANG_ENABLE_MODULES = YES;
696 | CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
697 | CODE_SIGN_STYLE = Automatic;
698 | COMBINE_HIDPI_IMAGES = YES;
699 | INFOPLIST_FILE = Runner/Info.plist;
700 | LD_RUNPATH_SEARCH_PATHS = (
701 | "$(inherited)",
702 | "@executable_path/../Frameworks",
703 | );
704 | PROVISIONING_PROFILE_SPECIFIER = "";
705 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
706 | SWIFT_VERSION = 5.0;
707 | };
708 | name = Debug;
709 | };
710 | 33CC10FD2044A3C60003C045 /* Release */ = {
711 | isa = XCBuildConfiguration;
712 | baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
713 | buildSettings = {
714 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
715 | CLANG_ENABLE_MODULES = YES;
716 | CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
717 | CODE_SIGN_STYLE = Automatic;
718 | COMBINE_HIDPI_IMAGES = YES;
719 | INFOPLIST_FILE = Runner/Info.plist;
720 | LD_RUNPATH_SEARCH_PATHS = (
721 | "$(inherited)",
722 | "@executable_path/../Frameworks",
723 | );
724 | PROVISIONING_PROFILE_SPECIFIER = "";
725 | SWIFT_VERSION = 5.0;
726 | };
727 | name = Release;
728 | };
729 | 33CC111C2044C6BA0003C045 /* Debug */ = {
730 | isa = XCBuildConfiguration;
731 | buildSettings = {
732 | CODE_SIGN_STYLE = Manual;
733 | PRODUCT_NAME = "$(TARGET_NAME)";
734 | };
735 | name = Debug;
736 | };
737 | 33CC111D2044C6BA0003C045 /* Release */ = {
738 | isa = XCBuildConfiguration;
739 | buildSettings = {
740 | CODE_SIGN_STYLE = Automatic;
741 | PRODUCT_NAME = "$(TARGET_NAME)";
742 | };
743 | name = Release;
744 | };
745 | /* End XCBuildConfiguration section */
746 |
747 | /* Begin XCConfigurationList section */
748 | 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
749 | isa = XCConfigurationList;
750 | buildConfigurations = (
751 | 331C80DB294CF71000263BE5 /* Debug */,
752 | 331C80DC294CF71000263BE5 /* Release */,
753 | 331C80DD294CF71000263BE5 /* Profile */,
754 | );
755 | defaultConfigurationIsVisible = 0;
756 | defaultConfigurationName = Release;
757 | };
758 | 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
759 | isa = XCConfigurationList;
760 | buildConfigurations = (
761 | 33CC10F92044A3C60003C045 /* Debug */,
762 | 33CC10FA2044A3C60003C045 /* Release */,
763 | 338D0CE9231458BD00FA5F75 /* Profile */,
764 | );
765 | defaultConfigurationIsVisible = 0;
766 | defaultConfigurationName = Release;
767 | };
768 | 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
769 | isa = XCConfigurationList;
770 | buildConfigurations = (
771 | 33CC10FC2044A3C60003C045 /* Debug */,
772 | 33CC10FD2044A3C60003C045 /* Release */,
773 | 338D0CEA231458BD00FA5F75 /* Profile */,
774 | );
775 | defaultConfigurationIsVisible = 0;
776 | defaultConfigurationName = Release;
777 | };
778 | 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
779 | isa = XCConfigurationList;
780 | buildConfigurations = (
781 | 33CC111C2044C6BA0003C045 /* Debug */,
782 | 33CC111D2044C6BA0003C045 /* Release */,
783 | 338D0CEB231458BD00FA5F75 /* Profile */,
784 | );
785 | defaultConfigurationIsVisible = 0;
786 | defaultConfigurationName = Release;
787 | };
788 | /* End XCConfigurationList section */
789 | };
790 | rootObject = 33CC10E52044A3C60003C045 /* Project object */;
791 | }
792 |
--------------------------------------------------------------------------------