├── 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 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 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 | --------------------------------------------------------------------------------