├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── vice_app │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets └── img │ └── vice │ ├── vice-logo.png │ ├── vice1.png │ ├── vice10.png │ ├── vice11.png │ ├── vice12.png │ ├── vice13.png │ ├── vice2.png │ ├── vice3.png │ ├── vice4.png │ ├── vice5.png │ ├── vice6.png │ ├── vice7.png │ ├── vice8.png │ └── vice9.png ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── 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-83.5x83.5@2x.png │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ └── README.md │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h └── RunnerTests │ └── RunnerTests.swift ├── lib ├── core │ ├── app │ │ └── vice_app.dart │ ├── constants │ │ ├── constants.dart │ │ └── vice_ui_consts.dart │ ├── core.dart │ ├── shared │ │ ├── domain │ │ │ ├── domain.dart │ │ │ └── entities │ │ │ │ ├── entities.dart │ │ │ │ └── magazine.dart │ │ ├── presentation │ │ │ ├── presentation.dart │ │ │ └── widgets │ │ │ │ ├── custom_tween_animation.dart │ │ │ │ ├── magazine_cover_image.dart │ │ │ │ ├── menu_button.dart │ │ │ │ └── widgets.dart │ │ └── shared.dart │ └── theme │ │ ├── theme.dart │ │ ├── vice_colors.dart │ │ ├── vice_icons.dart │ │ └── vice_theme.dart ├── features │ ├── home │ │ └── presentation │ │ │ ├── screens │ │ │ └── home_screen.dart │ │ │ └── widgets │ │ │ ├── all_editions_list_view.dart │ │ │ ├── dragable_widget.dart │ │ │ ├── infinite_dragable_slider.dart │ │ │ └── widgets.dart │ └── magazines_details │ │ └── presentation │ │ ├── screens │ │ └── magazines_details_screen.dart │ │ └── widgets │ │ ├── content_magazines_page_view.dart │ │ ├── heart_and_save_button.dart │ │ ├── rectangle_page_view_indicators.dart │ │ ├── sticky_sliver_app_bar.dart │ │ └── widgets.dart └── main.dart ├── pubspec.lock └── pubspec.yaml /.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 | -------------------------------------------------------------------------------- /.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: "16e014e884bca395338b7f7d5fd3f190d4e014bf" 8 | channel: "master" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 17 | base_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 18 | - platform: android 19 | create_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 20 | base_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 21 | - platform: ios 22 | create_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 23 | base_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 24 | - platform: linux 25 | create_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 26 | base_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 27 | - platform: macos 28 | create_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 29 | base_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 30 | - platform: web 31 | create_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 32 | base_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 33 | - platform: windows 34 | create_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 35 | base_revision: 16e014e884bca395338b7f7d5fd3f190d4e014bf 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vice_app 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id "com.android.application" 3 | id "kotlin-android" 4 | id "dev.flutter.flutter-gradle-plugin" 5 | } 6 | 7 | def localProperties = new Properties() 8 | def localPropertiesFile = rootProject.file('local.properties') 9 | if (localPropertiesFile.exists()) { 10 | localPropertiesFile.withReader('UTF-8') { reader -> 11 | localProperties.load(reader) 12 | } 13 | } 14 | 15 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 16 | if (flutterVersionCode == null) { 17 | flutterVersionCode = '1' 18 | } 19 | 20 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 21 | if (flutterVersionName == null) { 22 | flutterVersionName = '1.0' 23 | } 24 | 25 | android { 26 | namespace "com.example.vice_app" 27 | compileSdk flutter.compileSdkVersion 28 | ndkVersion flutter.ndkVersion 29 | 30 | compileOptions { 31 | sourceCompatibility JavaVersion.VERSION_1_8 32 | targetCompatibility JavaVersion.VERSION_1_8 33 | } 34 | 35 | kotlinOptions { 36 | jvmTarget = '1.8' 37 | } 38 | 39 | sourceSets { 40 | main.java.srcDirs += 'src/main/kotlin' 41 | } 42 | 43 | defaultConfig { 44 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 45 | applicationId "com.example.vice_app" 46 | // You can update the following values to match your application needs. 47 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. 48 | minSdk flutter.minSdkVersion 49 | targetSdk flutter.targetSdkVersion 50 | versionCode flutterVersionCode.toInteger() 51 | versionName flutterVersionName 52 | } 53 | 54 | buildTypes { 55 | release { 56 | // TODO: Add your own signing config for the release build. 57 | // Signing with the debug keys for now, so `flutter run --release` works. 58 | signingConfig signingConfigs.debug 59 | } 60 | } 61 | } 62 | 63 | flutter { 64 | source '../..' 65 | } 66 | 67 | dependencies {} 68 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 14 | 18 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 32 | 33 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/vice_app/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.vice_app 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | } 6 | } 7 | 8 | rootProject.buildDir = '../build' 9 | subprojects { 10 | project.buildDir = "${rootProject.buildDir}/${project.name}" 11 | } 12 | subprojects { 13 | project.evaluationDependsOn(':app') 14 | } 15 | 16 | tasks.register("clean", Delete) { 17 | delete rootProject.buildDir 18 | } 19 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip 6 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | }() 9 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 21 | id "com.android.application" version "7.3.0" apply false 22 | id "org.jetbrains.kotlin.android" version "1.7.10" apply false 23 | } 24 | 25 | include ":app" 26 | -------------------------------------------------------------------------------- /assets/img/vice/vice-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice-logo.png -------------------------------------------------------------------------------- /assets/img/vice/vice1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice1.png -------------------------------------------------------------------------------- /assets/img/vice/vice10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice10.png -------------------------------------------------------------------------------- /assets/img/vice/vice11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice11.png -------------------------------------------------------------------------------- /assets/img/vice/vice12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice12.png -------------------------------------------------------------------------------- /assets/img/vice/vice13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice13.png -------------------------------------------------------------------------------- /assets/img/vice/vice2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice2.png -------------------------------------------------------------------------------- /assets/img/vice/vice3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice3.png -------------------------------------------------------------------------------- /assets/img/vice/vice4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice4.png -------------------------------------------------------------------------------- /assets/img/vice/vice5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice5.png -------------------------------------------------------------------------------- /assets/img/vice/vice6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice6.png -------------------------------------------------------------------------------- /assets/img/vice/vice7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice7.png -------------------------------------------------------------------------------- /assets/img/vice/vice8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice8.png -------------------------------------------------------------------------------- /assets/img/vice/vice9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/assets/img/vice/vice9.png -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | 12.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '12.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 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Flutter (1.0.0) 3 | - path_provider_foundation (0.0.1): 4 | - Flutter 5 | - FlutterMacOS 6 | - sqflite (0.0.3): 7 | - Flutter 8 | - FlutterMacOS 9 | 10 | DEPENDENCIES: 11 | - Flutter (from `Flutter`) 12 | - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) 13 | - sqflite (from `.symlinks/plugins/sqflite/darwin`) 14 | 15 | EXTERNAL SOURCES: 16 | Flutter: 17 | :path: Flutter 18 | path_provider_foundation: 19 | :path: ".symlinks/plugins/path_provider_foundation/darwin" 20 | sqflite: 21 | :path: ".symlinks/plugins/sqflite/darwin" 22 | 23 | SPEC CHECKSUMS: 24 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 25 | path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c 26 | sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec 27 | 28 | PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796 29 | 30 | COCOAPODS: 1.15.2 31 | -------------------------------------------------------------------------------- /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 | 2FE3C635A72F66F512272170 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD2A3D88FA56F66316F9DDF4 /* Pods_RunnerTests.framework */; }; 12 | 3086143574B1332B22AF2CAC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2205313C0A949D6769BB5A8 /* Pods_Runner.framework */; }; 13 | 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 14 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 15 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 16 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 17 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 18 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 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 | 2E04CBCA1EDB425DE55C6A61 /* 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 = ""; }; 48 | 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 49 | 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 51 | 3B45F3C3EDB996068B8C6F07 /* 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 = ""; }; 52 | 4228AE26A1469EBFF9C3B96F /* 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 = ""; }; 53 | 490A3CDE0E66A5A091B9B184 /* 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 = ""; }; 54 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 55 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 56 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.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 | 998EDC99CCDFF5B2AA199F26 /* 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 = ""; }; 65 | BE7A2D7A71926D682DF27B8F /* 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 = ""; }; 66 | D2205313C0A949D6769BB5A8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | DD2A3D88FA56F66316F9DDF4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 68 | /* End PBXFileReference section */ 69 | 70 | /* Begin PBXFrameworksBuildPhase section */ 71 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 72 | isa = PBXFrameworksBuildPhase; 73 | buildActionMask = 2147483647; 74 | files = ( 75 | 3086143574B1332B22AF2CAC /* Pods_Runner.framework in Frameworks */, 76 | ); 77 | runOnlyForDeploymentPostprocessing = 0; 78 | }; 79 | EBB23EF7774FC782889E7F75 /* Frameworks */ = { 80 | isa = PBXFrameworksBuildPhase; 81 | buildActionMask = 2147483647; 82 | files = ( 83 | 2FE3C635A72F66F512272170 /* 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 | 4A0D568ECB35B6BB943D5D83 /* Frameworks */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | D2205313C0A949D6769BB5A8 /* Pods_Runner.framework */, 102 | DD2A3D88FA56F66316F9DDF4 /* Pods_RunnerTests.framework */, 103 | ); 104 | name = Frameworks; 105 | sourceTree = ""; 106 | }; 107 | 52CFD6C5078E5F57B28F6B2A /* Pods */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 3B45F3C3EDB996068B8C6F07 /* Pods-Runner.debug.xcconfig */, 111 | BE7A2D7A71926D682DF27B8F /* Pods-Runner.release.xcconfig */, 112 | 490A3CDE0E66A5A091B9B184 /* Pods-Runner.profile.xcconfig */, 113 | 998EDC99CCDFF5B2AA199F26 /* Pods-RunnerTests.debug.xcconfig */, 114 | 4228AE26A1469EBFF9C3B96F /* Pods-RunnerTests.release.xcconfig */, 115 | 2E04CBCA1EDB425DE55C6A61 /* Pods-RunnerTests.profile.xcconfig */, 116 | ); 117 | name = Pods; 118 | path = Pods; 119 | sourceTree = ""; 120 | }; 121 | 9740EEB11CF90186004384FC /* Flutter */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 125 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 126 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 127 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 128 | ); 129 | name = Flutter; 130 | sourceTree = ""; 131 | }; 132 | 97C146E51CF9000F007C117D = { 133 | isa = PBXGroup; 134 | children = ( 135 | 9740EEB11CF90186004384FC /* Flutter */, 136 | 97C146F01CF9000F007C117D /* Runner */, 137 | 97C146EF1CF9000F007C117D /* Products */, 138 | 331C8082294A63A400263BE5 /* RunnerTests */, 139 | 52CFD6C5078E5F57B28F6B2A /* Pods */, 140 | 4A0D568ECB35B6BB943D5D83 /* Frameworks */, 141 | ); 142 | sourceTree = ""; 143 | }; 144 | 97C146EF1CF9000F007C117D /* Products */ = { 145 | isa = PBXGroup; 146 | children = ( 147 | 97C146EE1CF9000F007C117D /* Runner.app */, 148 | 331C8081294A63A400263BE5 /* RunnerTests.xctest */, 149 | ); 150 | name = Products; 151 | sourceTree = ""; 152 | }; 153 | 97C146F01CF9000F007C117D /* Runner */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 157 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 158 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 159 | 97C147021CF9000F007C117D /* Info.plist */, 160 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 161 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 162 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 163 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 164 | ); 165 | path = Runner; 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 | BB264911DCEE8747C1B8B98F /* [CP] Check Pods Manifest.lock */, 176 | 331C807D294A63A400263BE5 /* Sources */, 177 | 331C807F294A63A400263BE5 /* Resources */, 178 | EBB23EF7774FC782889E7F75 /* 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 | 0F77B645DE226C746D3EAA51 /* [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 | A98C2771C216394B3AF6BEA4 /* [CP] Embed Pods Frameworks */, 202 | ); 203 | buildRules = ( 204 | ); 205 | dependencies = ( 206 | ); 207 | name = Runner; 208 | productName = Runner; 209 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 210 | productType = "com.apple.product-type.application"; 211 | }; 212 | /* End PBXNativeTarget section */ 213 | 214 | /* Begin PBXProject section */ 215 | 97C146E61CF9000F007C117D /* Project object */ = { 216 | isa = PBXProject; 217 | attributes = { 218 | BuildIndependentTargetsInParallel = YES; 219 | LastUpgradeCheck = 1510; 220 | ORGANIZATIONNAME = ""; 221 | TargetAttributes = { 222 | 331C8080294A63A400263BE5 = { 223 | CreatedOnToolsVersion = 14.0; 224 | TestTargetID = 97C146ED1CF9000F007C117D; 225 | }; 226 | 97C146ED1CF9000F007C117D = { 227 | CreatedOnToolsVersion = 7.3.1; 228 | LastSwiftMigration = 1100; 229 | }; 230 | }; 231 | }; 232 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 233 | compatibilityVersion = "Xcode 9.3"; 234 | developmentRegion = en; 235 | hasScannedForEncodings = 0; 236 | knownRegions = ( 237 | en, 238 | Base, 239 | ); 240 | mainGroup = 97C146E51CF9000F007C117D; 241 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 242 | projectDirPath = ""; 243 | projectRoot = ""; 244 | targets = ( 245 | 97C146ED1CF9000F007C117D /* Runner */, 246 | 331C8080294A63A400263BE5 /* RunnerTests */, 247 | ); 248 | }; 249 | /* End PBXProject section */ 250 | 251 | /* Begin PBXResourcesBuildPhase section */ 252 | 331C807F294A63A400263BE5 /* Resources */ = { 253 | isa = PBXResourcesBuildPhase; 254 | buildActionMask = 2147483647; 255 | files = ( 256 | ); 257 | runOnlyForDeploymentPostprocessing = 0; 258 | }; 259 | 97C146EC1CF9000F007C117D /* Resources */ = { 260 | isa = PBXResourcesBuildPhase; 261 | buildActionMask = 2147483647; 262 | files = ( 263 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 264 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 265 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 266 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 267 | ); 268 | runOnlyForDeploymentPostprocessing = 0; 269 | }; 270 | /* End PBXResourcesBuildPhase section */ 271 | 272 | /* Begin PBXShellScriptBuildPhase section */ 273 | 0F77B645DE226C746D3EAA51 /* [CP] Check Pods Manifest.lock */ = { 274 | isa = PBXShellScriptBuildPhase; 275 | buildActionMask = 2147483647; 276 | files = ( 277 | ); 278 | inputFileListPaths = ( 279 | ); 280 | inputPaths = ( 281 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 282 | "${PODS_ROOT}/Manifest.lock", 283 | ); 284 | name = "[CP] Check Pods Manifest.lock"; 285 | outputFileListPaths = ( 286 | ); 287 | outputPaths = ( 288 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", 289 | ); 290 | runOnlyForDeploymentPostprocessing = 0; 291 | shellPath = /bin/sh; 292 | 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"; 293 | showEnvVarsInLog = 0; 294 | }; 295 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 296 | isa = PBXShellScriptBuildPhase; 297 | alwaysOutOfDate = 1; 298 | buildActionMask = 2147483647; 299 | files = ( 300 | ); 301 | inputPaths = ( 302 | "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", 303 | ); 304 | name = "Thin Binary"; 305 | outputPaths = ( 306 | ); 307 | runOnlyForDeploymentPostprocessing = 0; 308 | shellPath = /bin/sh; 309 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 310 | }; 311 | 9740EEB61CF901F6004384FC /* Run Script */ = { 312 | isa = PBXShellScriptBuildPhase; 313 | alwaysOutOfDate = 1; 314 | buildActionMask = 2147483647; 315 | files = ( 316 | ); 317 | inputPaths = ( 318 | ); 319 | name = "Run Script"; 320 | outputPaths = ( 321 | ); 322 | runOnlyForDeploymentPostprocessing = 0; 323 | shellPath = /bin/sh; 324 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 325 | }; 326 | A98C2771C216394B3AF6BEA4 /* [CP] Embed Pods Frameworks */ = { 327 | isa = PBXShellScriptBuildPhase; 328 | buildActionMask = 2147483647; 329 | files = ( 330 | ); 331 | inputFileListPaths = ( 332 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", 333 | ); 334 | name = "[CP] Embed Pods Frameworks"; 335 | outputFileListPaths = ( 336 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", 337 | ); 338 | runOnlyForDeploymentPostprocessing = 0; 339 | shellPath = /bin/sh; 340 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; 341 | showEnvVarsInLog = 0; 342 | }; 343 | BB264911DCEE8747C1B8B98F /* [CP] Check Pods Manifest.lock */ = { 344 | isa = PBXShellScriptBuildPhase; 345 | buildActionMask = 2147483647; 346 | files = ( 347 | ); 348 | inputFileListPaths = ( 349 | ); 350 | inputPaths = ( 351 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 352 | "${PODS_ROOT}/Manifest.lock", 353 | ); 354 | name = "[CP] Check Pods Manifest.lock"; 355 | outputFileListPaths = ( 356 | ); 357 | outputPaths = ( 358 | "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", 359 | ); 360 | runOnlyForDeploymentPostprocessing = 0; 361 | shellPath = /bin/sh; 362 | 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"; 363 | showEnvVarsInLog = 0; 364 | }; 365 | /* End PBXShellScriptBuildPhase section */ 366 | 367 | /* Begin PBXSourcesBuildPhase section */ 368 | 331C807D294A63A400263BE5 /* Sources */ = { 369 | isa = PBXSourcesBuildPhase; 370 | buildActionMask = 2147483647; 371 | files = ( 372 | 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, 373 | ); 374 | runOnlyForDeploymentPostprocessing = 0; 375 | }; 376 | 97C146EA1CF9000F007C117D /* Sources */ = { 377 | isa = PBXSourcesBuildPhase; 378 | buildActionMask = 2147483647; 379 | files = ( 380 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 381 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 382 | ); 383 | runOnlyForDeploymentPostprocessing = 0; 384 | }; 385 | /* End PBXSourcesBuildPhase section */ 386 | 387 | /* Begin PBXTargetDependency section */ 388 | 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { 389 | isa = PBXTargetDependency; 390 | target = 97C146ED1CF9000F007C117D /* Runner */; 391 | targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; 392 | }; 393 | /* End PBXTargetDependency section */ 394 | 395 | /* Begin PBXVariantGroup section */ 396 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 397 | isa = PBXVariantGroup; 398 | children = ( 399 | 97C146FB1CF9000F007C117D /* Base */, 400 | ); 401 | name = Main.storyboard; 402 | sourceTree = ""; 403 | }; 404 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 405 | isa = PBXVariantGroup; 406 | children = ( 407 | 97C147001CF9000F007C117D /* Base */, 408 | ); 409 | name = LaunchScreen.storyboard; 410 | sourceTree = ""; 411 | }; 412 | /* End PBXVariantGroup section */ 413 | 414 | /* Begin XCBuildConfiguration section */ 415 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 416 | isa = XCBuildConfiguration; 417 | buildSettings = { 418 | ALWAYS_SEARCH_USER_PATHS = NO; 419 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 420 | CLANG_ANALYZER_NONNULL = YES; 421 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 422 | CLANG_CXX_LIBRARY = "libc++"; 423 | CLANG_ENABLE_MODULES = YES; 424 | CLANG_ENABLE_OBJC_ARC = YES; 425 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 426 | CLANG_WARN_BOOL_CONVERSION = YES; 427 | CLANG_WARN_COMMA = YES; 428 | CLANG_WARN_CONSTANT_CONVERSION = YES; 429 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 430 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 431 | CLANG_WARN_EMPTY_BODY = YES; 432 | CLANG_WARN_ENUM_CONVERSION = YES; 433 | CLANG_WARN_INFINITE_RECURSION = YES; 434 | CLANG_WARN_INT_CONVERSION = YES; 435 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 436 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 437 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 438 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 439 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 440 | CLANG_WARN_STRICT_PROTOTYPES = YES; 441 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 442 | CLANG_WARN_UNREACHABLE_CODE = YES; 443 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 444 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 445 | COPY_PHASE_STRIP = NO; 446 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 447 | ENABLE_NS_ASSERTIONS = NO; 448 | ENABLE_STRICT_OBJC_MSGSEND = YES; 449 | ENABLE_USER_SCRIPT_SANDBOXING = NO; 450 | GCC_C_LANGUAGE_STANDARD = gnu99; 451 | GCC_NO_COMMON_BLOCKS = YES; 452 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 453 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 454 | GCC_WARN_UNDECLARED_SELECTOR = YES; 455 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 456 | GCC_WARN_UNUSED_FUNCTION = YES; 457 | GCC_WARN_UNUSED_VARIABLE = YES; 458 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 459 | MTL_ENABLE_DEBUG_INFO = NO; 460 | SDKROOT = iphoneos; 461 | SUPPORTED_PLATFORMS = iphoneos; 462 | TARGETED_DEVICE_FAMILY = "1,2"; 463 | VALIDATE_PRODUCT = YES; 464 | }; 465 | name = Profile; 466 | }; 467 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 468 | isa = XCBuildConfiguration; 469 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 470 | buildSettings = { 471 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 472 | CLANG_ENABLE_MODULES = YES; 473 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 474 | ENABLE_BITCODE = NO; 475 | INFOPLIST_FILE = Runner/Info.plist; 476 | LD_RUNPATH_SEARCH_PATHS = ( 477 | "$(inherited)", 478 | "@executable_path/Frameworks", 479 | ); 480 | PRODUCT_BUNDLE_IDENTIFIER = com.example.viceApp; 481 | PRODUCT_NAME = "$(TARGET_NAME)"; 482 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 483 | SWIFT_VERSION = 5.0; 484 | VERSIONING_SYSTEM = "apple-generic"; 485 | }; 486 | name = Profile; 487 | }; 488 | 331C8088294A63A400263BE5 /* Debug */ = { 489 | isa = XCBuildConfiguration; 490 | baseConfigurationReference = 998EDC99CCDFF5B2AA199F26 /* Pods-RunnerTests.debug.xcconfig */; 491 | buildSettings = { 492 | BUNDLE_LOADER = "$(TEST_HOST)"; 493 | CODE_SIGN_STYLE = Automatic; 494 | CURRENT_PROJECT_VERSION = 1; 495 | GENERATE_INFOPLIST_FILE = YES; 496 | MARKETING_VERSION = 1.0; 497 | PRODUCT_BUNDLE_IDENTIFIER = com.example.viceApp.RunnerTests; 498 | PRODUCT_NAME = "$(TARGET_NAME)"; 499 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 500 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 501 | SWIFT_VERSION = 5.0; 502 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; 503 | }; 504 | name = Debug; 505 | }; 506 | 331C8089294A63A400263BE5 /* Release */ = { 507 | isa = XCBuildConfiguration; 508 | baseConfigurationReference = 4228AE26A1469EBFF9C3B96F /* Pods-RunnerTests.release.xcconfig */; 509 | buildSettings = { 510 | BUNDLE_LOADER = "$(TEST_HOST)"; 511 | CODE_SIGN_STYLE = Automatic; 512 | CURRENT_PROJECT_VERSION = 1; 513 | GENERATE_INFOPLIST_FILE = YES; 514 | MARKETING_VERSION = 1.0; 515 | PRODUCT_BUNDLE_IDENTIFIER = com.example.viceApp.RunnerTests; 516 | PRODUCT_NAME = "$(TARGET_NAME)"; 517 | SWIFT_VERSION = 5.0; 518 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; 519 | }; 520 | name = Release; 521 | }; 522 | 331C808A294A63A400263BE5 /* Profile */ = { 523 | isa = XCBuildConfiguration; 524 | baseConfigurationReference = 2E04CBCA1EDB425DE55C6A61 /* Pods-RunnerTests.profile.xcconfig */; 525 | buildSettings = { 526 | BUNDLE_LOADER = "$(TEST_HOST)"; 527 | CODE_SIGN_STYLE = Automatic; 528 | CURRENT_PROJECT_VERSION = 1; 529 | GENERATE_INFOPLIST_FILE = YES; 530 | MARKETING_VERSION = 1.0; 531 | PRODUCT_BUNDLE_IDENTIFIER = com.example.viceApp.RunnerTests; 532 | PRODUCT_NAME = "$(TARGET_NAME)"; 533 | SWIFT_VERSION = 5.0; 534 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; 535 | }; 536 | name = Profile; 537 | }; 538 | 97C147031CF9000F007C117D /* Debug */ = { 539 | isa = XCBuildConfiguration; 540 | buildSettings = { 541 | ALWAYS_SEARCH_USER_PATHS = NO; 542 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 543 | CLANG_ANALYZER_NONNULL = YES; 544 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 545 | CLANG_CXX_LIBRARY = "libc++"; 546 | CLANG_ENABLE_MODULES = YES; 547 | CLANG_ENABLE_OBJC_ARC = YES; 548 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 549 | CLANG_WARN_BOOL_CONVERSION = YES; 550 | CLANG_WARN_COMMA = YES; 551 | CLANG_WARN_CONSTANT_CONVERSION = YES; 552 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 553 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 554 | CLANG_WARN_EMPTY_BODY = YES; 555 | CLANG_WARN_ENUM_CONVERSION = YES; 556 | CLANG_WARN_INFINITE_RECURSION = YES; 557 | CLANG_WARN_INT_CONVERSION = YES; 558 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 559 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 560 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 561 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 562 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 563 | CLANG_WARN_STRICT_PROTOTYPES = YES; 564 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 565 | CLANG_WARN_UNREACHABLE_CODE = YES; 566 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 567 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 568 | COPY_PHASE_STRIP = NO; 569 | DEBUG_INFORMATION_FORMAT = dwarf; 570 | ENABLE_STRICT_OBJC_MSGSEND = YES; 571 | ENABLE_TESTABILITY = YES; 572 | ENABLE_USER_SCRIPT_SANDBOXING = NO; 573 | GCC_C_LANGUAGE_STANDARD = gnu99; 574 | GCC_DYNAMIC_NO_PIC = NO; 575 | GCC_NO_COMMON_BLOCKS = YES; 576 | GCC_OPTIMIZATION_LEVEL = 0; 577 | GCC_PREPROCESSOR_DEFINITIONS = ( 578 | "DEBUG=1", 579 | "$(inherited)", 580 | ); 581 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 582 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 583 | GCC_WARN_UNDECLARED_SELECTOR = YES; 584 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 585 | GCC_WARN_UNUSED_FUNCTION = YES; 586 | GCC_WARN_UNUSED_VARIABLE = YES; 587 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 588 | MTL_ENABLE_DEBUG_INFO = YES; 589 | ONLY_ACTIVE_ARCH = YES; 590 | SDKROOT = iphoneos; 591 | TARGETED_DEVICE_FAMILY = "1,2"; 592 | }; 593 | name = Debug; 594 | }; 595 | 97C147041CF9000F007C117D /* Release */ = { 596 | isa = XCBuildConfiguration; 597 | buildSettings = { 598 | ALWAYS_SEARCH_USER_PATHS = NO; 599 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 600 | CLANG_ANALYZER_NONNULL = YES; 601 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 602 | CLANG_CXX_LIBRARY = "libc++"; 603 | CLANG_ENABLE_MODULES = YES; 604 | CLANG_ENABLE_OBJC_ARC = YES; 605 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 606 | CLANG_WARN_BOOL_CONVERSION = YES; 607 | CLANG_WARN_COMMA = YES; 608 | CLANG_WARN_CONSTANT_CONVERSION = YES; 609 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 610 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 611 | CLANG_WARN_EMPTY_BODY = YES; 612 | CLANG_WARN_ENUM_CONVERSION = YES; 613 | CLANG_WARN_INFINITE_RECURSION = YES; 614 | CLANG_WARN_INT_CONVERSION = YES; 615 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 616 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 617 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 618 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 619 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 620 | CLANG_WARN_STRICT_PROTOTYPES = YES; 621 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 622 | CLANG_WARN_UNREACHABLE_CODE = YES; 623 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 624 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 625 | COPY_PHASE_STRIP = NO; 626 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 627 | ENABLE_NS_ASSERTIONS = NO; 628 | ENABLE_STRICT_OBJC_MSGSEND = YES; 629 | ENABLE_USER_SCRIPT_SANDBOXING = NO; 630 | GCC_C_LANGUAGE_STANDARD = gnu99; 631 | GCC_NO_COMMON_BLOCKS = YES; 632 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 633 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 634 | GCC_WARN_UNDECLARED_SELECTOR = YES; 635 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 636 | GCC_WARN_UNUSED_FUNCTION = YES; 637 | GCC_WARN_UNUSED_VARIABLE = YES; 638 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 639 | MTL_ENABLE_DEBUG_INFO = NO; 640 | SDKROOT = iphoneos; 641 | SUPPORTED_PLATFORMS = iphoneos; 642 | SWIFT_COMPILATION_MODE = wholemodule; 643 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 644 | TARGETED_DEVICE_FAMILY = "1,2"; 645 | VALIDATE_PRODUCT = YES; 646 | }; 647 | name = Release; 648 | }; 649 | 97C147061CF9000F007C117D /* Debug */ = { 650 | isa = XCBuildConfiguration; 651 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 652 | buildSettings = { 653 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 654 | CLANG_ENABLE_MODULES = YES; 655 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 656 | ENABLE_BITCODE = NO; 657 | INFOPLIST_FILE = Runner/Info.plist; 658 | LD_RUNPATH_SEARCH_PATHS = ( 659 | "$(inherited)", 660 | "@executable_path/Frameworks", 661 | ); 662 | PRODUCT_BUNDLE_IDENTIFIER = com.example.viceApp; 663 | PRODUCT_NAME = "$(TARGET_NAME)"; 664 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 665 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 666 | SWIFT_VERSION = 5.0; 667 | VERSIONING_SYSTEM = "apple-generic"; 668 | }; 669 | name = Debug; 670 | }; 671 | 97C147071CF9000F007C117D /* Release */ = { 672 | isa = XCBuildConfiguration; 673 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 674 | buildSettings = { 675 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 676 | CLANG_ENABLE_MODULES = YES; 677 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 678 | ENABLE_BITCODE = NO; 679 | INFOPLIST_FILE = Runner/Info.plist; 680 | LD_RUNPATH_SEARCH_PATHS = ( 681 | "$(inherited)", 682 | "@executable_path/Frameworks", 683 | ); 684 | PRODUCT_BUNDLE_IDENTIFIER = com.example.viceApp; 685 | PRODUCT_NAME = "$(TARGET_NAME)"; 686 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 687 | SWIFT_VERSION = 5.0; 688 | VERSIONING_SYSTEM = "apple-generic"; 689 | }; 690 | name = Release; 691 | }; 692 | /* End XCBuildConfiguration section */ 693 | 694 | /* Begin XCConfigurationList section */ 695 | 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { 696 | isa = XCConfigurationList; 697 | buildConfigurations = ( 698 | 331C8088294A63A400263BE5 /* Debug */, 699 | 331C8089294A63A400263BE5 /* Release */, 700 | 331C808A294A63A400263BE5 /* Profile */, 701 | ); 702 | defaultConfigurationIsVisible = 0; 703 | defaultConfigurationName = Release; 704 | }; 705 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 706 | isa = XCConfigurationList; 707 | buildConfigurations = ( 708 | 97C147031CF9000F007C117D /* Debug */, 709 | 97C147041CF9000F007C117D /* Release */, 710 | 249021D3217E4FDB00AE95B9 /* Profile */, 711 | ); 712 | defaultConfigurationIsVisible = 0; 713 | defaultConfigurationName = Release; 714 | }; 715 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 716 | isa = XCConfigurationList; 717 | buildConfigurations = ( 718 | 97C147061CF9000F007C117D /* Debug */, 719 | 97C147071CF9000F007C117D /* Release */, 720 | 249021D4217E4FDB00AE95B9 /* Profile */, 721 | ); 722 | defaultConfigurationIsVisible = 0; 723 | defaultConfigurationName = Release; 724 | }; 725 | /* End XCConfigurationList section */ 726 | }; 727 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 728 | } 729 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.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/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 | -------------------------------------------------------------------------------- /ios/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 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | 4 | @main 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 | -------------------------------------------------------------------------------- /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/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/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/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hammadx02/Flutter-Animated-Infinite-Slider/b9de72b5dfe45464753e5521eed1569ff9a8ece8/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /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. -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | Vice App 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | vice_app 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/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/core/app/vice_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../features/home/presentation/screens/home_screen.dart'; 4 | import '../core.dart'; 5 | 6 | class ViceApp extends StatelessWidget { 7 | const ViceApp({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return MaterialApp( 12 | debugShowCheckedModeBanner: false, 13 | title: 'The Flutter Way', 14 | theme: ViceTheme.theme, 15 | home: HomeScreen(), 16 | ); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /lib/core/constants/constants.dart: -------------------------------------------------------------------------------- 1 | export 'vice_ui_consts.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/constants/vice_ui_consts.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../core.dart'; 4 | 5 | class ViceUIConsts { 6 | ViceUIConsts._(); 7 | 8 | static const BoxDecoration gradientDecoration = BoxDecoration( 9 | gradient: LinearGradient( 10 | begin: Alignment.topCenter, 11 | end: Alignment.bottomCenter, 12 | stops: [0.3, 1], 13 | colors: ViceColors.scaffoldColors, 14 | ), 15 | ); 16 | 17 | // static double headerHeight = 0.65.sh; 18 | static double headerHeight(BuildContext context) { 19 | return MediaQuery.of(context).size.height * 0.65; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/core/core.dart: -------------------------------------------------------------------------------- 1 | export 'app/vice_app.dart'; 2 | export 'constants/constants.dart'; 3 | export 'shared/shared.dart'; 4 | export 'theme/theme.dart'; 5 | -------------------------------------------------------------------------------- /lib/core/shared/domain/domain.dart: -------------------------------------------------------------------------------- 1 | export 'entities/entities.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/shared/domain/entities/entities.dart: -------------------------------------------------------------------------------- 1 | export 'magazine.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/shared/domain/entities/magazine.dart: -------------------------------------------------------------------------------- 1 | class Magazine { 2 | const Magazine({ 3 | required this.id, 4 | required this.assetImage, 5 | required this.description, 6 | }); 7 | 8 | final String id; 9 | final String assetImage; 10 | final String description; 11 | static final List fakeMagazinesValues = List.generate( 12 | 13, 13 | (index) => Magazine( 14 | id: '$index', 15 | assetImage: 'assets/img/vice/vice${index + 1}.png', 16 | description: 17 | 'Lorem Ipsum is simply dummy text of the printing and typesetting ' 18 | "industry. Lorem Ipsum has been the industry's standard dummy " 19 | 'text ever since the 1500s, when an unknown printer took a galley ' 20 | 'of type and scrambled it to make a type specimen book. It has ' 21 | 'survived not only five centuries, but also the leap into ' 22 | 'electronic typesetting, remaining essentially unchanged. It was ' 23 | 'popularised in the 1960s with the release of word set sheets ' 24 | 'containing Lorem Ipsum passages, and more recently with desktop' 25 | ' publishing software like Aldus PageMaker including versions of ' 26 | 'Lorem Ipsum', 27 | ), 28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /lib/core/shared/presentation/presentation.dart: -------------------------------------------------------------------------------- 1 | export 'widgets/widgets.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/shared/presentation/widgets/custom_tween_animation.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class CustomTweenAnimation extends StatelessWidget { 6 | const CustomTweenAnimation({ 7 | required this.child, 8 | this.onlyScale = false, 9 | super.key, 10 | }); 11 | 12 | final Widget child; 13 | final bool onlyScale; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return TweenAnimationBuilder( 18 | duration: const Duration(milliseconds: 600), 19 | curve: Curves.fastOutSlowIn, 20 | tween: Tween(begin: 1, end: 0), 21 | builder: (_, value, child) { 22 | if (onlyScale) { 23 | return Transform.scale( 24 | scale: lerpDouble(1, -1, value)?.clamp(0, 1), 25 | child: child, 26 | ); 27 | } 28 | return Transform.translate( 29 | offset: Offset(0, 50 * value), 30 | child: Opacity(opacity: 1 - value, child: child), 31 | ); 32 | }, 33 | child: child, 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/core/shared/presentation/widgets/magazine_cover_image.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../../core.dart'; 4 | 5 | class MagazineCoverImage extends StatelessWidget { 6 | const MagazineCoverImage({ 7 | required this.magazine, 8 | super.key, 9 | this.height, 10 | }); 11 | 12 | final Magazine magazine; 13 | final double? height; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return SizedBox( 18 | height: height, 19 | child: AspectRatio( 20 | aspectRatio: .75, 21 | child: DecoratedBox( 22 | decoration: BoxDecoration( 23 | image: DecorationImage( 24 | image: AssetImage(magazine.assetImage), 25 | fit: BoxFit.cover, 26 | ), 27 | boxShadow: const [ 28 | BoxShadow( 29 | color: Colors.black54, 30 | blurRadius: 40, 31 | offset: Offset(-20, 20), 32 | ) 33 | ], 34 | ), 35 | ), 36 | ), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/core/shared/presentation/widgets/menu_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../../theme/vice_icons.dart'; 4 | 5 | class MenuButton extends StatelessWidget { 6 | const MenuButton({ 7 | super.key, 8 | this.color = Colors.white70, 9 | }); 10 | 11 | final Color color; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Hero( 16 | tag: 'menu-button', 17 | child: Material( 18 | type: MaterialType.transparency, 19 | child: IconButton( 20 | onPressed: () {}, 21 | icon: Icon(ViceIcons.menu, size: 30, color: color), 22 | ), 23 | ), 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/core/shared/presentation/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'custom_tween_animation.dart'; 2 | export 'magazine_cover_image.dart'; 3 | export 'menu_button.dart'; 4 | -------------------------------------------------------------------------------- /lib/core/shared/shared.dart: -------------------------------------------------------------------------------- 1 | export 'domain/domain.dart'; 2 | export 'presentation/presentation.dart'; 3 | -------------------------------------------------------------------------------- /lib/core/theme/theme.dart: -------------------------------------------------------------------------------- 1 | export 'vice_colors.dart'; 2 | export 'vice_icons.dart'; 3 | export 'vice_theme.dart'; 4 | -------------------------------------------------------------------------------- /lib/core/theme/vice_colors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ViceColors { 4 | const ViceColors._(); 5 | 6 | static const purple = Colors.purpleAccent; 7 | static const lightGreen = Colors.greenAccent; 8 | static const textColor = Colors.black; 9 | static const List scaffoldColors = [ 10 | Color(0xff9876cc), 11 | Color(0xff80c7a9), 12 | ]; 13 | } 14 | -------------------------------------------------------------------------------- /lib/core/theme/vice_icons.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class ViceIcons { 5 | const ViceIcons._(); 6 | 7 | static const IconData search = CupertinoIcons.search; 8 | static const IconData menu = CupertinoIcons.line_horizontal_3_decrease; 9 | static const IconData lock = CupertinoIcons.lock_fill; 10 | static const IconData home = CupertinoIcons.home; 11 | static const IconData settings = CupertinoIcons.settings; 12 | static const IconData share = Icons.share_outlined; 13 | static const IconData heart = CupertinoIcons.heart; 14 | static const IconData close = CupertinoIcons.clear_circled_solid; 15 | static const IconData save = CupertinoIcons.bookmark; 16 | } 17 | -------------------------------------------------------------------------------- /lib/core/theme/vice_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../core.dart'; 4 | 5 | class ViceTheme { 6 | const ViceTheme._(); 7 | 8 | static ThemeData get theme => ThemeData( 9 | primarySwatch: Colors.purple, 10 | primaryColor: ViceColors.purple, 11 | scaffoldBackgroundColor: Colors.transparent, 12 | appBarTheme: const AppBarTheme( 13 | backgroundColor: Colors.transparent, 14 | elevation: 0, 15 | centerTitle: true, 16 | ), 17 | inputDecorationTheme: InputDecorationTheme( 18 | filled: true, 19 | fillColor: Colors.white54, 20 | contentPadding: EdgeInsets.all(10), 21 | border: OutlineInputBorder( 22 | borderRadius: BorderRadius.all(Radius.circular(10)), 23 | borderSide: BorderSide.none, 24 | ), 25 | ), 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /lib/features/home/presentation/screens/home_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../../../core/core.dart'; 4 | import '../../../magazines_details/presentation/screens/magazines_details_screen.dart'; 5 | import '../widgets/all_editions_list_view.dart'; 6 | import '../widgets/infinite_dragable_slider.dart'; 7 | 8 | class HomeScreen extends StatefulWidget { 9 | const HomeScreen({ 10 | super.key, 11 | this.enableEntryAnimation = false, 12 | this.initialIndex = 0, 13 | }); 14 | 15 | final bool enableEntryAnimation; 16 | final int initialIndex; 17 | 18 | @override 19 | State createState() => _HomeScreenState(); 20 | } 21 | 22 | class _HomeScreenState extends State with TickerProviderStateMixin { 23 | final List magazines = Magazine.fakeMagazinesValues; 24 | late int currentIndex; 25 | 26 | @override 27 | void initState() { 28 | currentIndex = widget.initialIndex; 29 | 30 | super.initState(); 31 | } 32 | 33 | @override 34 | void dispose() { 35 | super.dispose(); 36 | } 37 | 38 | void openMagazineDetail( 39 | BuildContext context, 40 | int index, 41 | ) { 42 | setState(() => currentIndex = index); 43 | MagazinesDetailsScreen.push( 44 | context, 45 | magazines: magazines, 46 | index: currentIndex, 47 | ); 48 | } 49 | 50 | @override 51 | Widget build(BuildContext context) { 52 | return DecoratedBox( 53 | decoration: ViceUIConsts.gradientDecoration, 54 | child: Scaffold( 55 | resizeToAvoidBottomInset: false, 56 | appBar: _AppBar(), 57 | body: Column( 58 | children: [ 59 | SizedBox(height: 12), 60 | Padding( 61 | padding: EdgeInsets.symmetric(horizontal: 20), 62 | child: const TextField( 63 | decoration: InputDecoration( 64 | prefixIcon: Icon(ViceIcons.search), 65 | ), 66 | ), 67 | ), 68 | SizedBox(height: 20), 69 | const Text( 70 | 'THE ARCHIVE', 71 | style: TextStyle( 72 | fontWeight: FontWeight.w700, 73 | color: Colors.white, 74 | ), 75 | ), 76 | SizedBox(height: 24), 77 | Expanded( 78 | child: InfiniteDragableSlider( 79 | itemCount: Magazine.fakeMagazinesValues.length, 80 | itemBuilder: (context, index) => MagazineCoverImage( 81 | magazine: Magazine.fakeMagazinesValues[index], 82 | ), 83 | ), 84 | ), 85 | SizedBox(height: 72), 86 | SizedBox( 87 | height: 140, 88 | child: AllEditionsListView(magazines: magazines), 89 | ), 90 | SizedBox(height: 12), 91 | ], 92 | ), 93 | bottomNavigationBar: SafeArea( 94 | child: SizedBox( 95 | height: kToolbarHeight, 96 | child: Row( 97 | mainAxisAlignment: MainAxisAlignment.spaceAround, 98 | children: [ 99 | IconButton( 100 | onPressed: () {}, 101 | icon: const Icon(ViceIcons.home), 102 | ), 103 | IconButton( 104 | onPressed: () {}, 105 | icon: const Icon(ViceIcons.settings), 106 | ), 107 | IconButton( 108 | onPressed: () {}, 109 | icon: const Icon(ViceIcons.share), 110 | ), 111 | IconButton( 112 | onPressed: () {}, 113 | icon: const Icon(ViceIcons.heart), 114 | ), 115 | ], 116 | ), 117 | ), 118 | ), 119 | ), 120 | ); 121 | } 122 | } 123 | 124 | class _AppBar extends StatelessWidget implements PreferredSize { 125 | @override 126 | Widget build(BuildContext context) { 127 | return AppBar( 128 | clipBehavior: Clip.none, 129 | title: Image.asset( 130 | 'assets/img/vice/vice-logo.png', 131 | height: 30, 132 | color: Colors.white, 133 | ), 134 | actions: [ 135 | const MenuButton(), 136 | ], 137 | ); 138 | } 139 | 140 | @override 141 | Widget get child => this; 142 | 143 | @override 144 | Size get preferredSize => const Size.fromHeight(kToolbarHeight); 145 | } 146 | -------------------------------------------------------------------------------- /lib/features/home/presentation/widgets/all_editions_list_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../../../core/shared/domain/entities/magazine.dart'; 4 | 5 | class AllEditionsListView extends StatelessWidget { 6 | const AllEditionsListView({ 7 | required this.magazines, 8 | super.key, 9 | }); 10 | 11 | final List magazines; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Column( 16 | crossAxisAlignment: CrossAxisAlignment.stretch, 17 | children: [ 18 | Padding( 19 | padding: EdgeInsets.symmetric(horizontal: 20), 20 | child: const Text( 21 | 'ALL EDITIONS', 22 | style: TextStyle(fontWeight: FontWeight.w600), 23 | ), 24 | ), 25 | SizedBox(height: 4), 26 | Expanded( 27 | child: ListView.builder( 28 | padding: EdgeInsets.symmetric(horizontal: 20), 29 | itemCount: magazines.length, 30 | scrollDirection: Axis.horizontal, 31 | itemBuilder: (context, index) { 32 | final magazine = magazines[index]; 33 | return Padding( 34 | padding: EdgeInsets.only(right: 12), 35 | child: AspectRatio( 36 | aspectRatio: 1, 37 | child: Image.asset( 38 | magazine.assetImage, 39 | fit: BoxFit.cover, 40 | alignment: Alignment.topCenter, 41 | ), 42 | ), 43 | ); 44 | }, 45 | ), 46 | ) 47 | ], 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/features/home/presentation/widgets/dragable_widget.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | enum SlideDirection { left, right } 6 | 7 | class DragableWidget extends StatefulWidget { 8 | const DragableWidget({ 9 | Key? key, 10 | required this.child, 11 | this.onSlideOut, 12 | this.onPressed, 13 | required this.isEnableDrag, 14 | }) : super(key: key); 15 | 16 | final Widget child; 17 | final ValueChanged? onSlideOut; 18 | final VoidCallback? onPressed; 19 | final bool isEnableDrag; 20 | 21 | @override 22 | State createState() => _DragableWidgetState(); 23 | } 24 | 25 | class _DragableWidgetState extends State 26 | with SingleTickerProviderStateMixin { 27 | late AnimationController restoreController; 28 | late Size screenSize; 29 | 30 | final _widgetKey = GlobalKey(); 31 | Offset startOffset = Offset.zero; 32 | Offset panOffset = Offset.zero; 33 | Size size = Size.zero; 34 | double angle = 0; 35 | 36 | bool itWasMadeSlide = false; 37 | 38 | double get outSizeLimit => size.width * 0.65; 39 | 40 | void onPanStart(DragStartDetails details) { 41 | if (!restoreController.isAnimating) { 42 | setState(() { 43 | startOffset = details.globalPosition; 44 | }); 45 | } 46 | } 47 | 48 | void onPanUpdate(DragUpdateDetails details) { 49 | if (!restoreController.isAnimating) { 50 | setState(() { 51 | panOffset = details.globalPosition - startOffset; 52 | angle = currentAngle; 53 | }); 54 | } 55 | } 56 | 57 | void onPanEnd(DragEndDetails details) { 58 | if (restoreController.isAnimating) { 59 | return; 60 | } 61 | final velocitX = details.velocity.pixelsPerSecond.dx; 62 | final positionX = currentPosition.dx; 63 | 64 | if (velocitX < -1000 || positionX < -outSizeLimit) { 65 | itWasMadeSlide = widget.onSlideOut != null; 66 | widget.onSlideOut?.call(SlideDirection.left); 67 | } 68 | if (velocitX > 1000 || positionX > (screenSize.width - outSizeLimit)) { 69 | itWasMadeSlide = widget.onSlideOut != null; 70 | widget.onSlideOut?.call(SlideDirection.right); 71 | } 72 | restoreController.forward(); 73 | } 74 | 75 | void restoreAnimationListner() { 76 | if (restoreController.isCompleted) { 77 | restoreController.reset(); 78 | panOffset = Offset.zero; 79 | itWasMadeSlide = false; 80 | angle = 0; 81 | setState(() {}); 82 | } 83 | } 84 | 85 | void getChildSize() { 86 | size = 87 | (_widgetKey.currentContext?.findRenderObject() as RenderBox?)?.size ?? 88 | Size.zero; 89 | } 90 | 91 | Offset get currentPosition { 92 | final renderBox = 93 | _widgetKey.currentContext?.findRenderObject() as RenderBox?; 94 | return renderBox?.localToGlobal(Offset.zero) ?? Offset.zero; 95 | } 96 | 97 | double get currentAngle { 98 | return currentPosition.dx < 0 99 | ? (pi * 0.2) * currentPosition.dx / size.width 100 | : currentPosition.dx + size.width > screenSize.width 101 | ? (pi * 0.2) * 102 | (currentPosition.dx + size.width - screenSize.width) / 103 | size.width 104 | : 0; 105 | } 106 | 107 | @override 108 | void initState() { 109 | restoreController = 110 | AnimationController(vsync: this, duration: kThemeAnimationDuration) 111 | ..addListener(restoreAnimationListner); 112 | WidgetsBinding.instance.addPostFrameCallback((_) { 113 | screenSize = MediaQuery.of(context).size; 114 | getChildSize(); 115 | }); 116 | super.initState(); 117 | } 118 | 119 | @override 120 | void dispose() { 121 | restoreController 122 | ..removeListener(restoreAnimationListner) 123 | ..dispose(); 124 | super.dispose(); 125 | } 126 | 127 | @override 128 | Widget build(BuildContext context) { 129 | final child = SizedBox( 130 | key: _widgetKey, 131 | child: widget.child, 132 | ); 133 | if (!widget.isEnableDrag) return child; 134 | return GestureDetector( 135 | onPanStart: onPanStart, 136 | onPanUpdate: onPanUpdate, 137 | onPanEnd: onPanEnd, 138 | child: AnimatedBuilder( 139 | animation: restoreController, 140 | builder: (context, child) { 141 | final value = 1 - restoreController.value; 142 | return Transform.translate( 143 | offset: panOffset * value, 144 | child: Transform.rotate( 145 | angle: angle * (itWasMadeSlide ? 1 : value), 146 | child: child, 147 | ), 148 | ); 149 | }, 150 | child: child, 151 | ), 152 | ); 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /lib/features/home/presentation/widgets/infinite_dragable_slider.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | import 'dart:ui'; 3 | 4 | import 'package:flutter/material.dart'; 5 | import 'package:vice_app/features/home/presentation/widgets/dragable_widget.dart'; 6 | 7 | class InfiniteDragableSlider extends StatefulWidget { 8 | const InfiniteDragableSlider({ 9 | Key? key, 10 | required this.itemBuilder, 11 | required this.itemCount, 12 | this.index = 0, 13 | }) : super(key: key); 14 | 15 | final Function(BuildContext context, int index) itemBuilder; 16 | final int itemCount; 17 | final int index; 18 | 19 | @override 20 | State createState() => _InfiniteDragableSliderState(); 21 | } 22 | 23 | class _InfiniteDragableSliderState extends State 24 | with SingleTickerProviderStateMixin { 25 | final double defaultAngle18Degree = -pi * 0.1; 26 | 27 | late AnimationController controller; 28 | late int index; 29 | 30 | SlideDirection slideDirection = SlideDirection.left; 31 | 32 | Offset getOffset(int stackIndex) { 33 | return { 34 | 0: Offset(lerpDouble(0, -70, controller.value)!, 30), 35 | 1: Offset(lerpDouble(-70, 70, controller.value)!, 30), 36 | 2: Offset(70, 30) * (1 - controller.value), 37 | }[stackIndex] ?? 38 | Offset( 39 | MediaQuery.of(context).size.width * 40 | controller.value * 41 | (slideDirection == SlideDirection.left ? -1 : 0), 42 | 0); 43 | } 44 | 45 | double getAngle(int stackIndex) { 46 | return { 47 | 0: lerpDouble(0, -defaultAngle18Degree, controller.value), 48 | 1: lerpDouble( 49 | defaultAngle18Degree, -defaultAngle18Degree, controller.value), 50 | 2: lerpDouble(-defaultAngle18Degree, 0, controller.value), 51 | }[stackIndex] ?? 52 | 0.0; 53 | } 54 | 55 | double getScale(int stackIndex) { 56 | return { 57 | 0: lerpDouble(0.6, 0.9, controller.value), 58 | 1: lerpDouble(0.9, 0.95, controller.value), 59 | 2: lerpDouble(0.95, 1, controller.value), 60 | }[stackIndex] ?? 61 | 1.0; 62 | } 63 | 64 | void animationListener() { 65 | if (controller.isCompleted) { 66 | setState(() { 67 | // it help us make it infinite slide 68 | if (widget.itemCount == ++index) { 69 | index = 0; 70 | } 71 | }); 72 | controller.reset(); 73 | } 74 | } 75 | 76 | void onSlideOut(SlideDirection direction) { 77 | slideDirection = direction; 78 | controller.forward(); 79 | } 80 | 81 | @override 82 | void initState() { 83 | index = widget.index; 84 | controller = 85 | AnimationController(vsync: this, duration: kThemeAnimationDuration) 86 | ..addListener(animationListener); 87 | super.initState(); 88 | } 89 | 90 | @override 91 | void dispose() { 92 | controller 93 | ..removeListener(animationListener) 94 | ..dispose(); 95 | super.dispose(); 96 | } 97 | 98 | @override 99 | Widget build(BuildContext context) { 100 | return AnimatedBuilder( 101 | animation: controller, 102 | builder: (context, _) { 103 | return Stack( 104 | alignment: Alignment.center, 105 | children: List.generate( 106 | 4, 107 | (stackIndex) { 108 | final modIndex = (index + 3 - stackIndex) % widget.itemCount; 109 | return Transform.translate( 110 | offset: getOffset(stackIndex), 111 | child: Transform.scale( 112 | scale: getScale(stackIndex), 113 | child: Transform.rotate( 114 | angle: getAngle(stackIndex), 115 | child: DragableWidget( 116 | onSlideOut: onSlideOut, 117 | child: widget.itemBuilder(context, modIndex), 118 | isEnableDrag: stackIndex == 3, 119 | ), 120 | ), 121 | ), 122 | ); 123 | }, 124 | ), 125 | ); 126 | }, 127 | ); 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /lib/features/home/presentation/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'all_editions_list_view.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/magazines_details/presentation/screens/magazines_details_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../../../core/core.dart'; 4 | import '../widgets/content_magazines_page_view.dart'; 5 | import '../widgets/heart_and_save_button.dart'; 6 | import '../widgets/sticky_sliver_app_bar.dart'; 7 | 8 | class MagazinesDetailsScreen extends StatefulWidget { 9 | const MagazinesDetailsScreen({ 10 | required this.index, 11 | required this.magazines, 12 | super.key, 13 | }); 14 | 15 | final int index; 16 | final List magazines; 17 | 18 | static void push( 19 | BuildContext context, { 20 | required int index, 21 | required List magazines, 22 | }) => 23 | Navigator.push( 24 | context, 25 | PageRouteBuilder( 26 | pageBuilder: (_, animation, __) => FadeTransition( 27 | opacity: animation, 28 | child: MagazinesDetailsScreen( 29 | index: index, 30 | magazines: magazines, 31 | ), 32 | ), 33 | ), 34 | ); 35 | 36 | @override 37 | State createState() => _MagazinesDetailsScreenState(); 38 | } 39 | 40 | class _MagazinesDetailsScreenState extends State { 41 | late final ScrollController scrollController; 42 | late ValueNotifier indexNotifier; 43 | double headerPercent = 0; 44 | 45 | @override 46 | void initState() { 47 | scrollController = ScrollController(); 48 | indexNotifier = ValueNotifier(widget.index); 49 | super.initState(); 50 | } 51 | 52 | @override 53 | Widget build(BuildContext context) { 54 | return Scaffold( 55 | backgroundColor: Colors.white, 56 | body: Stack( 57 | children: [ 58 | CustomScrollView( 59 | physics: const BouncingScrollPhysics(), 60 | controller: scrollController, 61 | slivers: [ 62 | // TODO: Cube 3D PageView 63 | SliverToBoxAdapter( 64 | child: SizedBox( 65 | height: MediaQuery.of(context).size.height * 0.65, 66 | child: Center( 67 | child: Text( 68 | "TODO: Cube 3D PageView", 69 | style: Theme.of(context).textTheme.titleLarge, 70 | ), 71 | ), 72 | ), 73 | ), 74 | StickySliverAppBar(indexNotifier: indexNotifier), 75 | SliverToBoxAdapter( 76 | child: ContentMagazinesPageView( 77 | indexNotifier: indexNotifier, 78 | magazines: widget.magazines, 79 | ), 80 | ), 81 | ], 82 | ), 83 | HeartAndSaveButtons(), 84 | SafeArea( 85 | child: Row( 86 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 87 | children: [ 88 | IconButton( 89 | color: Color.lerp( 90 | Colors.white60, 91 | Colors.black, 92 | headerPercent, 93 | ), 94 | onPressed: () {}, 95 | icon: const Icon(ViceIcons.close), 96 | ), 97 | MenuButton( 98 | color: Color.lerp( 99 | Colors.white60, 100 | Colors.black, 101 | headerPercent, 102 | )!, 103 | ), 104 | ], 105 | ), 106 | ), 107 | ], 108 | ), 109 | ); 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /lib/features/magazines_details/presentation/widgets/content_magazines_page_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../../../core/core.dart'; 4 | 5 | class ContentMagazinesPageView extends StatefulWidget { 6 | const ContentMagazinesPageView({ 7 | required this.indexNotifier, 8 | required this.magazines, 9 | super.key, 10 | }); 11 | 12 | final ValueNotifier indexNotifier; 13 | final List magazines; 14 | 15 | @override 16 | State createState() => 17 | _ContentMagazinesPageViewState(); 18 | } 19 | 20 | class _ContentMagazinesPageViewState extends State { 21 | late final PageController controller; 22 | Size? sizeWidget; 23 | 24 | @override 25 | Widget build(BuildContext context) { 26 | return SizedBox( 27 | height: sizeWidget?.height ?? MediaQuery.of(context).size.height, 28 | child: PageView.builder( 29 | physics: const NeverScrollableScrollPhysics(), 30 | itemCount: widget.magazines.length, 31 | itemBuilder: (_, index) { 32 | final magazine = widget.magazines[index]; 33 | return SingleChildScrollView( 34 | physics: const NeverScrollableScrollPhysics(), 35 | padding: EdgeInsets.symmetric(horizontal: 20), 36 | child: SizeNotifierWidget( 37 | onSizeChange: (value) => setState(() => sizeWidget = value), 38 | child: Column( 39 | crossAxisAlignment: CrossAxisAlignment.stretch, 40 | mainAxisSize: MainAxisSize.min, 41 | children: [ 42 | SizedBox(height: 20), 43 | for (int x = 0; x < 5; x++) ...[ 44 | Text( 45 | 'TITLE TEST ${magazine.id}', 46 | style: Theme.of(context) 47 | .textTheme 48 | .titleLarge! 49 | .copyWith(letterSpacing: 2), 50 | ), 51 | SizedBox(height: 12), 52 | Padding( 53 | padding: EdgeInsets.only(right: 20), 54 | child: Text( 55 | magazine.description, 56 | style: Theme.of(context) 57 | .textTheme 58 | .bodyMedium! 59 | .copyWith(letterSpacing: 1), 60 | ), 61 | ), 62 | SizedBox(height: 12), 63 | Padding( 64 | padding: EdgeInsets.only(right: 20), 65 | child: Text( 66 | magazine.description, 67 | style: Theme.of(context) 68 | .textTheme 69 | .bodyMedium! 70 | .copyWith(letterSpacing: 1), 71 | ), 72 | ), 73 | SizedBox(height: 12), 74 | Image.asset( 75 | magazine.assetImage, 76 | height: 220, 77 | fit: BoxFit.cover, 78 | ), 79 | SizedBox(height: 28), 80 | ] 81 | ], 82 | ), 83 | ), 84 | ); 85 | }, 86 | ), 87 | ); 88 | } 89 | } 90 | 91 | /// {@template [SizeNotifierWidget]} 92 | /// This widget notifies through its onSizeChanged method that when it is 93 | /// executed send as parameter an object [Size] with the information of the 94 | /// size of their child 95 | /// {@endtemplate} 96 | class SizeNotifierWidget extends StatefulWidget { 97 | /// {@macro [SizeNotifierWidget]} 98 | const SizeNotifierWidget({ 99 | required this.child, 100 | required this.onSizeChange, 101 | super.key, 102 | }); 103 | 104 | /// Child of the widget 105 | final Widget child; 106 | 107 | /// When change size 108 | final ValueChanged onSizeChange; 109 | 110 | @override 111 | State createState() => _SizeNotifierWidgetState(); 112 | } 113 | 114 | class _SizeNotifierWidgetState extends State { 115 | final _widgetKey = GlobalKey(); 116 | Size? _oldSize; 117 | 118 | @override 119 | void initState() { 120 | WidgetsBinding.instance.addPostFrameCallback((_) => _notifySize()); 121 | super.initState(); 122 | } 123 | 124 | @override 125 | Widget build(BuildContext context) { 126 | return NotificationListener( 127 | onNotification: (_) { 128 | WidgetsBinding.instance.addPostFrameCallback((_) => _notifySize()); 129 | return true; 130 | }, 131 | child: SizeChangedLayoutNotifier( 132 | child: SizedBox( 133 | key: _widgetKey, 134 | child: widget.child, 135 | ), 136 | ), 137 | ); 138 | } 139 | 140 | void _notifySize() { 141 | final context = _widgetKey.currentContext; 142 | if (context == null) return; 143 | final size = context.size; 144 | if (_oldSize != size) { 145 | _oldSize = size; 146 | widget.onSizeChange(size!); 147 | } 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /lib/features/magazines_details/presentation/widgets/heart_and_save_button.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui' as ui; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | import '../../../../core/core.dart'; 6 | 7 | class HeartAndSaveButtons extends StatelessWidget { 8 | const HeartAndSaveButtons({ 9 | this.movePercent = 0, 10 | super.key, 11 | }); 12 | 13 | final double movePercent; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | final double height = 48; 18 | final double width = 48; 19 | final bottom = 20 | MediaQuery.of(context).size.height - ViceUIConsts.headerHeight(context); 21 | return Positioned( 22 | bottom: ui.lerpDouble(bottom - height, height, movePercent), 23 | right: 24, 24 | child: Column( 25 | children: [ 26 | SizedBox( 27 | height: height, 28 | width: width, 29 | child: ColoredBox( 30 | color: Colors.black, 31 | child: FittedBox( 32 | child: IconButton( 33 | onPressed: () {}, 34 | icon: const Icon(ViceIcons.heart, color: Colors.white), 35 | ), 36 | ), 37 | ), 38 | ), 39 | SizedBox( 40 | height: height, 41 | width: width, 42 | child: ColoredBox( 43 | color: Colors.green.shade500, 44 | child: FittedBox( 45 | child: IconButton( 46 | onPressed: () {}, 47 | icon: const Icon(ViceIcons.save, color: Colors.white), 48 | ), 49 | ), 50 | ), 51 | ), 52 | ], 53 | ), 54 | ); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /lib/features/magazines_details/presentation/widgets/rectangle_page_view_indicators.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | import '../../../../core/core.dart'; 6 | 7 | class RectanglePageViewIndicators extends StatelessWidget { 8 | const RectanglePageViewIndicators({ 9 | required this.percent, 10 | required this.indexNotifier, 11 | required this.length, 12 | super.key, 13 | }); 14 | 15 | final double percent; 16 | final ValueNotifier indexNotifier; 17 | final int length; 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return Positioned.fill( 22 | top: null, 23 | bottom: lerpDouble(.05 * MediaQuery.of(context).size.height, 24 | -ViceUIConsts.headerHeight(context), percent), 25 | child: ValueListenableBuilder( 26 | valueListenable: indexNotifier, 27 | builder: (__, value, _) => Row( 28 | mainAxisAlignment: MainAxisAlignment.center, 29 | crossAxisAlignment: CrossAxisAlignment.end, 30 | children: List.generate( 31 | length, 32 | (index) { 33 | final isSelected = index == value; 34 | return AnimatedContainer( 35 | duration: kThemeAnimationDuration, 36 | margin: 37 | index != (length - 1) ? EdgeInsets.only(right: 4) : null, 38 | height: isSelected ? 6 : 4, 39 | width: isSelected ? 12 : 8, 40 | color: isSelected ? Colors.white : Colors.white38, 41 | ); 42 | }, 43 | ), 44 | ), 45 | ), 46 | ); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /lib/features/magazines_details/presentation/widgets/sticky_sliver_app_bar.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | import 'dart:ui'; 3 | 4 | import 'package:flutter/material.dart'; 5 | 6 | class StickySliverAppBar extends StatefulWidget { 7 | const StickySliverAppBar({ 8 | this.sizePercent = 0, 9 | required this.indexNotifier, 10 | super.key, 11 | }); 12 | 13 | final double sizePercent; 14 | final ValueNotifier indexNotifier; 15 | 16 | @override 17 | State createState() => _StickySliverAppBarState(); 18 | } 19 | 20 | class _StickySliverAppBarState extends State { 21 | @override 22 | Widget build(BuildContext context) { 23 | return SliverAppBar( 24 | toolbarHeight: lerpDouble(152, 54, widget.sizePercent)!, 25 | leading: const SizedBox.shrink(), 26 | backgroundColor: Colors.white, 27 | foregroundColor: Colors.black, 28 | elevation: 10 * widget.sizePercent, 29 | shadowColor: Colors.white60, 30 | pinned: true, 31 | actions: [ 32 | Expanded( 33 | child: PageView.builder( 34 | physics: const NeverScrollableScrollPhysics(), 35 | itemBuilder: (_, index) => Container( 36 | padding: EdgeInsets.symmetric(horizontal: 20), 37 | decoration: const BoxDecoration( 38 | gradient: LinearGradient( 39 | begin: Alignment.topCenter, 40 | end: Alignment.bottomCenter, 41 | stops: [0.6, 1], 42 | colors: [ 43 | Colors.white, 44 | Colors.white10, 45 | ], 46 | ), 47 | ), 48 | child: Column( 49 | crossAxisAlignment: CrossAxisAlignment.stretch, 50 | children: [ 51 | Flexible( 52 | child: FittedBox( 53 | alignment: Alignment(-1 * (1 - widget.sizePercent), 0), 54 | child: Text( 55 | 'ISSUE N', 56 | style: Theme.of(context).textTheme.titleSmall, 57 | ), 58 | ), 59 | ), 60 | Flexible( 61 | flex: 10, 62 | child: FittedBox( 63 | alignment: Alignment(-1 * (1 - widget.sizePercent), 0), 64 | child: Stack( 65 | children: [ 66 | Text( 67 | '${index < 9 ? '0' : ''}${index + 1}', 68 | style: const TextStyle(fontWeight: FontWeight.bold), 69 | ), 70 | Positioned.fill( 71 | child: Transform.rotate( 72 | angle: -pi * .1, 73 | child: const Divider( 74 | color: Colors.black, 75 | thickness: .3, 76 | ), 77 | ), 78 | ) 79 | ], 80 | ), 81 | ), 82 | ), 83 | ], 84 | ), 85 | ), 86 | ), 87 | ), 88 | ], 89 | ); 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /lib/features/magazines_details/presentation/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'heart_and_save_button.dart'; 2 | export 'rectangle_page_view_indicators.dart'; 3 | export 'sticky_sliver_app_bar.dart'; 4 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | 4 | import 'core/app/vice_app.dart'; 5 | 6 | void main() { 7 | SystemChrome.setSystemUIOverlayStyle( 8 | const SystemUiOverlayStyle(statusBarColor: Colors.transparent), 9 | ); 10 | runApp(const ViceApp()); 11 | } 12 | -------------------------------------------------------------------------------- /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 | cached_network_image: 21 | dependency: "direct main" 22 | description: 23 | name: cached_network_image 24 | sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "3.3.1" 28 | cached_network_image_platform_interface: 29 | dependency: transitive 30 | description: 31 | name: cached_network_image_platform_interface 32 | sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "4.0.0" 36 | cached_network_image_web: 37 | dependency: transitive 38 | description: 39 | name: cached_network_image_web 40 | sha256: "42a835caa27c220d1294311ac409a43361088625a4f23c820b006dd9bffb3316" 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "1.1.1" 44 | characters: 45 | dependency: transitive 46 | description: 47 | name: characters 48 | sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.3.0" 52 | clock: 53 | dependency: transitive 54 | description: 55 | name: clock 56 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "1.1.1" 60 | collection: 61 | dependency: transitive 62 | description: 63 | name: collection 64 | sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "1.18.0" 68 | crypto: 69 | dependency: transitive 70 | description: 71 | name: crypto 72 | sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "3.0.3" 76 | cupertino_icons: 77 | dependency: "direct main" 78 | description: 79 | name: cupertino_icons 80 | sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "1.0.6" 84 | fake_async: 85 | dependency: transitive 86 | description: 87 | name: fake_async 88 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "1.3.1" 92 | ffi: 93 | dependency: transitive 94 | description: 95 | name: ffi 96 | sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "2.1.3" 100 | file: 101 | dependency: transitive 102 | description: 103 | name: file 104 | sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "7.0.0" 108 | fixnum: 109 | dependency: transitive 110 | description: 111 | name: fixnum 112 | sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "1.1.0" 116 | flutter: 117 | dependency: "direct main" 118 | description: flutter 119 | source: sdk 120 | version: "0.0.0" 121 | flutter_cache_manager: 122 | dependency: transitive 123 | description: 124 | name: flutter_cache_manager 125 | sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba" 126 | url: "https://pub.dev" 127 | source: hosted 128 | version: "3.3.1" 129 | flutter_test: 130 | dependency: "direct dev" 131 | description: flutter 132 | source: sdk 133 | version: "0.0.0" 134 | fluttericon: 135 | dependency: "direct main" 136 | description: 137 | name: fluttericon 138 | sha256: "252fa8043826e93d972a602497a260cb3d62b5aea6d045793e4381590f2c1e99" 139 | url: "https://pub.dev" 140 | source: hosted 141 | version: "2.0.0" 142 | google_fonts: 143 | dependency: "direct main" 144 | description: 145 | name: google_fonts 146 | sha256: e20ff62b158b96f392bfc8afe29dee1503c94fbea2cbe8186fd59b756b8ae982 147 | url: "https://pub.dev" 148 | source: hosted 149 | version: "5.1.0" 150 | http: 151 | dependency: transitive 152 | description: 153 | name: http 154 | sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba 155 | url: "https://pub.dev" 156 | source: hosted 157 | version: "1.2.0" 158 | http_parser: 159 | dependency: transitive 160 | description: 161 | name: http_parser 162 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 163 | url: "https://pub.dev" 164 | source: hosted 165 | version: "4.0.2" 166 | leak_tracker: 167 | dependency: transitive 168 | description: 169 | name: leak_tracker 170 | sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" 171 | url: "https://pub.dev" 172 | source: hosted 173 | version: "10.0.5" 174 | leak_tracker_flutter_testing: 175 | dependency: transitive 176 | description: 177 | name: leak_tracker_flutter_testing 178 | sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" 179 | url: "https://pub.dev" 180 | source: hosted 181 | version: "3.0.5" 182 | leak_tracker_testing: 183 | dependency: transitive 184 | description: 185 | name: leak_tracker_testing 186 | sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" 187 | url: "https://pub.dev" 188 | source: hosted 189 | version: "3.0.1" 190 | matcher: 191 | dependency: transitive 192 | description: 193 | name: matcher 194 | sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb 195 | url: "https://pub.dev" 196 | source: hosted 197 | version: "0.12.16+1" 198 | material_color_utilities: 199 | dependency: transitive 200 | description: 201 | name: material_color_utilities 202 | sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec 203 | url: "https://pub.dev" 204 | source: hosted 205 | version: "0.11.1" 206 | meta: 207 | dependency: transitive 208 | description: 209 | name: meta 210 | sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 211 | url: "https://pub.dev" 212 | source: hosted 213 | version: "1.15.0" 214 | octo_image: 215 | dependency: transitive 216 | description: 217 | name: octo_image 218 | sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d" 219 | url: "https://pub.dev" 220 | source: hosted 221 | version: "2.0.0" 222 | path: 223 | dependency: transitive 224 | description: 225 | name: path 226 | sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" 227 | url: "https://pub.dev" 228 | source: hosted 229 | version: "1.9.0" 230 | path_provider: 231 | dependency: transitive 232 | description: 233 | name: path_provider 234 | sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b 235 | url: "https://pub.dev" 236 | source: hosted 237 | version: "2.1.2" 238 | path_provider_android: 239 | dependency: transitive 240 | description: 241 | name: path_provider_android 242 | sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" 243 | url: "https://pub.dev" 244 | source: hosted 245 | version: "2.2.2" 246 | path_provider_foundation: 247 | dependency: transitive 248 | description: 249 | name: path_provider_foundation 250 | sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" 251 | url: "https://pub.dev" 252 | source: hosted 253 | version: "2.3.2" 254 | path_provider_linux: 255 | dependency: transitive 256 | description: 257 | name: path_provider_linux 258 | sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 259 | url: "https://pub.dev" 260 | source: hosted 261 | version: "2.2.1" 262 | path_provider_platform_interface: 263 | dependency: transitive 264 | description: 265 | name: path_provider_platform_interface 266 | sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" 267 | url: "https://pub.dev" 268 | source: hosted 269 | version: "2.1.2" 270 | path_provider_windows: 271 | dependency: transitive 272 | description: 273 | name: path_provider_windows 274 | sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" 275 | url: "https://pub.dev" 276 | source: hosted 277 | version: "2.2.1" 278 | platform: 279 | dependency: transitive 280 | description: 281 | name: platform 282 | sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" 283 | url: "https://pub.dev" 284 | source: hosted 285 | version: "3.1.4" 286 | plugin_platform_interface: 287 | dependency: transitive 288 | description: 289 | name: plugin_platform_interface 290 | sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" 291 | url: "https://pub.dev" 292 | source: hosted 293 | version: "2.1.8" 294 | rxdart: 295 | dependency: transitive 296 | description: 297 | name: rxdart 298 | sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" 299 | url: "https://pub.dev" 300 | source: hosted 301 | version: "0.27.7" 302 | sky_engine: 303 | dependency: transitive 304 | description: flutter 305 | source: sdk 306 | version: "0.0.99" 307 | source_span: 308 | dependency: transitive 309 | description: 310 | name: source_span 311 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 312 | url: "https://pub.dev" 313 | source: hosted 314 | version: "1.10.0" 315 | sprintf: 316 | dependency: transitive 317 | description: 318 | name: sprintf 319 | sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" 320 | url: "https://pub.dev" 321 | source: hosted 322 | version: "7.0.0" 323 | sqflite: 324 | dependency: transitive 325 | description: 326 | name: sqflite 327 | sha256: a9016f495c927cb90557c909ff26a6d92d9bd54fc42ba92e19d4e79d61e798c6 328 | url: "https://pub.dev" 329 | source: hosted 330 | version: "2.3.2" 331 | sqflite_common: 332 | dependency: transitive 333 | description: 334 | name: sqflite_common 335 | sha256: "28d8c66baee4968519fb8bd6cdbedad982d6e53359091f0b74544a9f32ec72d5" 336 | url: "https://pub.dev" 337 | source: hosted 338 | version: "2.5.3" 339 | stack_trace: 340 | dependency: transitive 341 | description: 342 | name: stack_trace 343 | sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" 344 | url: "https://pub.dev" 345 | source: hosted 346 | version: "1.11.1" 347 | stream_channel: 348 | dependency: transitive 349 | description: 350 | name: stream_channel 351 | sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 352 | url: "https://pub.dev" 353 | source: hosted 354 | version: "2.1.2" 355 | string_scanner: 356 | dependency: transitive 357 | description: 358 | name: string_scanner 359 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 360 | url: "https://pub.dev" 361 | source: hosted 362 | version: "1.2.0" 363 | synchronized: 364 | dependency: transitive 365 | description: 366 | name: synchronized 367 | sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" 368 | url: "https://pub.dev" 369 | source: hosted 370 | version: "3.1.0+1" 371 | term_glyph: 372 | dependency: transitive 373 | description: 374 | name: term_glyph 375 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 376 | url: "https://pub.dev" 377 | source: hosted 378 | version: "1.2.1" 379 | test_api: 380 | dependency: transitive 381 | description: 382 | name: test_api 383 | sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" 384 | url: "https://pub.dev" 385 | source: hosted 386 | version: "0.7.2" 387 | typed_data: 388 | dependency: transitive 389 | description: 390 | name: typed_data 391 | sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c 392 | url: "https://pub.dev" 393 | source: hosted 394 | version: "1.3.2" 395 | uuid: 396 | dependency: transitive 397 | description: 398 | name: uuid 399 | sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8 400 | url: "https://pub.dev" 401 | source: hosted 402 | version: "4.3.3" 403 | vector_math: 404 | dependency: transitive 405 | description: 406 | name: vector_math 407 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 408 | url: "https://pub.dev" 409 | source: hosted 410 | version: "2.1.4" 411 | very_good_analysis: 412 | dependency: "direct dev" 413 | description: 414 | name: very_good_analysis 415 | sha256: "9ae7f3a3bd5764fb021b335ca28a34f040cd0ab6eec00a1b213b445dae58a4b8" 416 | url: "https://pub.dev" 417 | source: hosted 418 | version: "5.1.0" 419 | vm_service: 420 | dependency: transitive 421 | description: 422 | name: vm_service 423 | sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" 424 | url: "https://pub.dev" 425 | source: hosted 426 | version: "14.2.5" 427 | web: 428 | dependency: transitive 429 | description: 430 | name: web 431 | sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 432 | url: "https://pub.dev" 433 | source: hosted 434 | version: "0.3.0" 435 | win32: 436 | dependency: "direct main" 437 | description: 438 | name: win32 439 | sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" 440 | url: "https://pub.dev" 441 | source: hosted 442 | version: "5.5.4" 443 | xdg_directories: 444 | dependency: transitive 445 | description: 446 | name: xdg_directories 447 | sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d 448 | url: "https://pub.dev" 449 | source: hosted 450 | version: "1.0.4" 451 | sdks: 452 | dart: ">=3.4.0 <4.0.0" 453 | flutter: ">=3.18.0-18.0.pre.54" 454 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: vice_app 2 | description: A new Flutter project. 3 | 4 | publish_to: "none" 5 | 6 | version: 1.0.0+1 7 | 8 | environment: 9 | sdk: ">=3.0.6 <4.0.0" 10 | 11 | dependencies: 12 | cached_network_image: ^3.3.1 13 | cupertino_icons: ^1.0.6 14 | flutter: 15 | sdk: flutter 16 | fluttericon: ^2.0.0 17 | google_fonts: ^5.1.0 18 | win32: ^5.5.4 19 | 20 | dev_dependencies: 21 | flutter_test: 22 | sdk: flutter 23 | very_good_analysis: ^5.1.0 24 | 25 | flutter: 26 | uses-material-design: true 27 | assets: 28 | - assets/img/vice/ 29 | 30 | # name: vice_app 31 | # description: "A new Flutter project." 32 | # # The following line prevents the package from being accidentally published to 33 | # # pub.dev using `flutter pub publish`. This is preferred for private packages. 34 | # publish_to: 'none' # Remove this line if you wish to publish to pub.dev 35 | # # The following defines the version and build number for your application. 36 | # # A version number is three numbers separated by dots, like 1.2.43 37 | # # followed by an optional build number separated by a +. 38 | # # Both the version and the builder number may be overridden in flutter 39 | # # build by specifying --build-name and --build-number, respectively. 40 | # # In Android, build-name is used as versionName while build-number used as versionCode. 41 | # # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 42 | # # In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. 43 | # # Read more about iOS versioning at 44 | # # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 45 | # # In Windows, build-name is used as the major, minor, and patch parts 46 | # # of the product and file versions while build-number is used as the build suffix. 47 | # version: 1.0.0+1 48 | # environment: 49 | # sdk: '>=3.4.0-92.0.dev <4.0.0' 50 | # # Dependencies specify other packages that your package needs in order to work. 51 | # # To automatically upgrade your package dependencies to the latest versions 52 | # # consider running `flutter pub upgrade --major-versions`. Alternatively, 53 | # # dependencies can be manually updated by changing the version numbers below to 54 | # # the latest version available on pub.dev. To see which dependencies have newer 55 | # # versions available, run `flutter pub outdated`. 56 | # dependencies: 57 | # flutter: 58 | # sdk: flutter 59 | # # The following adds the Cupertino Icons font to your application. 60 | # # Use with the CupertinoIcons class for iOS style icons. 61 | # cupertino_icons: ^1.0.6 62 | # dev_dependencies: 63 | # flutter_test: 64 | # sdk: flutter 65 | # # The "flutter_lints" package below contains a set of recommended lints to 66 | # # encourage good coding practices. The lint set provided by the package is 67 | # # activated in the `analysis_options.yaml` file located at the root of your 68 | # # package. See that file for information about deactivating specific lint 69 | # # rules and activating additional ones. 70 | # flutter_lints: ^3.0.0 71 | # # For information on the generic Dart part of this file, see the 72 | # # following page: https://dart.dev/tools/pub/pubspec 73 | # # The following section is specific to Flutter packages. 74 | # flutter: 75 | # # The following line ensures that the Material Icons font is 76 | # # included with your application, so that you can use the icons in 77 | # # the material Icons class. 78 | # uses-material-design: true 79 | # # To add assets to your application, add an assets section, like this: 80 | # # assets: 81 | # # - images/a_dot_burr.jpeg 82 | # # - images/a_dot_ham.jpeg 83 | # # An image asset can refer to one or more resolution-specific "variants", see 84 | # # https://flutter.dev/assets-and-images/#resolution-aware 85 | # # For details regarding adding assets from package dependencies, see 86 | # # https://flutter.dev/assets-and-images/#from-packages 87 | # # To add custom fonts to your application, add a fonts section here, 88 | # # in this "flutter" section. Each entry in this list should have a 89 | # # "family" key with the font family name, and a "fonts" key with a 90 | # # list giving the asset and other descriptors for the font. For 91 | # # example: 92 | # # fonts: 93 | # # - family: Schyler 94 | # # fonts: 95 | # # - asset: fonts/Schyler-Regular.ttf 96 | # # - asset: fonts/Schyler-Italic.ttf 97 | # # style: italic 98 | # # - family: Trajan Pro 99 | # # fonts: 100 | # # - asset: fonts/TrajanPro.ttf 101 | # # - asset: fonts/TrajanPro_Bold.ttf 102 | # # weight: 700 103 | # # 104 | # # For details regarding fonts from package dependencies, 105 | # # see https://flutter.dev/custom-fonts/#from-packages 106 | --------------------------------------------------------------------------------