[
  {
    "path": ".gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# The .vscode folder contains launch configuration and tasks you configure in\n# VS Code which you may wish to be included in version control, so this line\n# is commented out by default.\n#.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Web related\nlib/generated_plugin_registrant.dart\n\n# Exceptions to above rules.\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": ".metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled and should not be manually edited.\n\nversion:\n  revision: 18cd7a3601bcffb36fdf2f679f763b5e827c2e8e\n  channel: beta\n\nproject_type: app\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021 happyharis\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "This project is licensed under the terms of the MIT license.\n\n<a href=\"https://www.buymeacoffee.com/thehappyharis\" target=\"_blank\"><img src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" style=\"height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;\" ></a>\n\n# Flutter Neumorphic Widgets\n\nJust a repo of neumorphic widgets.\n\nNeumorphic Bars | Neumorphic Pie Chart | Neumorphic Timer | Neumorphic Expense Pie Chart\n--- | --- | --- | --- |\n<img src=\"https://user-images.githubusercontent.com/31005114/73529840-57d7f800-4452-11ea-99cc-ef7728f06326.png\" width=\"200\"/> | <img src=\"https://user-images.githubusercontent.com/31005114/73702800-e1284c80-4728-11ea-9f39-dd9056535dde.png\" width=\"200\"/> | <img src=\"https://user-images.githubusercontent.com/31005114/74322628-2f8bba00-4dbf-11ea-981e-7afc331802b2.png\" width=\"200\"/> |  <img src=\"https://user-images.githubusercontent.com/31005114/77717872-70acf600-701c-11ea-8a30-04bd38d5c30b.png\" width=\"200\"/> | \n[📹 Video](https://youtu.be/0um8Pxs73xI) | [💻 Video](https://youtu.be/uGS-qVUCByQ) | [📹 Video](https://youtu.be/L6g4eRlAsh0) | [💻 Video](https://youtu.be/rkOc8WbgPqw) |\n\nNeumorphic Homepage (with SVG) | Neumorphic Calculator \n--- | --- \n<img src=\"https://user-images.githubusercontent.com/31005114/78777276-d493cf00-79cb-11ea-8fb2-e04c905f0f12.png\" width=\"200\"/> | <img src=\"https://user-images.githubusercontent.com/31005114/79620673-3c23ea00-8143-11ea-9168-d9aa284077a5.png\" width=\"200\"/> \n[📹 Video](https://youtu.be/KKO5PPkdKQg) | [📹 Video](https://youtu.be/8psTnM6RGxU) \n"
  },
  {
    "path": "android/.gitignore",
    "content": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n"
  },
  {
    "path": "android/app/build.gradle",
    "content": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertiesFile.exists()) {\n    localPropertiesFile.withReader('UTF-8') { reader ->\n        localProperties.load(reader)\n    }\n}\n\ndef flutterRoot = localProperties.getProperty('flutter.sdk')\nif (flutterRoot == null) {\n    throw new GradleException(\"Flutter SDK not found. Define location with flutter.sdk in the local.properties file.\")\n}\n\ndef flutterVersionCode = localProperties.getProperty('flutter.versionCode')\nif (flutterVersionCode == null) {\n    flutterVersionCode = '1'\n}\n\ndef flutterVersionName = localProperties.getProperty('flutter.versionName')\nif (flutterVersionName == null) {\n    flutterVersionName = '1.0'\n}\n\napply plugin: 'com.android.application'\napply plugin: 'kotlin-android'\napply from: \"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle\"\n\nandroid {\n    compileSdkVersion 28\n\n    sourceSets {\n        main.java.srcDirs += 'src/main/kotlin'\n    }\n\n    lintOptions {\n        disable 'InvalidPackage'\n    }\n\n    defaultConfig {\n        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).\n        applicationId \"com.example.neumorphism_web\"\n        minSdkVersion 16\n        targetSdkVersion 28\n        versionCode flutterVersionCode.toInteger()\n        versionName flutterVersionName\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            // TODO: Add your own signing config for the release build.\n            // Signing with the debug keys for now, so `flutter run --release` works.\n            signingConfig signingConfigs.debug\n        }\n    }\n}\n\nflutter {\n    source '../..'\n}\n\ndependencies {\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version\"\n    testImplementation 'junit:junit:4.12'\n    androidTestImplementation 'androidx.test:runner:1.1.1'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'\n}\n"
  },
  {
    "path": "android/app/src/debug/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.neumorphism_web\">\n    <!-- Flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.neumorphism_web\">\n    <!-- io.flutter.app.FlutterApplication is an android.app.Application that\n         calls FlutterMain.startInitialization(this); in its onCreate method.\n         In most cases you can leave this as-is, but you if you want to provide\n         additional functionality it is fine to subclass or reimplement\n         FlutterApplication and put your custom class here. -->\n    <application\n        android:name=\"io.flutter.app.FlutterApplication\"\n        android:label=\"neumorphism_web\"\n        android:icon=\"@mipmap/ic_launcher\">\n        <activity\n            android:name=\".MainActivity\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/LaunchTheme\"\n            android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode\"\n            android:hardwareAccelerated=\"true\"\n            android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\"/>\n                <category android:name=\"android.intent.category.LAUNCHER\"/>\n            </intent-filter>\n        </activity>\n        <!-- Don't delete the meta-data below.\n             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->\n        <meta-data\n            android:name=\"flutterEmbedding\"\n            android:value=\"2\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "android/app/src/main/kotlin/com/example/neumorphism_web/MainActivity.kt",
    "content": "package com.example.neumorphism_web\n\nimport androidx.annotation.NonNull;\nimport io.flutter.embedding.android.FlutterActivity\nimport io.flutter.embedding.engine.FlutterEngine\nimport io.flutter.plugins.GeneratedPluginRegistrant\n\nclass MainActivity: FlutterActivity() {\n    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {\n        GeneratedPluginRegistrant.registerWith(flutterEngine);\n    }\n}\n"
  },
  {
    "path": "android/app/src/main/res/drawable/launch_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@android:color/white\" />\n\n    <!-- You can insert your own image assets here -->\n    <!-- <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@mipmap/launch_image\" />\n    </item> -->\n</layer-list>\n"
  },
  {
    "path": "android/app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <!-- Show a splash screen on the activity. Automatically removed when\n             Flutter draws its first frame -->\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "android/app/src/profile/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.neumorphism_web\">\n    <!-- Flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "android/build.gradle",
    "content": "buildscript {\n    ext.kotlin_version = '1.3.50'\n    repositories {\n        google()\n        jcenter()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.5.0'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n    }\n}\n\nrootProject.buildDir = '../build'\nsubprojects {\n    project.buildDir = \"${rootProject.buildDir}/${project.name}\"\n}\nsubprojects {\n    project.evaluationDependsOn(':app')\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-5.6.2-all.zip\n"
  },
  {
    "path": "android/gradle.properties",
    "content": "org.gradle.jvmargs=-Xmx1536M\nandroid.enableR8=true\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
  },
  {
    "path": "android/settings.gradle",
    "content": "include ':app'\n\ndef flutterProjectRoot = rootProject.projectDir.parentFile.toPath()\n\ndef plugins = new Properties()\ndef pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')\nif (pluginsFile.exists()) {\n    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }\n}\n\nplugins.each { name, path ->\n    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()\n    include \":$name\"\n    project(\":$name\").projectDir = pluginDirectory\n}\n"
  },
  {
    "path": "ios/.gitignore",
    "content": "*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/DerivedData/\nIcon?\n**/Pods/\n**/.symlinks/\nprofile\nxcuserdata\n**/.generated/\nFlutter/App.framework\nFlutter/Flutter.framework\nFlutter/Flutter.podspec\nFlutter/Generated.xcconfig\nFlutter/app.flx\nFlutter/app.zip\nFlutter/flutter_assets/\nFlutter/flutter_export_environment.sh\nServiceDefinitions.json\nRunner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!default.mode1v3\n!default.mode2v3\n!default.pbxuser\n!default.perspectivev3\n"
  },
  {
    "path": "ios/Flutter/AppFrameworkInfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>$(DEVELOPMENT_LANGUAGE)</string>\n  <key>CFBundleExecutable</key>\n  <string>App</string>\n  <key>CFBundleIdentifier</key>\n  <string>io.flutter.flutter.app</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>App</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1.0</string>\n  <key>MinimumOSVersion</key>\n  <string>8.0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Flutter/Debug.xcconfig",
    "content": "#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Flutter/Release.xcconfig",
    "content": "#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Runner/AppDelegate.swift",
    "content": "import UIKit\nimport Flutter\n\n@UIApplicationMain\n@objc class AppDelegate: FlutterAppDelegate {\n  override func application(\n    _ application: UIApplication,\n    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?\n  ) -> Bool {\n    GeneratedPluginRegistrant.register(with: self)\n    return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"Icon-App-1024x1024@1x.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "content": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in this directory.\n\nYou 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."
  },
  {
    "path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Ydg-fD-yQy\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xbc-2k-c8Z\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" image=\"LaunchImage\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YRO-k0-Ey4\">\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"1a2-6s-vTC\"/>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"4X2-HB-R7a\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"LaunchImage\" width=\"168\" height=\"185\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "ios/Runner/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--Flutter View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"FlutterViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "ios/Runner/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>neumorphism_web</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(FLUTTER_BUILD_NAME)</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(FLUTTER_BUILD_NUMBER)</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner/Runner-Bridging-Header.h",
    "content": "#import \"GeneratedPluginRegistrant.h\""
  },
  {
    "path": "ios/Runner.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };\n\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };\n\t\t3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };\n\t\t3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };\n\t\t9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };\n\t\t9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };\n\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };\n\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t9705A1C41CF9048500538489 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,\n\t\t\t\t9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = \"<group>\"; };\n\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = \"<group>\"; };\n\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = \"<group>\"; };\n\t\t3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = \"<group>\"; };\n\t\t74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Runner-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = \"<group>\"; };\n\t\t97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t97C146EB1CF9000F007C117D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,\n\t\t\t\t3B80C3941E831B6300D905FE /* App.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t9740EEB11CF90186004384FC /* Flutter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3B80C3931E831B6300D905FE /* App.framework */,\n\t\t\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,\n\t\t\t\t9740EEBA1CF902C7004384FC /* Flutter.framework */,\n\t\t\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */,\n\t\t\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */,\n\t\t\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */,\n\t\t\t);\n\t\t\tname = Flutter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146E51CF9000F007C117D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9740EEB11CF90186004384FC /* Flutter */,\n\t\t\t\t97C146F01CF9000F007C117D /* Runner */,\n\t\t\t\t97C146EF1CF9000F007C117D /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146EF1CF9000F007C117D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146EE1CF9000F007C117D /* Runner.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F01CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FA1CF9000F007C117D /* Main.storyboard */,\n\t\t\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */,\n\t\t\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,\n\t\t\t\t97C147021CF9000F007C117D /* Info.plist */,\n\t\t\t\t97C146F11CF9000F007C117D /* Supporting Files */,\n\t\t\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,\n\t\t\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,\n\t\t\t\t74858FAE1ED2DC5600515810 /* AppDelegate.swift */,\n\t\t\t\t74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = Runner;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F11CF9000F007C117D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t97C146ED1CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9740EEB61CF901F6004384FC /* Run Script */,\n\t\t\t\t97C146EA1CF9000F007C117D /* Sources */,\n\t\t\t\t97C146EB1CF9000F007C117D /* Frameworks */,\n\t\t\t\t97C146EC1CF9000F007C117D /* Resources */,\n\t\t\t\t9705A1C41CF9048500538489 /* Embed Frameworks */,\n\t\t\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Runner;\n\t\t\tproductName = Runner;\n\t\t\tproductReference = 97C146EE1CF9000F007C117D /* Runner.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t97C146E61CF9000F007C117D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1020;\n\t\t\t\tORGANIZATIONNAME = \"The Chromium Authors\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t97C146ED1CF9000F007C117D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tLastSwiftMigration = 1100;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 97C146E51CF9000F007C117D;\n\t\t\tproductRefGroup = 97C146EF1CF9000F007C117D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t97C146ED1CF9000F007C117D /* Runner */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t97C146EC1CF9000F007C117D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,\n\t\t\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,\n\t\t\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Thin Binary\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" thin\";\n\t\t};\n\t\t9740EEB61CF901F6004384FC /* Run Script */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Run Script\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" build\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t97C146EA1CF9000F007C117D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,\n\t\t\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t97C146FA1CF9000F007C117D /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FB1CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C147001CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t249021D3217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t249021D4217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.example.neumorphismWeb;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t97C147031CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147041CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t97C147061CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.example.neumorphismWeb;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147071CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.example.neumorphismWeb;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147031CF9000F007C117D /* Debug */,\n\t\t\t\t97C147041CF9000F007C117D /* Release */,\n\t\t\t\t249021D3217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147061CF9000F007C117D /* Debug */,\n\t\t\t\t97C147071CF9000F007C117D /* Release */,\n\t\t\t\t249021D4217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 97C146E61CF9000F007C117D /* Project object */;\n}\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1020\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n               BuildableName = \"Runner.app\"\n               BlueprintName = \"Runner\"\n               ReferencedContainer = \"container:Runner.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Profile\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "lib/calculator/calculator_logic.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:math_expressions/math_expressions.dart';\n\nclass Calculator extends ChangeNotifier {\n  num _value = 0;\n  List<CalculatorVariable> _actions = [CalculatorNumber('0')];\n\n  num get value => _value;\n  CalculatorVariable get currentVariable => _actions.last;\n\n  void add() {\n    takeAction(\n      CalculatorAdd(),\n      when: _actions.last is! CalculatorAdd,\n    );\n  }\n\n  void deduct() {\n    takeAction(\n      CalculatorDeduct(),\n      when: _actions.last is! CalculatorDeduct,\n    );\n  }\n\n  void multiply() {\n    takeAction(\n      CalculatorMultiply(),\n      when: _actions.last is! CalculatorMultiply,\n    );\n  }\n\n  void divide() {\n    takeAction(\n      CalculatorDivide(),\n      when: _actions.last is! CalculatorDivide,\n    );\n  }\n\n  void takeAction(\n    CalculatorVariable action, {\n    @required bool when,\n  }) {\n    if (when) {\n      if (_actions.last is MathOperator) {\n        _actions.removeLast();\n      } else {\n        _value = parseCalculatorActions(_actions);\n      }\n      _actions.add(action);\n    }\n    notifyListeners();\n  }\n\n  void reset() {\n    _actions = [CalculatorNumber('0')];\n    _value = 0;\n    notifyListeners();\n  }\n\n  void showResult() {\n    _value = parseCalculatorActions(_actions);\n    notifyListeners();\n  }\n\n  void setValue(num number) {\n    if (_actions.last is! CalculatorNumber) _value = 0;\n\n    final stringifyedValue = _value.toString();\n    if (_value == 0) {\n      _value = number;\n    } else {\n      _value = int.parse(stringifyedValue + number.toString());\n    }\n\n    notifyListeners();\n\n    final lastAction = _actions.last;\n    if (lastAction is CalculatorNumber) _actions.removeLast();\n\n    _actions.add(CalculatorNumber(_value.toString()));\n  }\n}\n\nabstract class CalculatorVariable {\n  CalculatorVariable({this.value});\n\n  final String value;\n}\n\nabstract class MathOperator {}\n\nclass CalculatorAdd extends CalculatorVariable with MathOperator {\n  String value = '+';\n}\n\nclass CalculatorMultiply extends CalculatorVariable with MathOperator {\n  String value = '*';\n}\n\nclass CalculatorDivide extends CalculatorVariable with MathOperator {\n  String value = '/';\n}\n\nclass CalculatorDeduct extends CalculatorVariable with MathOperator {\n  String value = '-';\n}\n\nclass CalculatorNumber extends CalculatorVariable {\n  CalculatorNumber(this.value);\n\n  final String value;\n}\n\nnum parseCalculatorActions(List<CalculatorVariable> actions) {\n  final List<String> mathVariables = [];\n\n  actions.forEach((action) => mathVariables.add(action.value));\n\n  final variablesLength = mathVariables.length;\n\n  if (variablesLength.isEven) mathVariables.removeLast();\n\n  final equation = mathVariables.join(' ');\n\n  final num result = Parser().parse(equation).evaluate(\n        EvaluationType.REAL,\n        ContextModel(),\n      );\n\n  print('$equation = $result');\n\n  final prettierResult = isInteger(result) ? result.round() : result;\n\n  return prettierResult;\n}\n\nbool isInteger(num value) {\n  return value is int || value == value.roundToDouble();\n}\n"
  },
  {
    "path": "lib/calculator/calculator_view.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:google_fonts/google_fonts.dart';\nimport 'package:neumorphism_web/calculator/calculator_logic.dart';\nimport 'package:neumorphism_web/calculator/neu_calculator_button.dart';\nimport 'package:neumorphism_web/calculator/neumorphic_theme.dart';\nimport 'package:provider/provider.dart';\n\nclass CalculatorView extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final calculator = Provider.of<Calculator>(context);\n    return Material(\n      child: Padding(\n        padding: const EdgeInsets.symmetric(horizontal: 15.0),\n        child: Column(\n          crossAxisAlignment: CrossAxisAlignment.end,\n          children: [\n            Spacer(),\n            Text(\n              calculator.value.toString(),\n              style: GoogleFonts.montserrat(\n                fontSize: 100,\n                fontWeight: FontWeight.w200,\n              ),\n            ),\n            SizedBox(height: 150),\n            ButtonRow(children: [\n              NeuCalculatorButton(\n                text: 'AC',\n                onPressed: calculator.reset,\n              ),\n              NeuCalculatorButton(\n                text: '+/-',\n                onPressed: () {},\n              ),\n              NeuCalculatorButton(\n                text: '%',\n                onPressed: () {},\n              ),\n              NeuCalculatorButton(\n                text: '÷',\n                textColor: kOrange,\n                textSize: 45,\n                onPressed: calculator.divide,\n                isChosen: calculator.currentVariable is CalculatorDivide,\n              ),\n            ]),\n            ButtonRow(\n              children: [\n                NeuCalculatorButton(\n                  text: '7',\n                  onPressed: () => calculator.setValue(7),\n                ),\n                NeuCalculatorButton(\n                  text: '8',\n                  onPressed: () => calculator.setValue(8),\n                ),\n                NeuCalculatorButton(\n                  text: '9',\n                  onPressed: () => calculator.setValue(9),\n                ),\n                NeuCalculatorButton(\n                  text: 'x',\n                  textColor: kOrange,\n                  onPressed: calculator.multiply,\n                  isChosen: calculator.currentVariable is CalculatorMultiply,\n                ),\n              ],\n            ),\n            ButtonRow(\n              children: [\n                NeuCalculatorButton(\n                  text: '4',\n                  onPressed: () => calculator.setValue(4),\n                ),\n                NeuCalculatorButton(\n                  text: '5',\n                  onPressed: () => calculator.setValue(5),\n                ),\n                NeuCalculatorButton(\n                  text: '6',\n                  onPressed: () => calculator.setValue(6),\n                ),\n                NeuCalculatorButton(\n                  text: '-',\n                  textColor: kOrange,\n                  textSize: 50,\n                  onPressed: calculator.deduct,\n                  isChosen: calculator.currentVariable is CalculatorDeduct,\n                ),\n              ],\n            ),\n            ButtonRow(\n              children: [\n                NeuCalculatorButton(\n                  text: '1',\n                  onPressed: () => calculator.setValue(1),\n                ),\n                NeuCalculatorButton(\n                  text: '2',\n                  onPressed: () => calculator.setValue(2),\n                ),\n                NeuCalculatorButton(\n                  text: '3',\n                  onPressed: () => calculator.setValue(3),\n                ),\n                NeuCalculatorButton(\n                  text: '+',\n                  textColor: kOrange,\n                  textSize: 45,\n                  onPressed: calculator.add,\n                  isChosen: calculator.currentVariable is CalculatorAdd,\n                ),\n              ],\n            ),\n            ButtonRow(\n              children: [\n                NeuCalculatorButton(\n                  text: '0',\n                  onPressed: () => calculator.setValue(0),\n                  isPill: true,\n                ),\n                NeuCalculatorButton(\n                  text: '.',\n                  onPressed: () {},\n                ),\n                NeuCalculatorButton(\n                  text: '=',\n                  textColor: kOrange,\n                  textSize: 45,\n                  onPressed: calculator.showResult,\n                ),\n              ],\n            ),\n            SizedBox(\n              height: MediaQuery.of(context).padding.bottom,\n            )\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass ButtonRow extends StatelessWidget {\n  const ButtonRow({\n    Key key,\n    @required this.children,\n  }) : super(key: key);\n\n  final List<NeuCalculatorButton> children;\n\n  @override\n  Widget build(BuildContext context) {\n    return Padding(\n      padding: const EdgeInsets.all(8.0),\n      child: Row(\n        mainAxisAlignment: MainAxisAlignment.spaceBetween,\n        children: children,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/calculator/concave_decoration.dart",
    "content": "import 'dart:ui' as ui;\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\n\nclass ConcaveDecoration extends Decoration {\n  final ShapeBorder shape;\n  final double depression;\n  final List<Color> colors;\n\n  ConcaveDecoration({\n    @required this.shape,\n    @required this.depression,\n    this.colors,\n  })  : assert(shape != null),\n        assert(depression >= 0),\n        assert(colors == null || colors.length == 2);\n\n  @override\n  BoxPainter createBoxPainter([onChanged]) =>\n      _ConcaveDecorationPainter(shape, depression, colors);\n\n  @override\n  EdgeInsetsGeometry get padding => shape.dimensions;\n}\n\nclass _ConcaveDecorationPainter extends BoxPainter {\n  ShapeBorder shape;\n  double depression;\n  List<Color> colors;\n\n  _ConcaveDecorationPainter(this.shape, this.depression, this.colors) {\n    colors ??= [Colors.black87, Colors.white];\n  }\n\n  @override\n  void paint(\n      ui.Canvas canvas, ui.Offset offset, ImageConfiguration configuration) {\n    final rect = offset & configuration.size;\n    final shapePath = shape.getOuterPath(rect);\n\n    final delta = 16 / rect.longestSide;\n    final stops = [0.5 - delta, 0.5 + delta];\n\n    final path = Path()\n      ..fillType = PathFillType.evenOdd\n      ..addRect(rect.inflate(depression * 2))\n      ..addPath(shapePath, Offset.zero);\n    canvas.save();\n    canvas.clipPath(shapePath);\n\n    final paint = Paint()\n      ..maskFilter = MaskFilter.blur(BlurStyle.normal, depression);\n    final clipSize = rect.size.aspectRatio > 1\n        ? Size(rect.width, rect.height / 2)\n        : Size(rect.width / 2, rect.height);\n    for (final alignment in [Alignment.topLeft, Alignment.bottomRight]) {\n      final shaderRect =\n          alignment.inscribe(Size.square(rect.longestSide), rect);\n      paint\n        ..shader = ui.Gradient.linear(\n            shaderRect.topLeft, shaderRect.bottomRight, colors, stops);\n\n      canvas.save();\n      canvas.clipRect(alignment.inscribe(clipSize, rect));\n      canvas.drawPath(path, paint);\n      canvas.restore();\n    }\n    canvas.restore();\n  }\n}\n"
  },
  {
    "path": "lib/calculator/neu_calculator_button.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:google_fonts/google_fonts.dart';\nimport 'package:neumorphism_web/calculator/concave_decoration.dart';\nimport 'package:neumorphism_web/calculator/neumorphic_theme.dart';\nimport 'package:provider/provider.dart';\n\nclass NeuCalculatorButton extends StatefulWidget {\n  NeuCalculatorButton({\n    Key key,\n    @required this.text,\n    this.textColor,\n    this.textSize,\n    this.isPill = false,\n    @required this.onPressed,\n    this.isChosen = false,\n  }) : super(key: key);\n\n  final bool isChosen;\n  final bool isPill;\n  final VoidCallback onPressed;\n  final String text;\n  final Color textColor;\n  final double textSize;\n\n  @override\n  _NeuCalculatorButtonState createState() => _NeuCalculatorButtonState();\n}\n\nclass _NeuCalculatorButtonState extends State<NeuCalculatorButton> {\n  bool _isPressed = false;\n\n  @override\n  void didUpdateWidget(NeuCalculatorButton oldWidget) {\n    if (oldWidget.isChosen != widget.isChosen) {\n      setState(() => _isPressed = widget.isChosen);\n    }\n    super.didUpdateWidget(oldWidget);\n  }\n\n  void _onPointerDown(PointerDownEvent event) {\n    setState(() => _isPressed = true);\n    widget.onPressed();\n  }\n\n  void _onPointerUp(PointerUpEvent event) {\n    setState(() => _isPressed = widget.isChosen);\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    final neumorphicTheme = Provider.of<NeumorphicTheme>(context);\n    final width = MediaQuery.of(context).size.width;\n    final squareSideLength = width / 5;\n    final buttonWidth = squareSideLength * (widget.isPill ? 2.2 : 1);\n    final buttonSize = Size(buttonWidth, squareSideLength);\n\n    final innerShadow = ConcaveDecoration(\n      shape: RoundedRectangleBorder(\n        borderRadius: BorderRadius.circular(buttonSize.width),\n      ),\n      colors: neumorphicTheme.innerShadowColors,\n      depression: 10,\n    );\n\n    final outerShadow = BoxDecoration(\n      border: Border.all(color: neumorphicTheme.borderColor),\n      borderRadius: BorderRadius.circular(buttonSize.width),\n      color: neumorphicTheme.buttonColor,\n      boxShadow: neumorphicTheme.outerShadow,\n    );\n\n    return SizedBox(\n      height: buttonSize.height,\n      width: buttonSize.width,\n      child: Listener(\n        onPointerDown: _onPointerDown,\n        onPointerUp: _onPointerUp,\n        child: Stack(\n          children: [\n            AnimatedContainer(\n              duration: const Duration(milliseconds: 50),\n              padding: EdgeInsets.all(width / 12),\n              decoration: _isPressed ? innerShadow : outerShadow,\n            ),\n            Align(\n              alignment: Alignment(widget.isPill ? -0.6 : 0, 0),\n              child: Text(\n                widget.text,\n                style: GoogleFonts.montserrat(\n                  fontSize: widget.textSize ?? 30,\n                  fontWeight: FontWeight.w200,\n                  color: widget.textColor ??\n                      Theme.of(context).textTheme.bodyText1.color,\n                ),\n              ),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/calculator/neumorphic_theme.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass NeumorphicTheme {\n  NeumorphicTheme({\n    this.outerShadow,\n    this.innerShadowColors,\n    this.borderColor,\n    this.buttonColor,\n    this.isDark = false,\n  });\n\n  final List<BoxShadow> outerShadow;\n  final List<Color> innerShadowColors;\n  final Color borderColor;\n  final Color buttonColor;\n  final bool isDark;\n}\n\nfinal darkNeumorphicTheme = NeumorphicTheme(\n  innerShadowColors: [\n    kDarkBackgroundShadowColour,\n    kOutline,\n  ],\n  borderColor: kOutline,\n  buttonColor: kDarkBackgroundColour,\n  outerShadow: kDarkBackgroundShadow,\n  isDark: true,\n);\nfinal lightNeumorphicTheme = NeumorphicTheme(\n  innerShadowColors: [kDarkShadow, Colors.white],\n  borderColor: Colors.transparent,\n  buttonColor: kBackgroundColour,\n  outerShadow: kShadow,\n);\n\nfinal kBackgroundColour = Color.fromRGBO(239, 238, 238, 1);\nfinal kOrange = Color.fromRGBO(238, 134, 48, 1); // rgb(238, 134, 48)\nfinal kDarkShadow = Color.fromRGBO(216, 213, 208, 1); // rgb(216, 213, 208)\nfinal kDarkBackgroundColour = Color.fromRGBO(38, 38, 38, 1); // rgb(38,38,38)\nfinal kDarkBackgroundShadowColour = Color.fromRGBO(\n  30,\n  30,\n  30,\n  1,\n); // rgb(30,30,30)\nfinal kOutline = Color.fromRGBO(46, 46, 46, 1); // rgb(46,46,46)\n\nfinal kShadow = [\n  BoxShadow(\n    blurRadius: 15,\n    offset: -Offset(5, 5),\n    color: Colors.white,\n  ),\n  BoxShadow(\n    blurRadius: 15,\n    offset: Offset(4.5, 4.5),\n    color: kDarkShadow,\n  )\n];\n\nfinal kDarkBackgroundShadow = [\n  BoxShadow(\n    blurRadius: 15,\n    offset: Offset(4.5, 4.5),\n    color: kDarkBackgroundShadowColour,\n  )\n];\n"
  },
  {
    "path": "lib/main.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:google_fonts/google_fonts.dart';\nimport 'package:neumorphism_web/calculator/calculator_logic.dart';\nimport 'package:neumorphism_web/calculator/calculator_view.dart';\nimport 'package:neumorphism_web/calculator/neumorphic_theme.dart';\nimport 'package:neumorphism_web/neumorphic_bar/neumorphic_bar.dart';\nimport 'package:neumorphism_web/neumorphic_pie/neumorphic_pie.dart';\nimport 'package:provider/provider.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      debugShowCheckedModeBanner: false,\n      title: 'Neumorphic Widgets',\n      darkTheme: ThemeData(\n        brightness: Brightness.dark,\n        canvasColor: kDarkBackgroundColour,\n      ),\n      theme: ThemeData(\n        canvasColor: kBackgroundColour,\n        backgroundColor: Color.fromRGBO(231, 240, 247, 1),\n        scaffoldBackgroundColor: Color.fromRGBO(231, 240, 247, 1),\n        textTheme: TextTheme(\n          headline1: GoogleFonts.dmSans(\n            textStyle: TextStyle(\n              fontSize: 43,\n              fontWeight: FontWeight.w900,\n              color: Color.fromRGBO(49, 68, 105, 1),\n            ),\n          ),\n          headline4: GoogleFonts.dmSans(\n            textStyle: TextStyle(\n              fontSize: 28,\n              fontWeight: FontWeight.w800,\n              color: Color.fromRGBO(49, 68, 105, 1),\n            ),\n          ),\n        ),\n      ),\n      home: Builder(\n        builder: (BuildContext context) {\n          final brightnessValue = MediaQuery.of(context).platformBrightness;\n          bool isDark = brightnessValue == Brightness.dark;\n          final theme = isDark ? darkNeumorphicTheme : lightNeumorphicTheme;\n          // Intro, need to show the first use case: 1+1 = 2 (iphone case)\n          // part of -1 Since got 2 providers, use multiprovider\n          return MultiProvider(\n            providers: [\n              ProxyProvider0<NeumorphicTheme>(update: (_, __) => theme),\n              // part of -1. Explain wanted to do on mobx and did not pursue\n              // and how it is not relevant. However, very good async stuff,\n              // to the non-async part. Yeah. So, use what's availabe, which\n              // is change notifier and change notifier provider\n              ChangeNotifierProvider<Calculator>(create: (_) => Calculator())\n            ],\n            child: CalculatorView(),\n          );\n        },\n      ),\n    );\n  }\n}\n\nclass MyHomePage extends StatefulWidget {\n  MyHomePage({Key key}) : super(key: key);\n\n  @override\n  _MyHomePageState createState() => _MyHomePageState();\n}\n\nclass _MyHomePageState extends State<MyHomePage> {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      backgroundColor: backgroundColor,\n      body: Column(\n        mainAxisSize: MainAxisSize.min,\n        children: <Widget>[\n          BarDays(),\n          SizedBox(height: 40),\n          NeumorphicPie(),\n        ],\n      ),\n    );\n  }\n}\n\nclass BarDays extends StatelessWidget {\n  const BarDays({\n    Key key,\n  }) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Row(\n      mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n      children: <Widget>[\n        NeumorphicBar(\n          width: 200,\n          height: 400,\n          value: 0.5,\n          text: 'Mon',\n        ),\n        NeumorphicBar(\n          width: 200,\n          height: 400,\n          value: 0.9,\n          text: 'Tue',\n          color: Color.fromRGBO(0, 200, 156, 1),\n        ),\n        NeumorphicBar(\n          width: 200,\n          height: 400,\n          value: 0.7,\n          text: 'Wed',\n        ),\n        NeumorphicBar(\n          width: 200,\n          height: 400,\n          value: 1,\n          text: 'Thur',\n        ),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "lib/neumorphic_bar/neumorphic_bar.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass NeumorphicBar extends StatelessWidget {\n  const NeumorphicBar({\n    Key key,\n    @required this.width,\n    @required this.height,\n    @required this.value,\n    @required this.text,\n    this.color,\n  }) : super(key: key);\n\n  final num width;\n  final num height;\n\n  /// Value from 1.0 to 0.0\n  final num value;\n\n  final String text;\n  final Color color;\n\n  @override\n  Widget build(BuildContext context) {\n    final innerContainerWidth = width * 0.95;\n    final innerContainerHeight = height * value * 0.96;\n    return Column(\n      mainAxisSize: MainAxisSize.min,\n      children: <Widget>[\n        Container(\n          height: height * 1.01,\n          width: width.toDouble() / 4,\n          child: Stack(\n            children: <Widget>[\n              DugContainer(\n                width: width,\n                height: height,\n              ),\n              InnerContainer(\n                  width: innerContainerWidth,\n                  height: innerContainerHeight,\n                  color: color),\n            ],\n          ),\n        ),\n        SizedBox(height: 10),\n        Text(\n          text,\n          style: TextStyle(\n            color: Colors.blueGrey[300],\n          ),\n        ),\n      ],\n    );\n  }\n}\n\nclass InnerContainer extends StatelessWidget {\n  const InnerContainer({\n    Key key,\n    @required this.height,\n    @required this.width,\n    this.color,\n  }) : super(key: key);\n\n  final num height;\n  final num width;\n  final Color color;\n\n  @override\n  Widget build(BuildContext context) {\n    return Align(\n      alignment: Alignment.bottomCenter,\n      child: Padding(\n        padding: const EdgeInsets.only(bottom: 5.0),\n        child: Container(\n          height: height * 600 / 896,\n          width: width * 85 / 414,\n          decoration: BoxDecoration(\n            borderRadius: BorderRadius.circular(95.0),\n            color: color ?? Color.fromRGBO(235, 233, 232, 1),\n            boxShadow: [\n              BoxShadow(\n                offset: Offset(1.5, 1.5),\n                color: Colors.black38,\n                blurRadius: 2,\n              ),\n              BoxShadow(\n                offset: Offset(-1.5, -1.5),\n                color:\n                    color?.withOpacity(0.95) ?? Colors.white.withOpacity(0.85),\n                blurRadius: 2,\n              )\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass DugContainer extends StatelessWidget {\n  const DugContainer({\n    Key key,\n    @required this.height,\n    @required this.width,\n  }) : super(key: key);\n  final num height;\n  final num width;\n  @override\n  Widget build(BuildContext context) {\n    return Align(\n      alignment: Alignment.bottomCenter,\n      child: Container(\n        height: height * 600 / 896,\n        width: width * 100 / 414,\n        decoration: BoxDecoration(\n          boxShadow: [\n            BoxShadow(\n              color: exteriorShadow,\n              offset: Offset(0.0, 0.0),\n            ),\n            BoxShadow(\n              color: interiorShadow,\n              offset: Offset(0.0, 0.0),\n              spreadRadius: -1.0,\n              blurRadius: 11.0,\n            ),\n          ],\n          borderRadius: BorderRadius.circular(100.0),\n        ),\n      ),\n    );\n  }\n}\n\nconst exteriorShadow = Color.fromRGBO(209, 207, 205, 1);\nconst interiorShadow = Color.fromRGBO(224, 221, 217, 1);\nconst backgroundColor = Color.fromRGBO(235, 235, 234, 1);\n"
  },
  {
    "path": "lib/neumorphic_expenses/categories_row.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:neumorphism_web/neumorphic_expenses/pie_chart.dart';\n\nclass CategoriesRow extends StatelessWidget {\n  const CategoriesRow({\n    Key key,\n  }) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Expanded(\n      flex: 3,\n      child: Column(\n        mainAxisAlignment: MainAxisAlignment.center,\n        children: <Widget>[\n          for (var category in kCategories)\n            ExpenseCategory(\n                text: category.name, index: kCategories.indexOf(category))\n        ],\n      ),\n    );\n  }\n}\n\nclass ExpenseCategory extends StatelessWidget {\n  const ExpenseCategory({\n    Key key,\n    @required this.index,\n    @required this.text,\n  }) : super(key: key);\n\n  final int index;\n  final String text;\n  @override\n  Widget build(BuildContext context) {\n    return Padding(\n      padding: EdgeInsets.only(bottom: 10),\n      child: Row(\n        children: <Widget>[\n          Container(\n            width: 7,\n            height: 7,\n            decoration: BoxDecoration(\n              shape: BoxShape.circle,\n              color:\n                  kNeumorphicColors.elementAt(index % kNeumorphicColors.length),\n            ),\n          ),\n          SizedBox(width: 20),\n          Text(text.capitalize()),\n        ],\n      ),\n    );\n  }\n}\n\nextension StringExtension on String {\n  String capitalize() {\n    return \"${this[0].toUpperCase()}${this.substring(1)}\";\n  }\n}\n"
  },
  {
    "path": "lib/neumorphic_expenses/monthly_expenses_view.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:google_fonts/google_fonts.dart';\nimport 'package:neumorphism_web/neumorphic_expenses/categories_row.dart';\nimport 'package:neumorphism_web/neumorphic_expenses/pie_chart_view.dart';\n\nclass MontlyExpensesView extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final height = MediaQuery.of(context).size.height;\n    return Scaffold(\n      backgroundColor: Color.fromRGBO(193, 214, 233, 1),\n      body: SafeArea(\n        child: Column(\n          children: <Widget>[\n            Spacer(),\n            SizedBox(\n              height: height * 0.43,\n              child: Padding(\n                padding: const EdgeInsets.symmetric(horizontal: 25.0),\n                child: Column(\n                  crossAxisAlignment: CrossAxisAlignment.start,\n                  children: <Widget>[\n                    SizedBox(height: height * 0.065),\n                    Text(\n                      'Monthly Expenses',\n                      style: GoogleFonts.rubik(\n                          fontWeight: FontWeight.w400, fontSize: 18),\n                    ),\n                    Expanded(\n                      child: Row(\n                        children: <Widget>[\n                          CategoriesRow(),\n                          PieChartView(),\n                        ],\n                      ),\n                    ),\n                  ],\n                ),\n              ),\n            )\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/neumorphic_expenses/pie_chart.dart",
    "content": "import 'dart:math';\n\nimport 'package:flutter/material.dart';\n\nclass PieChart extends CustomPainter {\n  PieChart({@required this.categories, @required this.width});\n\n  final List<Category> categories;\n  final double width;\n\n  @override\n  void paint(Canvas canvas, Size size) {\n    Offset center = Offset(size.width / 2, size.height / 2);\n    double radius = min(size.width / 2, size.height / 2);\n\n    var paint = Paint()\n      ..style = PaintingStyle.stroke\n      ..strokeWidth = width / 2;\n\n    double total = 0;\n    // Calculate total amount from each category\n    categories.forEach((expense) => total += expense.amount);\n\n    // The angle/radian at 12 o'clcok\n    double startRadian = -pi / 2;\n\n    for (var index = 0; index < categories.length; index++) {\n      final currentCategory = categories.elementAt(index);\n      // Amount of length to paint is a percentage of the perimeter of a circle (2 x pi)\n      final sweepRadian = currentCategory.amount / total * 2 * pi;\n      // Used modulo/remainder to catch use case if there is more than 6 colours\n      paint.color = kNeumorphicColors.elementAt(index % categories.length);\n      canvas.drawArc(\n        Rect.fromCircle(center: center, radius: radius),\n        startRadian,\n        sweepRadian,\n        false,\n        paint,\n      );\n      // The new startRadian starts from where the previous sweepRadian.\n      // Example, a circle perimeter is 10.\n      // Category A takes a startRadian 0 and ends at sweepRadian 5.\n      // Category B takes the startRadian where Category A left off, which is 5\n      // and ends at sweepRadian 7.\n      // Category C takes the startRadian where Category B left off, which is 7\n      // and so on.\n      startRadian += sweepRadian;\n    }\n  }\n\n  @override\n  bool shouldRepaint(CustomPainter oldDelegate) => true;\n}\n\nclass Category {\n  Category(this.name, {@required this.amount});\n\n  final String name;\n  final double amount;\n}\n\nfinal kCategories = [\n  Category('groceries', amount: 500.00),\n  Category('online Shopping', amount: 150.00),\n  Category('eating', amount: 90.00),\n  Category('bills', amount: 90.00),\n  Category('subscriptions', amount: 40.00),\n  Category('fees', amount: 20.00),\n];\n\nfinal kNeumorphicColors = [\n  Color.fromRGBO(82, 98, 255, 1), //  rgb(82, 98, 255)\n  Color.fromRGBO(46, 198, 255, 1), // rgb(46, 198, 255)\n  Color.fromRGBO(123, 201, 82, 1), // rgb(123, 201, 82)\n  Color.fromRGBO(255, 171, 67, 1), // rgb(255, 171, 67)\n  Color.fromRGBO(252, 91, 57, 1), //  rgb(252, 91, 57)\n  Color.fromRGBO(139, 135, 130, 1), //rgb(139, 135, 130)\n];\n"
  },
  {
    "path": "lib/neumorphic_expenses/pie_chart_view.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:neumorphism_web/neumorphic_expenses/pie_chart.dart';\n\nclass PieChartView extends StatelessWidget {\n  const PieChartView({\n    Key key,\n  }) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Expanded(\n      flex: 4,\n      child: LayoutBuilder(\n        builder: (context, constraint) => Container(\n          decoration: BoxDecoration(\n            color: Color.fromRGBO(193, 214, 233, 1),\n            shape: BoxShape.circle,\n            boxShadow: [\n              BoxShadow(\n                spreadRadius: -10,\n                blurRadius: 17,\n                offset: Offset(-5, -5),\n                color: Colors.white,\n              ),\n              BoxShadow(\n                spreadRadius: -2,\n                blurRadius: 10,\n                offset: Offset(7, 7),\n                color: Color.fromRGBO(146, 182, 216, 1),\n              )\n            ],\n          ),\n          child: Stack(\n            children: [\n              Center(\n                child: SizedBox(\n                  width: constraint.maxWidth * 0.6,\n                  child: CustomPaint(\n                    child: Center(),\n                    foregroundPainter: PieChart(\n                      width: constraint.maxWidth * 0.5,\n                      categories: kCategories,\n                    ),\n                  ),\n                ),\n              ),\n              Center(\n                child: Container(\n                  height: constraint.maxWidth * 0.4,\n                  decoration: BoxDecoration(\n                    color: Color.fromRGBO(193, 214, 233, 1),\n                    shape: BoxShape.circle,\n                    boxShadow: [\n                      BoxShadow(\n                        blurRadius: 1,\n                        offset: Offset(-1, -1),\n                        color: Colors.white,\n                      ),\n                      BoxShadow(\n                        spreadRadius: -2,\n                        blurRadius: 10,\n                        offset: Offset(5, 5),\n                        color: Colors.black.withOpacity(0.5),\n                      )\n                    ],\n                  ),\n                  child: Center(\n                    child: Text('\\$1280.20'),\n                  ),\n                ),\n              ),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/neumorphic_pie/middle_ring.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:neumorphism_web/neumorphic_pie/neumorphic_pie.dart';\n\nclass MiddleRing extends StatelessWidget {\n  final num width;\n\n  const MiddleRing({Key key, @required this.width}) : super(key: key);\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      height: width,\n      width: width,\n      decoration: BoxDecoration(\n        color: Colors.white,\n        shape: BoxShape.circle,\n      ),\n      child: Center(\n        child: Container(\n          height: width * 0.3,\n          width: width * 0.3,\n          decoration: BoxDecoration(\n            shape: BoxShape.circle,\n            boxShadow: [\n              // Edge shadow\n              BoxShadow(\n                offset: Offset(-1.5, -1.5),\n                color: shadowColor,\n                spreadRadius: 2.0,\n                // blurRadius: 0,\n              ),\n\n              // Circular shadow\n              BoxShadow(\n                offset: Offset(1.5, 1.5),\n                color: Colors.white,\n                spreadRadius: 2.0,\n                blurRadius: 4,\n              )\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/neumorphic_pie/neumorphic_pie.dart",
    "content": "import 'dart:math';\nimport 'dart:ui';\n\nimport 'package:flutter/material.dart';\nimport 'package:neumorphism_web/neumorphic_pie/middle_ring.dart';\nimport 'package:neumorphism_web/neumorphic_pie/progress_rings.dart';\n\nclass NeumorphicPie extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    // Outer white circle\n    return Container(\n      height: 290.0,\n      width: 290.0,\n      decoration: BoxDecoration(\n        shape: BoxShape.circle,\n        color: Colors.white24,\n      ),\n      child: Center(\n        // Container of the pie chart\n        child: Container(\n          height: 200.0,\n          width: 200.0,\n          decoration: BoxDecoration(\n            shape: BoxShape.circle,\n            boxShadow: [\n              BoxShadow(\n                color: Colors.grey.withOpacity(0.8),\n                spreadRadius: 20,\n                blurRadius: 45,\n                offset: Offset(0, 7), // changes position of shadow\n              ),\n            ],\n          ),\n          child: Stack(\n            children: <Widget>[\n              Center(child: MiddleRing(width: 300.0)),\n              Transform.rotate(\n                angle: pi * 1.6,\n                child: CustomPaint(\n                  child: Center(),\n                  painter: ProgressRings(\n                    completedPercentage: 0.65,\n                    circleWidth: 50.0,\n                    gradient: greenGradient,\n                    gradientStartAngle: 0.0,\n                    gradientEndAngle: pi / 3,\n                    progressStartAngle: 1.85,\n                    lengthToRemove: 3,\n                  ),\n                ),\n              ),\n              Transform.rotate(\n                angle: pi / 1.8,\n                child: CustomPaint(\n                  child: Center(),\n                  painter: ProgressRings(\n                    completedPercentage: 0.20,\n                    circleWidth: 50.0,\n                    gradient: turqoiseGradient,\n                  ),\n                ),\n              ),\n              Transform.rotate(\n                angle: pi / 2.6,\n                child: CustomPaint(\n                  child: Center(),\n                  painter: ProgressRings(\n                    completedPercentage: 0.35,\n                    circleWidth: 50.0,\n                    gradient: redGradient,\n                    gradientStartAngle: 0.0,\n                    gradientEndAngle: pi / 2,\n                    progressStartAngle: 1.85,\n                  ),\n                ),\n              ),\n              Transform.rotate(\n                angle: pi * 1.1,\n                child: CustomPaint(\n                  child: Center(),\n                  painter: ProgressRings(\n                    completedPercentage: 0.24,\n                    circleWidth: 50.0,\n                    gradient: orangeGradient,\n                    gradientStartAngle: 0.0,\n                    gradientEndAngle: pi / 2,\n                    progressStartAngle: 1.85,\n                  ),\n                ),\n              ),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nfinal innerColor = Color.fromRGBO(233, 242, 249, 1);\nfinal shadowColor = Color.fromRGBO(220, 227, 234, 1);\n\nconst greenGradient = [\n  Color.fromRGBO(223, 250, 92, 1),\n  Color.fromRGBO(129, 250, 112, 1)\n];\nconst turqoiseGradient = [\n  Color.fromRGBO(91, 253, 199, 1),\n  Color.fromRGBO(129, 182, 205, 1)\n];\n\nconst redGradient = [\n  Color.fromRGBO(255, 93, 91, 1),\n  Color.fromRGBO(254, 154, 92, 1),\n];\nconst orangeGradient = [\n  Color.fromRGBO(251, 173, 86, 1),\n  Color.fromRGBO(253, 255, 93, 1),\n];\n"
  },
  {
    "path": "lib/neumorphic_pie/progress_rings.dart",
    "content": "import 'dart:math';\n\nimport 'package:flutter/material.dart';\n\nclass ProgressRings extends CustomPainter {\n  /// From 0.0 to 1.0\n  final double completedPercentage;\n  final double circleWidth;\n  final List<Color> gradient;\n  final num gradientStartAngle;\n  final num gradientEndAngle;\n  final double progressStartAngle;\n  final double lengthToRemove;\n\n  ProgressRings({\n    this.completedPercentage,\n    this.circleWidth,\n    this.gradient,\n    this.gradientStartAngle = 3 * pi / 2,\n    this.gradientEndAngle = 4 * pi / 2,\n    this.progressStartAngle = 0,\n    this.lengthToRemove = 0,\n  });\n\n  @override\n  void paint(Canvas canvas, Size size) {\n    Offset center = Offset(size.width / 2, size.height / 2);\n    double radius = min(size.width / 2, size.height / 2);\n\n    double arcAngle = 2 * pi * (completedPercentage);\n\n    Rect boundingSquare = Rect.fromCircle(center: center, radius: radius);\n\n    paint(List<Color> colors,\n        {double startAngle = 0.0, double endAngle = pi * 2}) {\n      final Gradient gradient = SweepGradient(\n        startAngle: startAngle,\n        endAngle: endAngle,\n        colors: colors,\n      );\n\n      return Paint()\n        ..strokeCap = StrokeCap.round\n        ..style = PaintingStyle.stroke\n        ..strokeWidth = circleWidth\n        ..shader = gradient.createShader(boundingSquare);\n    }\n\n    canvas.drawArc(\n      boundingSquare,\n      -pi / 2 + progressStartAngle,\n      arcAngle - lengthToRemove,\n      false,\n      paint(\n        gradient,\n        startAngle: gradientStartAngle,\n        endAngle: gradientEndAngle,\n      ),\n    );\n  }\n\n  @override\n  bool shouldRepaint(CustomPainter painter) => true;\n}\n"
  },
  {
    "path": "lib/neumorphic_start_page/bottom_left_clipper.dart",
    "content": "import 'package:flutter/material.dart';\n\n/// Neumorphic clipper that is placed the top most on the bottom left\nclass BottomLeftNeuClipper extends CustomClipper<Path> {\n  @override\n  Path getClip(Size size) {\n    Path path = Path();\n    final double _xScaling = size.width / 375;\n    final double _yScaling = size.height / 812;\n    path.lineTo(15.8844 * _xScaling, 194.032 * _yScaling);\n    path.cubicTo(\n      41.7322 * _xScaling,\n      187.818 * _yScaling,\n      64.4102 * _xScaling,\n      168.631 * _yScaling,\n      91.895 * _xScaling,\n      173.507 * _yScaling,\n    );\n    path.cubicTo(\n      119.396 * _xScaling,\n      178.385 * _yScaling,\n      142.116 * _xScaling,\n      203.325 * _yScaling,\n      166.569 * _xScaling,\n      220.764 * _yScaling,\n    );\n    path.cubicTo(\n      190.591 * _xScaling,\n      237.895 * _yScaling,\n      218.969 * _xScaling,\n      250.109 * _yScaling,\n      235.467 * _xScaling,\n      275.895 * _yScaling,\n    );\n    path.cubicTo(\n      251.907 * _xScaling,\n      301.59 * _yScaling,\n      251.874 * _xScaling,\n      333.261 * _yScaling,\n      257.411 * _xScaling,\n      362.746 * _yScaling,\n    );\n    path.cubicTo(\n      262.655 * _xScaling,\n      390.668 * _yScaling,\n      268.591 * _xScaling,\n      418.289 * _yScaling,\n      267.371 * _xScaling,\n      445.781 * _yScaling,\n    );\n    path.cubicTo(\n      266.093 * _xScaling,\n      474.598 * _yScaling,\n      264.341 * _xScaling,\n      504.85 * _yScaling,\n      250.113 * _xScaling,\n      527.259 * _yScaling,\n    );\n    path.cubicTo(\n      235.895 * _xScaling,\n      549.652 * _yScaling,\n      208.962 * _xScaling,\n      556.46 * _yScaling,\n      187.856 * _xScaling,\n      571.016 * _yScaling,\n    );\n    path.cubicTo(\n      165.513 * _xScaling,\n      586.425 * _yScaling,\n      149.084 * _xScaling,\n      615.374 * _yScaling,\n      121.194 * _xScaling,\n      616.171 * _yScaling,\n    );\n    path.cubicTo(\n      93.2682 * _xScaling,\n      616.968 * _yScaling,\n      68.0885 * _xScaling,\n      589.718 * _yScaling,\n      41.4531 * _xScaling,\n      575.197 * _yScaling,\n    );\n    path.cubicTo(\n      17.0259 * _xScaling,\n      561.879 * _yScaling,\n      -7.81309 * _xScaling,\n      551.216 * _yScaling,\n      -30.2651 * _xScaling,\n      533.596 * _yScaling,\n    );\n    path.cubicTo(\n      -54.5775 * _xScaling,\n      514.517 * _yScaling,\n      -82.7712 * _xScaling,\n      496.531 * _yScaling,\n      -95.8271 * _xScaling,\n      467.465 * _yScaling,\n    );\n    path.cubicTo(\n      -108.883 * _xScaling,\n      438.398 * _yScaling,\n      -100.086 * _xScaling,\n      406.852 * _yScaling,\n      -100.977 * _xScaling,\n      376.171 * _yScaling,\n    );\n    path.cubicTo(\n      -101.84 * _xScaling,\n      346.477 * _yScaling,\n      -107.228 * _xScaling,\n      316.252 * _yScaling,\n      -101.029 * _xScaling,\n      288.404 * _yScaling,\n    );\n    path.cubicTo(\n      -94.5197 * _xScaling,\n      259.162 * _yScaling,\n      -85.6289 * _xScaling,\n      228.319 * _yScaling,\n      -64.217 * _xScaling,\n      211.036 * _yScaling,\n    );\n    path.cubicTo(\n      -42.8756 * _xScaling,\n      193.809 * _yScaling,\n      -10.8945 * _xScaling,\n      200.469 * _yScaling,\n      15.8844 * _xScaling,\n      194.032 * _yScaling,\n    );\n    path.cubicTo(\n      15.8844 * _xScaling,\n      194.032 * _yScaling,\n      15.8844 * _xScaling,\n      194.032 * _yScaling,\n      15.8844 * _xScaling,\n      194.032 * _yScaling,\n    );\n    return path;\n  }\n\n  @override\n  bool shouldReclip(CustomClipper<Path> oldClipper) => true;\n}\n"
  },
  {
    "path": "lib/neumorphic_start_page/bottom_left_clipper_bottom.dart",
    "content": "import 'package:flutter/material.dart';\n\n/// Neumorphic clipper that is placed the bottom most on the bottom left\n/// Btm just stands for the bottom most\nclass BottomLeftNeuClipperBtm extends CustomClipper<Path> {\n  @override\n  Path getClip(Size size) {\n    Path path = Path();\n    final double _xScaling = size.width / 375;\n    final double _yScaling = size.height / 812;\n    path.lineTo(-85.8912 * _xScaling, 289.388 * _yScaling);\n    path.cubicTo(\n      -34.0201 * _xScaling,\n      277.413 * _yScaling,\n      11.0669 * _xScaling,\n      238.676 * _yScaling,\n      66.5766 * _xScaling,\n      249.544 * _yScaling,\n    );\n    path.cubicTo(\n      122.119 * _xScaling,\n      260.418 * _yScaling,\n      168.648 * _xScaling,\n      312.375 * _yScaling,\n      218.439 * _xScaling,\n      348.97 * _yScaling,\n    );\n    path.cubicTo(\n      267.351 * _xScaling,\n      384.919 * _yScaling,\n      324.885 * _xScaling,\n      410.894 * _yScaling,\n      358.91 * _xScaling,\n      464.401 * _yScaling,\n    );\n    path.cubicTo(\n      392.814 * _xScaling,\n      517.716 * _yScaling,\n      393.723 * _xScaling,\n      582.808 * _yScaling,\n      405.784 * _xScaling,\n      643.579 * _yScaling,\n    );\n    path.cubicTo(\n      417.205 * _xScaling,\n      701.128 * _yScaling,\n      430.011 * _xScaling,\n      758.078 * _yScaling,\n      428.401 * _xScaling,\n      814.544 * _yScaling,\n    );\n    path.cubicTo(\n      426.713 * _xScaling,\n      873.733 * _yScaling,\n      424.117 * _xScaling,\n      935.854 * _yScaling,\n      396.149 * _xScaling,\n      981.472 * _yScaling,\n    );\n    path.cubicTo(\n      368.2 * _xScaling,\n      1027.06 * _yScaling,\n      314.161 * _xScaling,\n      1040.22 * _yScaling,\n      272.099 * _xScaling,\n      1069.49 * _yScaling,\n    );\n    path.cubicTo(\n      227.569 * _xScaling,\n      1100.47 * _yScaling,\n      195.369 * _xScaling,\n      1159.46 * _yScaling,\n      139.219 * _xScaling,\n      1160.24 * _yScaling,\n    );\n    path.cubicTo(\n      82.9956 * _xScaling,\n      1161.02 * _yScaling,\n      31.44 * _xScaling,\n      1104.24 * _yScaling,\n      -22.6558 * _xScaling,\n      1073.57 * _yScaling,\n    );\n    path.cubicTo(\n      -72.2668 * _xScaling,\n      1045.45 * _yScaling,\n      -122.625 * _xScaling,\n      1022.77 * _yScaling,\n      -168.39 * _xScaling,\n      985.865 * _yScaling,\n    );\n    path.cubicTo(\n      -217.948 * _xScaling,\n      945.903 * _yScaling,\n      -275.289 * _xScaling,\n      908.069 * _yScaling,\n      -302.481 * _xScaling,\n      847.928 * _yScaling,\n    );\n    path.cubicTo(\n      -329.673 * _xScaling,\n      787.785 * _yScaling,\n      -312.924 * _xScaling,\n      723.222 * _yScaling,\n      -315.664 * _xScaling,\n      660.137 * _yScaling,\n    );\n    path.cubicTo(\n      -318.316 * _xScaling,\n      599.081 * _yScaling,\n      -330.1 * _xScaling,\n      536.794 * _yScaling,\n      -318.471 * _xScaling,\n      479.749 * _yScaling,\n    );\n    path.cubicTo(\n      -306.26 * _xScaling,\n      419.851 * _yScaling,\n      -289.302 * _xScaling,\n      356.733 * _yScaling,\n      -246.707 * _xScaling,\n      321.87 * _yScaling,\n    );\n    path.cubicTo(\n      -204.252 * _xScaling,\n      287.122 * _yScaling,\n      -139.631 * _xScaling,\n      301.795 * _yScaling,\n      -85.8912 * _xScaling,\n      289.388 * _yScaling,\n    );\n    path.cubicTo(\n      -85.8912 * _xScaling,\n      289.388 * _yScaling,\n      -85.8912 * _xScaling,\n      289.388 * _yScaling,\n      -85.8912 * _xScaling,\n      289.388 * _yScaling,\n    );\n    return path;\n  }\n\n  @override\n  bool shouldReclip(CustomClipper<Path> oldClipper) => true;\n}\n"
  },
  {
    "path": "lib/neumorphic_start_page/clip_shadow_path.dart",
    "content": "import 'package:flutter/material.dart';\n\n@immutable\nclass ClipShadowPath extends StatelessWidget {\n  final BoxShadow shadow;\n  final CustomClipper<Path> clipper;\n  final Widget child;\n\n  ClipShadowPath({\n    @required this.shadow,\n    @required this.clipper,\n    @required this.child,\n  });\n\n  @override\n  Widget build(BuildContext context) {\n    return CustomPaint(\n      painter: _ClipShadowShadowPainter(\n        clipper: this.clipper,\n        shadow: this.shadow,\n      ),\n      child: ClipPath(child: child, clipper: this.clipper),\n    );\n  }\n}\n\nclass _ClipShadowShadowPainter extends CustomPainter {\n  final BoxShadow shadow;\n  final CustomClipper<Path> clipper;\n\n  _ClipShadowShadowPainter({@required this.shadow, @required this.clipper});\n\n  @override\n  void paint(Canvas canvas, Size size) {\n    var paint = shadow.toPaint()\n      ..maskFilter = MaskFilter.blur(\n        BlurStyle.normal,\n        shadow.spreadRadius,\n      );\n    var clipPath = clipper.getClip(size).shift(shadow.offset);\n    canvas.drawPath(clipPath, paint);\n  }\n\n  @override\n  bool shouldRepaint(CustomPainter oldDelegate) {\n    return true;\n  }\n}\n"
  },
  {
    "path": "lib/neumorphic_start_page/neumophic_start_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:neumorphism_web/neumorphic_start_page/bottom_left_clipper.dart';\nimport 'package:neumorphism_web/neumorphic_start_page/bottom_left_clipper_bottom.dart';\nimport 'package:neumorphism_web/neumorphic_start_page/clip_shadow_path.dart';\nimport 'package:neumorphism_web/neumorphic_start_page/top_right_cipper_bottom.dart';\nimport 'package:neumorphism_web/neumorphic_start_page/top_right_clipper.dart';\nimport 'package:transparent_image/transparent_image.dart';\n\nclass NeumorphicStartPage extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final width = MediaQuery.of(context).size.width;\n    final height = MediaQuery.of(context).size.height;\n\n    final boxShadow = BoxShadow(\n      color: Colors.grey,\n      offset: Offset(-5, 3),\n      blurRadius: 5,\n      spreadRadius: 10,\n    );\n\n    // Neumorphic colored container with 99% app width\n    final widthNeuContainer = Container(\n      width: width * 0.99,\n      color: kNeumorphicColor,\n    );\n\n    // Neumorphic colored container with 99% app height\n    final heightNeuContainer = Container(\n      height: height * 0.99,\n      color: kNeumorphicColor,\n    );\n\n    return Material(\n      child: Stack(\n        children: <Widget>[\n          Align(\n            child: ClipShadowPath(\n              shadow: boxShadow,\n              clipper: TopRightNeuClipperBtm(),\n              child: widthNeuContainer,\n            ),\n          ),\n          Align(\n            alignment: Alignment(30, -1),\n            child: ClipShadowPath(\n              shadow: boxShadow,\n              clipper: TopRightNeuClipper(),\n              child: widthNeuContainer,\n            ),\n          ),\n          Align(\n            alignment: Alignment(0, 30.5),\n            child: ClipShadowPath(\n              shadow: boxShadow,\n              clipper: BottomLeftNeuClipperBtm(),\n              child: heightNeuContainer,\n            ),\n          ),\n          Align(\n            alignment: Alignment(0, 9),\n            child: SizedBox(\n              width: width,\n              height: height * 0.99,\n              child: FadeInImage.memoryNetwork(\n                placeholder: kTransparentImage,\n                image: kHomeImage,\n                fit: BoxFit.fitWidth,\n              ),\n            ),\n          ),\n          Align(\n            alignment: Alignment(0, 80.5),\n            child: ClipShadowPath(\n              shadow: boxShadow,\n              clipper: BottomLeftNeuClipper(),\n              child: heightNeuContainer,\n            ),\n          ),\n          Align(\n            alignment: Alignment.topCenter,\n            child: Padding(\n              padding: const EdgeInsets.only(top: 100),\n              child: Text(\n                'Neumorphic',\n                style: Theme.of(context).textTheme.headline1,\n              ),\n            ),\n          ),\n          Align(\n            alignment: Alignment.bottomCenter,\n            child: Padding(\n              padding: const EdgeInsets.only(bottom: 58.0),\n              child: SizedBox(\n                width: width * 0.8,\n                child: MaterialButton(\n                  onPressed: () {},\n                  padding: const EdgeInsets.symmetric(vertical: 10),\n                  color: Theme.of(context).textTheme.headline1.color,\n                  child: Text(\n                    'Let\\'s Get Started',\n                    style: TextStyle(fontSize: 24, color: Colors.white),\n                  ),\n                ),\n              ),\n            ),\n          )\n        ],\n      ),\n    );\n  }\n}\n\nfinal kNeumorphicColor = Color.fromRGBO(235, 228, 229, 1); // rgb(235, 228, 229)\nfinal kHomeImage =\n    'https://user-images.githubusercontent.com/31005114/78748465-b5327d00-799e-11ea-9f40-38d322a9531a.png';\n"
  },
  {
    "path": "lib/neumorphic_start_page/top_right_cipper_bottom.dart",
    "content": "import 'package:flutter/material.dart';\n\n/// Neumorphic clipper that is placed the bottom most on the top right\n/// Btm just stands for the bottom most\nclass TopRightNeuClipperBtm extends CustomClipper<Path> {\n  @override\n  Path getClip(Size size) {\n    Path path = Path();\n    final double _xScaling = size.width / 375;\n    final double _yScaling = size.height / 812;\n    path.lineTo(272.31 * _xScaling, -94.0542 * _yScaling);\n    path.cubicTo(\n      293.384 * _xScaling,\n      -98.9195 * _yScaling,\n      311.702 * _xScaling,\n      -114.658 * _yScaling,\n      334.255 * _xScaling,\n      -110.242 * _yScaling,\n    );\n    path.cubicTo(\n      356.821 * _xScaling,\n      -105.825 * _yScaling,\n      375.725 * _xScaling,\n      -84.715 * _yScaling,\n      395.955 * _xScaling,\n      -69.847 * _yScaling,\n    );\n    path.cubicTo(\n      415.827 * _xScaling,\n      -55.2416 * _yScaling,\n      439.202 * _xScaling,\n      -44.688 * _yScaling,\n      453.026 * _xScaling,\n      -22.9491 * _yScaling,\n    );\n    path.cubicTo(\n      466.801 * _xScaling,\n      -1.28773 * _yScaling,\n      467.17 * _xScaling,\n      25.1582 * _yScaling,\n      472.07 * _xScaling,\n      49.8486 * _yScaling,\n    );\n    path.cubicTo(\n      476.71 * _xScaling,\n      73.2298 * _yScaling,\n      481.913 * _xScaling,\n      96.368 * _yScaling,\n      481.259 * _xScaling,\n      119.309 * _yScaling,\n    );\n    path.cubicTo(\n      480.574 * _xScaling,\n      143.357 * _yScaling,\n      479.519 * _xScaling,\n      168.596 * _yScaling,\n      468.156 * _xScaling,\n      187.13 * _yScaling,\n    );\n    path.cubicTo(\n      456.801 * _xScaling,\n      205.651 * _yScaling,\n      434.845 * _xScaling,\n      210.999 * _yScaling,\n      417.756 * _xScaling,\n      222.889 * _yScaling,\n    );\n    path.cubicTo(\n      399.664 * _xScaling,\n      235.477 * _yScaling,\n      386.582 * _xScaling,\n      259.445 * _yScaling,\n      363.769 * _xScaling,\n      259.761 * _yScaling,\n    );\n    path.cubicTo(\n      340.926 * _xScaling,\n      260.078 * _yScaling,\n      319.98 * _xScaling,\n      237.008 * _yScaling,\n      298.001 * _xScaling,\n      224.549 * _yScaling,\n    );\n    path.cubicTo(\n      277.845 * _xScaling,\n      213.123 * _yScaling,\n      257.385 * _xScaling,\n      203.908 * _yScaling,\n      238.791 * _xScaling,\n      188.915 * _yScaling,\n    );\n    path.cubicTo(\n      218.657 * _xScaling,\n      172.679 * _yScaling,\n      195.36 * _xScaling,\n      157.307 * _yScaling,\n      184.312 * _xScaling,\n      132.873 * _yScaling,\n    );\n    path.cubicTo(\n      173.264 * _xScaling,\n      108.438 * _yScaling,\n      180.069 * _xScaling,\n      82.2063 * _yScaling,\n      178.956 * _xScaling,\n      56.5758 * _yScaling,\n    );\n    path.cubicTo(\n      177.879 * _xScaling,\n      31.7698 * _yScaling,\n      173.091 * _xScaling,\n      6.46339 * _yScaling,\n      177.816 * _xScaling,\n      -16.7134 * _yScaling,\n    );\n    path.cubicTo(\n      182.777 * _xScaling,\n      -41.0492 * _yScaling,\n      189.666 * _xScaling,\n      -66.6928 * _yScaling,\n      206.972 * _xScaling,\n      -80.8573 * _yScaling,\n    );\n    path.cubicTo(\n      224.221 * _xScaling,\n      -94.9751 * _yScaling,\n      250.476 * _xScaling,\n      -89.0135 * _yScaling,\n      272.31 * _xScaling,\n      -94.0542 * _yScaling,\n    );\n    path.cubicTo(\n      272.31 * _xScaling,\n      -94.0542 * _yScaling,\n      272.31 * _xScaling,\n      -94.0542 * _yScaling,\n      272.31 * _xScaling,\n      -94.0542 * _yScaling,\n    );\n    return path;\n  }\n\n  @override\n  bool shouldReclip(CustomClipper<Path> oldClipper) => true;\n}\n"
  },
  {
    "path": "lib/neumorphic_start_page/top_right_clipper.dart",
    "content": "import 'package:flutter/material.dart';\n\n/// Neumorphic clipper that is placed the top most on the top right\nclass TopRightNeuClipper extends CustomClipper<Path> {\n  @override\n  Path getClip(Size size) {\n    Path path = Path();\n    final double _xScaling = size.width / 375;\n    final double _yScaling = size.height / 812;\n    path.lineTo(304.51 * _xScaling, -174.308 * _yScaling);\n    path.cubicTo(\n      329.223 * _xScaling,\n      -181.119 * _yScaling,\n      351.649 * _xScaling,\n      -199.055 * _yScaling,\n      377.304 * _xScaling,\n      -196.299 * _yScaling,\n    );\n    path.cubicTo(\n      402.975 * _xScaling,\n      -193.542 * _yScaling,\n      423.049 * _xScaling,\n      -173.058 * _yScaling,\n      445.164 * _xScaling,\n      -159.199 * _yScaling,\n    );\n    path.cubicTo(\n      466.889 * _xScaling,\n      -145.585 * _yScaling,\n      492.989 * _xScaling,\n      -136.488 * _yScaling,\n      507.15 * _xScaling,\n      -114.93 * _yScaling,\n    );\n    path.cubicTo(\n      521.261 * _xScaling,\n      -93.4484 * _yScaling,\n      519.513 * _xScaling,\n      -65.87 * _yScaling,\n      523.137 * _xScaling,\n      -40.4969 * _yScaling,\n    );\n    path.cubicTo(\n      526.568 * _xScaling,\n      -16.469 * _yScaling,\n      530.669 * _xScaling,\n      7.25881 * _yScaling,\n      528.028 * _xScaling,\n      31.2624 * _yScaling,\n    );\n    path.cubicTo(\n      525.261 * _xScaling,\n      56.4238 * _yScaling,\n      521.969 * _xScaling,\n      82.8593 * _yScaling,\n      507.337 * _xScaling,\n      103.142 * _yScaling,\n    );\n    path.cubicTo(\n      492.715 * _xScaling,\n      123.411 * _yScaling,\n      466.947 * _xScaling,\n      130.798 * _yScaling,\n      446.254 * _xScaling,\n      144.616 * _yScaling,\n    );\n    path.cubicTo(\n      424.348 * _xScaling,\n      159.245 * _yScaling,\n      407.286 * _xScaling,\n      185.341 * _yScaling,\n      380.941 * _xScaling,\n      187.547 * _yScaling,\n    );\n    path.cubicTo(\n      354.563 * _xScaling,\n      189.755 * _yScaling,\n      332.294 * _xScaling,\n      167.393 * _yScaling,\n      307.963 * _xScaling,\n      156.192 * _yScaling,\n    );\n    path.cubicTo(\n      285.649 * _xScaling,\n      145.921 * _yScaling,\n      262.802 * _xScaling,\n      137.982 * _yScaling,\n      242.584 * _xScaling,\n      123.857 * _yScaling,\n    );\n    path.cubicTo(\n      220.69 * _xScaling,\n      108.562 * _yScaling,\n      195.077 * _xScaling,\n      94.4301 * _yScaling,\n      184.341 * _xScaling,\n      69.8294 * _yScaling,\n    );\n    path.cubicTo(\n      173.603 * _xScaling,\n      45.2279 * _yScaling,\n      183.61 * _xScaling,\n      17.2839 * _yScaling,\n      184.432 * _xScaling,\n      -9.38204 * _yScaling,\n    );\n    path.cubicTo(\n      185.228 * _xScaling,\n      -35.1901 * _yScaling,\n      181.785 * _xScaling,\n      -61.2157 * _yScaling,\n      189.141 * _xScaling,\n      -85.7998 * _yScaling,\n    );\n    path.cubicTo(\n      196.864 * _xScaling,\n      -111.613 * _yScaling,\n      206.92 * _xScaling,\n      -138.951 * _yScaling,\n      228.049 * _xScaling,\n      -155.16 * _yScaling,\n    );\n    path.cubicTo(\n      249.109 * _xScaling,\n      -171.317 * _yScaling,\n      278.908 * _xScaling,\n      -167.251 * _yScaling,\n      304.51 * _xScaling,\n      -174.308 * _yScaling,\n    );\n    path.cubicTo(\n      304.51 * _xScaling,\n      -174.308 * _yScaling,\n      304.51 * _xScaling,\n      -174.308 * _yScaling,\n      304.51 * _xScaling,\n      -174.308 * _yScaling,\n    );\n    return path;\n  }\n\n  @override\n  bool shouldReclip(CustomClipper<Path> oldClipper) => true;\n}\n"
  },
  {
    "path": "lib/timer/digital_font/digital_colon.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass DigitalColon extends StatelessWidget {\n  final double height;\n  final Color color;\n\n  DigitalColon({Key key, @required this.height, @required this.color})\n      : assert(height != null),\n        assert(color != null),\n        super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return CustomPaint(\n      size: Size(height / 2.0, height),\n      painter: _DigitalColonPainter(height, color),\n    );\n  }\n}\n\nclass _DigitalColonPainter extends CustomPainter {\n  final double height;\n  final Color color;\n\n  _DigitalColonPainter(this.height, this.color);\n\n  @override\n  bool shouldRepaint(_DigitalColonPainter oldDelegate) {\n    return height != oldDelegate.height || color != oldDelegate.color;\n  }\n\n  @override\n  void paint(Canvas canvas, Size size) {\n    final double width = height / 2;\n    final double thickness = width / 5;\n\n    final Paint paint = Paint()\n      ..color = color\n      ..style = PaintingStyle.fill;\n\n    // Top dot\n    canvas.drawRect(\n        Rect.fromLTWH(\n          width / 2 - thickness / 2,\n          height / 3 - thickness / 2,\n          thickness,\n          thickness,\n        ),\n        paint);\n    // Bottom dot\n    canvas.drawRect(\n        Rect.fromLTWH(\n          width / 2 - thickness / 2,\n          height * 2 / 3 - thickness / 2,\n          thickness,\n          thickness,\n        ),\n        paint);\n  }\n}\n"
  },
  {
    "path": "lib/timer/digital_font/digital_number.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass DigitalNumber extends StatelessWidget {\n  final int value;\n  final int padLeft;\n  final double height;\n  final Color color;\n\n  DigitalNumber({\n    Key key,\n    @required this.value,\n    @required this.height,\n    @required this.color,\n    this.padLeft = 0,\n  })  : assert(value != null),\n        assert(height != null),\n        assert(color != null),\n        super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    Widget digitPainter(int digit) {\n      return new CustomPaint(\n        size: new Size(height / 2.0, height),\n        painter: new _DigitalDigitPainter(digit, height, color),\n      );\n    }\n\n    final Widget digitPadding = new SizedBox(width: height / 10.0);\n\n    List<Widget> children = [];\n\n    int digits = 0;\n    int remaining = value;\n    // do-while required for when [value] is 0\n    do {\n      int digit = remaining.remainder(10);\n      // If this is not our first entry, add padding\n      if (remaining != value) {\n        children.add(digitPadding);\n      }\n      children.add(digitPainter(digit));\n      remaining ~/= 10;\n      digits++;\n    } while (remaining > 0);\n\n    // If need to pad this number with zeros\n    while (digits < padLeft) {\n      children.add(digitPadding);\n      children.add(digitPainter(0));\n      digits++;\n    }\n\n    return new Row(\n      crossAxisAlignment: CrossAxisAlignment.center,\n      children: new List.from(children.reversed),\n    );\n  }\n}\n\nclass _DigitalDigitPainter extends CustomPainter {\n  final int value;\n  final double height;\n  final Color color;\n\n  _DigitalDigitPainter(this.value, this.height, this.color)\n      : assert(value >= 0),\n        assert(value < 10);\n\n  @override\n  bool shouldRepaint(_DigitalDigitPainter oldDelegate) {\n    return value != oldDelegate.value ||\n        height != oldDelegate.height ||\n        color != oldDelegate.color;\n  }\n\n  @override\n  void paint(Canvas canvas, Size size) {\n    final double width = height / 2; // Digits are half as wide as they are tall\n    final double thickness = width / 5; // Arbitrary thickness that looks good\n\n    final double bigGap = thickness * 2 / 3; // Inside angle for outer pixels\n    final double midGap = thickness / 2; // Angle for middle bar\n    final double smallGap = thickness / 3; // Outside angle for outer pixels\n\n    final double smallPad = thickness / 10; // Spacing for middle bar\n    final double bigPad = smallGap + smallPad; // Spacing for outer pixels\n\n    // Alias/pre-calculate convenient locations\n    final double top = size.height - height;\n    final double left = size.width - width;\n    final double right = size.width;\n    final double bottom = size.height;\n    final double middle = size.height - width;\n\n    final Paint paint = new Paint()\n      ..color = color\n      ..style = PaintingStyle.fill;\n\n    /// Build a polygon for the left side of the digit\n    List<Offset> leftPolygon(top, bottom) {\n      return [\n        new Offset(left + smallGap, top),\n        new Offset(left, top + smallGap),\n        new Offset(left, bottom - smallGap),\n        new Offset(left + smallGap, bottom),\n        new Offset(left + thickness, bottom - bigGap),\n        new Offset(left + thickness, top + bigGap),\n      ];\n    }\n\n    /// Build a polygon for the right side of the digit\n    List<Offset> rightPolygon(top, bottom) {\n      return [\n        new Offset(right - smallGap, top),\n        new Offset(right - thickness, top + bigGap),\n        new Offset(right - thickness, bottom - bigGap),\n        new Offset(right - smallGap, bottom),\n        new Offset(right, bottom - smallGap),\n        new Offset(right, top + smallGap),\n        new Offset(right - smallGap, top),\n      ];\n    }\n\n    Path p = new Path();\n    // Top\n    if (value != 1 && value != 4) {\n      final tleft = left + bigPad;\n      final tright = right - bigPad;\n      p.addPolygon([\n        new Offset(tleft, top + smallGap),\n        new Offset(tleft + smallGap, top),\n        new Offset(tright - smallGap, top),\n        new Offset(tright, top + smallGap),\n        new Offset(tright - bigGap, top + thickness),\n        new Offset(tleft + bigGap, top + thickness),\n      ], true);\n    }\n    // Left Top\n    if (value == 0 || (value > 3 && value != 7)) {\n      p.addPolygon(leftPolygon(top + bigPad, middle - smallPad), true);\n    }\n    // Right Top\n    if (value != 5 && value != 6) {\n      p.addPolygon(rightPolygon(top + bigPad, middle - smallPad), true);\n    }\n    // Middle\n    if (value > 1 && value != 7) {\n      final mleft = left + bigPad;\n      final mright = right - bigPad;\n      final halfThick = thickness / 2;\n      p.addPolygon([\n        new Offset(mleft, middle),\n        new Offset(mleft + midGap, middle - halfThick),\n        new Offset(mright - midGap, middle - halfThick),\n        new Offset(mright, middle),\n        new Offset(mright - midGap, middle + halfThick),\n        new Offset(mleft + midGap, middle + halfThick),\n        new Offset(mleft, middle),\n      ], false);\n    }\n    // Left Bottom\n    if (value == 0 || value == 2 || value == 6 || value == 8) {\n      p.addPolygon(leftPolygon(middle + smallPad, bottom - bigPad), true);\n    }\n    // Right bottom\n    if (value != 2) {\n      p.addPolygon(rightPolygon(middle + smallPad, bottom - bigPad), true);\n    }\n    // Bottom\n    if (value != 1 && value != 4 && value != 7) {\n      final bleft = left + bigPad;\n      final bright = right - bigPad;\n      p.addPolygon([\n        new Offset(bleft, bottom - smallGap),\n        new Offset(bleft + bigGap, bottom - thickness),\n        new Offset(bright - bigGap, bottom - thickness),\n        new Offset(bright, bottom - smallGap),\n        new Offset(bright - smallGap, bottom),\n        new Offset(bleft + smallGap, bottom),\n        new Offset(bleft, bottom - smallGap),\n      ], false);\n    }\n\n    canvas.drawPath(p, paint);\n  }\n}\n"
  },
  {
    "path": "lib/timer/neu_digital_clock.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:neumorphism_web/timer/digital_font/digital_colon.dart';\nimport 'package:neumorphism_web/timer/screen.dart';\nimport 'package:provider/provider.dart';\n\nimport 'digital_font/digital_number.dart';\n\nclass NeuDigitalClock extends StatelessWidget {\n  const NeuDigitalClock({\n    Key key,\n  }) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    final currentDuration = Provider.of<TimerService>(context).currentDuration;\n    final seconds = currentDuration.inSeconds;\n    final minutes = currentDuration.inMinutes;\n    final hours = currentDuration.inHours;\n    // Outer white container\n    return Container(\n      height: 145,\n      decoration: BoxDecoration(\n        color: Color.fromRGBO(217, 230, 243, 1),\n        borderRadius: BorderRadius.circular(15),\n        boxShadow: [\n          BoxShadow(\n            blurRadius: 15,\n            offset: Offset(-5, -5),\n            color: Colors.white,\n          ),\n          BoxShadow(\n            blurRadius: 15,\n            offset: Offset(10.5, 10.5),\n            color: Color.fromRGBO(214, 223, 230, 1),\n          )\n        ],\n      ),\n      // Digital green background\n      child: Center(\n        child: LayoutBuilder(\n          builder: (context, constraints) => Container(\n            height: constraints.maxHeight * 0.87,\n            width: constraints.maxWidth * 0.95,\n            decoration: BoxDecoration(\n              gradient: LinearGradient(colors: [\n                Color.fromRGBO(203, 211, 196, 1),\n                Color.fromRGBO(176, 188, 163, 1)\n              ]),\n              borderRadius: BorderRadius.circular(10),\n              border: Border.all(\n                color: Color.fromRGBO(168, 168, 168, 1),\n                width: 2,\n              ),\n            ),\n            child: DigitalClock(\n              height: constraints.maxHeight,\n              width: constraints.maxWidth,\n              seconds: seconds,\n              minutes: minutes,\n              hours: hours,\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass DigitalClock extends StatelessWidget {\n  const DigitalClock({\n    Key key,\n    @required this.height,\n    @required this.width,\n    this.hours = 0,\n    this.minutes = 0,\n    this.seconds = 0,\n  }) : super(key: key);\n\n  final num height;\n  final num width;\n  final int hours;\n  final int minutes;\n  final int seconds;\n\n  @override\n  Widget build(BuildContext context) {\n    List<DigitalNumberWithBG> hourNumber = createNumberTime(hours);\n    List<DigitalNumberWithBG> minuteNumber = createNumberTime(minutes);\n    List<DigitalNumberWithBG> secondNumber = createNumberTime(seconds);\n    return Center(\n      child: Container(\n        // color: Colors.green,\n        height: height * 0.47,\n        width: width * 0.70,\n        child: Row(\n          mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n          children: [\n            ...hourNumber,\n            DigitalColon(height: height * 0.30, color: Colors.black87),\n            ...minuteNumber,\n            DigitalColon(height: height * 0.30, color: Colors.black87),\n            ...secondNumber,\n          ],\n        ),\n      ),\n    );\n  }\n\n  List<DigitalNumberWithBG> createNumberTime(int numberTime) {\n    final parsedNumberTime = numberTime % 60;\n    final isNumberTimeTwoDigits = isNumberTwoDigits(parsedNumberTime);\n    final firstNumber = firstDigit(parsedNumberTime);\n    final tenDigit = isNumberTimeTwoDigits ? firstNumber : 0;\n    final digit = isNumberTimeTwoDigits\n        ? int.parse(parsedNumberTime.toString()[1])\n        : firstNumber;\n\n    return [\n      DigitalNumberWithBG(\n        height: height * 0.35,\n        value: tenDigit,\n      ),\n      DigitalNumberWithBG(\n        height: height * 0.35,\n        value: digit,\n      ),\n    ];\n  }\n}\n\nclass DigitalNumberWithBG extends StatelessWidget {\n  const DigitalNumberWithBG({\n    Key key,\n    this.value = 0,\n    this.padLeft,\n    this.height,\n    this.color,\n    this.backgroundValue = 8,\n  }) : super(key: key);\n\n  final int value;\n  final int backgroundValue;\n  final int padLeft;\n  final double height;\n  final Color color;\n\n  @override\n  Widget build(BuildContext context) {\n    return Stack(\n      children: <Widget>[\n        //Foreground\n        DigitalNumber(\n          value: value,\n          color: Colors.black,\n          height: height,\n        ),\n\n        // Background\n        DigitalNumber(\n          value: backgroundValue,\n          color: Colors.black12,\n          height: height,\n        ),\n      ],\n    );\n  }\n}\n\nbool isNumberTwoDigits(int number) {\n  return number.toString().length == 2;\n}\n\nint firstDigit(int number) {\n  return int.parse(number.toString()[0]);\n}\n"
  },
  {
    "path": "lib/timer/neu_hamburger_button.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass NeuHamburgerButton extends StatelessWidget {\n  const NeuHamburgerButton({\n    Key key,\n  }) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return NeumorphicContainer(\n      color: Color.fromRGBO(227, 237, 247, 1),\n      child: SizedBox(\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          children: <Widget>[\n            for (var i = 0; i < 3; i++)\n              Padding(\n                padding: const EdgeInsets.symmetric(vertical: 2.5),\n                child: Container(\n                  height: 1.3,\n                  width: 20,\n                  decoration: BoxDecoration(\n                    borderRadius: BorderRadius.all(\n                      Radius.circular(1),\n                    ),\n                    boxShadow: [\n                      // Edge shadow\n                      BoxShadow(\n                        offset: Offset(-1, -1),\n                        color: Color.fromRGBO(176, 193, 209, 1),\n                        spreadRadius: 1.0,\n                      ),\n                      // Circular shadow\n                      BoxShadow(\n                        color: Colors.white,\n                        // spreadRadius: 0.5,\n                      )\n                    ],\n                  ),\n                ),\n              )\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass NeumorphicContainer extends StatefulWidget {\n  final Widget child;\n  final double bevel;\n  final Offset blurOffset;\n  final Color color;\n  final EdgeInsets padding;\n\n  NeumorphicContainer({\n    Key key,\n    this.child,\n    this.bevel = 10.0,\n    this.color,\n    this.padding = const EdgeInsets.all(16.0),\n  })  : this.blurOffset = Offset(bevel / 2, bevel / 2),\n        super(key: key);\n\n  @override\n  _NeumorphicContainerState createState() => _NeumorphicContainerState();\n}\n\nclass _NeumorphicContainerState extends State<NeumorphicContainer> {\n  bool _isPressed = false;\n\n  void _onPointerDown(PointerDownEvent event) {\n    setState(() {\n      _isPressed = true;\n    });\n  }\n\n  void _onPointerUp(PointerUpEvent event) {\n    setState(() {\n      _isPressed = false;\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Listener(\n      onPointerDown: _onPointerDown,\n      onPointerUp: _onPointerUp,\n      child: AnimatedContainer(\n        duration: const Duration(milliseconds: 150),\n        padding: widget.padding,\n        decoration: BoxDecoration(\n          shape: BoxShape.circle,\n          color: Color.fromRGBO(227, 237, 247, 1),\n          boxShadow: _isPressed\n              ? null\n              : [\n                  BoxShadow(\n                    blurRadius: 15,\n                    offset: -widget.blurOffset,\n                    color: Colors.white,\n                  ),\n                  BoxShadow(\n                    blurRadius: 15,\n                    offset: Offset(10.5, 10.5),\n                    color: Color.fromRGBO(214, 223, 230, 1),\n                  )\n                ],\n        ),\n        child: widget.child,\n      ),\n    );\n  }\n}\n\nextension ColorUtils on Color {\n  Color mix(Color another, double amount) {\n    return Color.lerp(this, another, amount);\n  }\n}\n"
  },
  {
    "path": "lib/timer/neu_progress_painter.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'dart:math';\n\nclass NeuProgressPainter extends CustomPainter {\n  //\n  Color defaultCircleColor;\n  Color percentageCompletedCircleColor;\n  double completedPercentage;\n  double circleWidth;\n\n  NeuProgressPainter(\n      {this.defaultCircleColor,\n      this.percentageCompletedCircleColor,\n      this.completedPercentage,\n      this.circleWidth});\n\n  getPaint(Color color) {\n    return Paint()\n      ..color = color\n      ..strokeCap = StrokeCap.round\n      ..style = PaintingStyle.stroke\n      ..strokeWidth = circleWidth;\n  }\n\n  @override\n  void paint(Canvas canvas, Size size) {\n    Paint defaultCirclePaint = getPaint(defaultCircleColor);\n\n    Offset center = Offset(size.width / 2, size.height / 2);\n    double radius = min(size.width / 2, size.height / 2);\n    Rect boundingSquare = Rect.fromCircle(center: center, radius: radius);\n\n    paint(\n      List<Color> colors,\n    ) {\n      final Gradient gradient = LinearGradient(\n        begin: Alignment.topCenter,\n        end: Alignment.bottomRight,\n        colors: colors,\n      );\n\n      return Paint()\n        ..strokeCap = StrokeCap.round\n        ..style = PaintingStyle.stroke\n        ..strokeWidth = circleWidth\n        ..shader = gradient.createShader(boundingSquare);\n    }\n\n    canvas.drawCircle(center, radius, defaultCirclePaint);\n\n    double arcAngle = 2 * pi * (completedPercentage / 100);\n    canvas.drawArc(\n      Rect.fromCircle(center: center, radius: radius),\n      -pi / 2,\n      arcAngle,\n      false,\n      paint(\n        [\n          Color.fromRGBO(255, 219, 129, 1),\n          Color.fromRGBO(255, 126, 29, 1),\n        ],\n      ),\n    );\n  }\n\n  @override\n  bool shouldRepaint(CustomPainter painter) {\n    return true;\n  }\n}\n"
  },
  {
    "path": "lib/timer/neu_progress_pie_bar.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:neumorphism_web/timer/neu_progress_painter.dart';\nimport 'package:neumorphism_web/timer/screen.dart';\nimport 'package:provider/provider.dart';\n\nclass NeuProgressPieBar extends StatelessWidget {\n  const NeuProgressPieBar({\n    Key key,\n  }) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    final percentage =\n        Provider.of<TimerService>(context).currentDuration.inSeconds / 60 * 100;\n    return Container(\n      height: 400,\n      decoration: BoxDecoration(\n        shape: BoxShape.circle,\n        color: Color.fromRGBO(225, 234, 244, 1),\n        boxShadow: [\n          BoxShadow(\n            blurRadius: 15,\n            offset: Offset(-5, -5),\n            color: Colors.white,\n          ),\n          BoxShadow(\n            blurRadius: 15,\n            offset: Offset(10.5, 10.5),\n            color: Color.fromRGBO(214, 223, 230, 1),\n          )\n        ],\n        border: Border.all(\n          width: 15,\n          color: Theme.of(context).backgroundColor,\n        ),\n      ),\n      child: Stack(\n        children: <Widget>[\n          Center(\n            child: SizedBox(\n              height: 250,\n              child: CustomPaint(\n                painter: NeuProgressPainter(\n                  circleWidth: 60,\n                  completedPercentage: percentage,\n                  defaultCircleColor: Colors.transparent,\n                ),\n                child: Center(),\n              ),\n            ),\n          ),\n          Center(\n            child: Container(\n              height: 200,\n              decoration: BoxDecoration(\n                shape: BoxShape.circle,\n                gradient: LinearGradient(\n                  begin: FractionalOffset.topCenter,\n                  end: FractionalOffset.bottomCenter,\n                  colors: [\n                    Colors.grey.withOpacity(0.0),\n                    Colors.black54,\n                  ],\n                  stops: [0.95, 1.0],\n                ),\n                border: Border.all(\n                  width: 15,\n                  color: Theme.of(context).backgroundColor,\n                ),\n              ),\n              child: Center(child: NeuStartButton()),\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n\nclass NeuStartButton extends StatefulWidget {\n  final double bevel;\n  final Offset blurOffset;\n\n  NeuStartButton({\n    Key key,\n    this.bevel = 10.0,\n  })  : this.blurOffset = Offset(bevel / 2, bevel / 2),\n        super(key: key);\n\n  @override\n  _NeuStartButtonState createState() => _NeuStartButtonState();\n}\n\nclass _NeuStartButtonState extends State<NeuStartButton> {\n  bool _isPressed = false;\n  bool _isRunning = false;\n\n  void _onPointerDown() {\n    setState(() {\n      _isPressed = true;\n    });\n  }\n\n  void _onPointerUp(PointerUpEvent event) {\n    setState(() {\n      _isPressed = false;\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Listener(\n      onPointerDown: (_) {\n        _onPointerDown();\n        _isRunning\n            ? Provider.of<TimerService>(context, listen: false).stop()\n            : Provider.of<TimerService>(context, listen: false).start();\n        setState(() => _isRunning = !_isRunning);\n      },\n      onPointerUp: _onPointerUp,\n      child: AnimatedContainer(\n        duration: const Duration(milliseconds: 150),\n        height: 95,\n        padding: const EdgeInsets.all(16.0),\n        decoration: BoxDecoration(\n          shape: BoxShape.circle,\n          color: Colors.white70,\n          boxShadow: _isPressed\n              ? null\n              : [\n                  BoxShadow(\n                    blurRadius: 15,\n                    spreadRadius: 5,\n                    offset: -widget.blurOffset,\n                    color: Colors.white,\n                  ),\n                  BoxShadow(\n                    blurRadius: 15,\n                    offset: Offset(10.5, 10.5),\n                    color: Color.fromRGBO(214, 223, 230, 1),\n                  )\n                ],\n        ),\n        child: Center(\n            child: Icon(\n          _isRunning ? Icons.stop : Icons.play_arrow,\n          size: 60,\n          color: _isRunning\n              ? Colors.redAccent.shade400\n              : Colors.greenAccent.shade400,\n        )),\n      ),\n    );\n  }\n}\n\nextension ColorUtils on Color {\n  Color mix(Color another, double amount) {\n    return Color.lerp(this, another, amount);\n  }\n}\n"
  },
  {
    "path": "lib/timer/neu_reset_button.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:neumorphism_web/timer/screen.dart';\nimport 'package:provider/provider.dart';\n\nclass NeuResetButton extends StatefulWidget {\n  final double bevel;\n  final Offset blurOffset;\n\n  NeuResetButton({\n    Key key,\n    this.bevel = 10.0,\n  })  : this.blurOffset = Offset(bevel / 2, bevel / 2),\n        super(key: key);\n\n  @override\n  _NeuResetButtonState createState() => _NeuResetButtonState();\n}\n\nclass _NeuResetButtonState extends State<NeuResetButton> {\n  bool _isPressed = false;\n\n  void _onPointerDown() {\n    setState(() {\n      _isPressed = true;\n    });\n  }\n\n  void _onPointerUp(PointerUpEvent event) {\n    setState(() {\n      _isPressed = false;\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Listener(\n      onPointerDown: (_) {\n        _onPointerDown();\n        final isRunning =\n            Provider.of<TimerService>(context, listen: false).isRunning;\n        Provider.of<TimerService>(context, listen: false).reset();\n        // If user press reset button when timer is running, start for them\n        if (isRunning)\n          Provider.of<TimerService>(context, listen: false).start();\n      },\n      onPointerUp: _onPointerUp,\n      child: AnimatedContainer(\n        duration: const Duration(milliseconds: 150),\n        height: 73,\n        padding: const EdgeInsets.all(16.0),\n        decoration: BoxDecoration(\n          color: Color.fromRGBO(227, 237, 247, 1),\n          borderRadius: BorderRadius.circular(15),\n          boxShadow: _isPressed\n              ? null\n              : [\n                  BoxShadow(\n                    blurRadius: 15,\n                    offset: -widget.blurOffset,\n                    color: Colors.white,\n                  ),\n                  BoxShadow(\n                    blurRadius: 15,\n                    offset: Offset(10.5, 10.5),\n                    color: Color.fromRGBO(214, 223, 230, 1),\n                  )\n                ],\n        ),\n        child: Center(\n          child: Text(\n            'Reset',\n            style: Theme.of(context).textTheme.headline4,\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nextension ColorUtils on Color {\n  Color mix(Color another, double amount) {\n    return Color.lerp(this, another, amount);\n  }\n}\n"
  },
  {
    "path": "lib/timer/screen.dart",
    "content": "import 'dart:async';\n\nimport 'package:flutter/material.dart';\nimport 'package:neumorphism_web/timer/neu_digital_clock.dart';\nimport 'package:neumorphism_web/timer/neu_hamburger_button.dart';\nimport 'package:neumorphism_web/timer/neu_progress_pie_bar.dart';\nimport 'package:neumorphism_web/timer/neu_reset_button.dart';\nimport 'package:provider/provider.dart';\n\nclass TimerScreen extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final timeService = TimerService();\n    return ChangeNotifierProvider<TimerService>(\n      create: (_) => timeService,\n      child: Scaffold(\n        body: Padding(\n          padding: const EdgeInsets.symmetric(horizontal: 35.0),\n          child: Column(\n            children: <Widget>[\n              SizedBox(height: MediaQuery.of(context).viewPadding.top + 20),\n              TimerTitle(),\n              SizedBox(height: 60),\n              NeuDigitalClock(),\n              SizedBox(height: 20),\n              NeuProgressPieBar(),\n              SizedBox(height: 25),\n              NeuResetButton(),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass TimerTitle extends StatelessWidget {\n  const TimerTitle({\n    Key key,\n  }) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Row(\n      children: <Widget>[\n        Text(\n          'Timer',\n          style: Theme.of(context).textTheme.headline1,\n        ),\n        Spacer(),\n        NeuHamburgerButton()\n      ],\n    );\n  }\n}\n\nclass TimerService extends ChangeNotifier {\n  Stopwatch _watch;\n  Timer _timer;\n\n  Duration get currentDuration => _currentDuration;\n  Duration _currentDuration = Duration.zero;\n\n  bool get isRunning => _timer != null;\n\n  TimerService() {\n    _watch = Stopwatch();\n  }\n\n  void _onTick(Timer timer) {\n    _currentDuration = _watch.elapsed;\n\n    // notify all listening widgets\n    notifyListeners();\n  }\n\n  void start() {\n    if (_timer != null) return;\n\n    _timer = Timer.periodic(Duration(seconds: 1), _onTick);\n    _watch.start();\n\n    notifyListeners();\n  }\n\n  void stop() {\n    _timer?.cancel();\n    _timer = null;\n    _watch.stop();\n    _currentDuration = _watch.elapsed;\n\n    notifyListeners();\n  }\n\n  void reset() {\n    stop();\n    _watch.reset();\n    _currentDuration = Duration.zero;\n\n    notifyListeners();\n  }\n  // source: https://stackoverflow.com/questions/53228993/how-to-implement-persistent-stopwatch-in-flutter\n}\n"
  },
  {
    "path": "pubspec.yaml",
    "content": "name: neumorphism_web\ndescription: A new Flutter project.\n\n# The following defines the version and build number for your application.\n# A version number is three numbers separated by dots, like 1.2.43\n# followed by an optional build number separated by a +.\n# Both the version and the builder number may be overridden in flutter\n# build by specifying --build-name and --build-number, respectively.\n# In Android, build-name is used as versionName while build-number used as versionCode.\n# Read more about Android versioning at https://developer.android.com/studio/publish/versioning\n# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.\n# Read more about iOS versioning at\n# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html\nversion: 1.0.0+1\n\nenvironment:\n  sdk: \">=2.6.0 <3.0.0\"\n\ndependencies:\n  flutter:\n    sdk: flutter\n  provider: ^4.0.5\n  transparent_image: ^1.0.0\n  math_expressions: ^2.0.0\n\n  # The following adds the Cupertino Icons font to your application.\n  # Use with the CupertinoIcons class for iOS style icons.\n  cupertino_icons: ^0.1.3\n  google_fonts: ^0.5.0+1\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n\n# For information on the generic Dart part of this file, see the\n# following page: https://dart.dev/tools/pub/pubspec\n\n# The following section is specific to Flutter.\nflutter:\n  # The following line ensures that the Material Icons font is\n  # included with your application, so that you can use the icons in\n  # the material Icons class.\n  uses-material-design: true\n  # To add assets to your application, add an assets section, like this:\n  # assets:\n  #  - images/a_dot_burr.jpeg\n  #  - images/a_dot_ham.jpeg\n  # An image asset can refer to one or more resolution-specific \"variants\", see\n  # https://flutter.dev/assets-and-images/#resolution-aware.\n  # For details regarding adding assets from package dependencies, see\n  # https://flutter.dev/assets-and-images/#from-packages\n  # To add custom fonts to your application, add a fonts section here,\n  # in this \"flutter\" section. Each entry in this list should have a\n  # \"family\" key with the font family name, and a \"fonts\" key with a\n  # list giving the asset and other descriptors for the font. For\n  # example:\n  # fonts:\n  #   - family: Schyler\n  #     fonts:\n  #       - asset: fonts/Schyler-Regular.ttf\n  #       - asset: fonts/Schyler-Italic.ttf\n  #         style: italic\n  #   - family: Trajan Pro\n  #     fonts:\n  #       - asset: fonts/TrajanPro.ttf\n  #       - asset: fonts/TrajanPro_Bold.ttf\n  #         weight: 700\n  #\n  # For details regarding fonts from package dependencies,\n  # see https://flutter.dev/custom-fonts/#from-packages\n"
  },
  {
    "path": "test/widget_test.dart",
    "content": "// This is a basic Flutter widget test.\n//\n// To perform an interaction with a widget in your test, use the WidgetTester\n// utility that Flutter provides. For example, you can send tap and scroll\n// gestures. You can also use WidgetTester to find child widgets in the widget\n// tree, read text, and verify that the values of widget properties are correct.\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nimport 'package:neumorphism_web/main.dart';\n\nvoid main() {\n  testWidgets('Counter increments smoke test', (WidgetTester tester) async {\n    // Build our app and trigger a frame.\n    await tester.pumpWidget(MyApp());\n\n    // Verify that our counter starts at 0.\n    expect(find.text('0'), findsOneWidget);\n    expect(find.text('1'), findsNothing);\n\n    // Tap the '+' icon and trigger a frame.\n    await tester.tap(find.byIcon(Icons.add));\n    await tester.pump();\n\n    // Verify that our counter has incremented.\n    expect(find.text('0'), findsNothing);\n    expect(find.text('1'), findsOneWidget);\n  });\n}\n"
  },
  {
    "path": "web/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <title>neumorphism_web</title>\n</head>\n<body>\n  <script src=\"main.dart.js\" type=\"application/javascript\"></script>\n</body>\n</html>\n"
  }
]