diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index 8b70634..6fb3ae6 100644 --- a/.flutter-plugins-dependencies +++ b/.flutter-plugins-dependencies @@ -1 +1 @@ -{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"audioplayers","dependencies":["path_provider"]},{"name":"path_provider","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]}]} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"audioplayers","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\audioplayers-0.15.1\\\\","dependencies":["path_provider"]},{"name":"path_provider","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-1.6.11\\\\","dependencies":[]},{"name":"shared_preferences","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences-0.5.7+3\\\\","dependencies":[]},{"name":"url_launcher","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher-5.4.11\\\\","dependencies":[]}],"android":[{"name":"audioplayers","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\audioplayers-0.15.1\\\\","dependencies":["path_provider"]},{"name":"path_provider","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-1.6.11\\\\","dependencies":[]},{"name":"shared_preferences","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences-0.5.7+3\\\\","dependencies":[]},{"name":"url_launcher","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher-5.4.11\\\\","dependencies":[]}],"macos":[{"name":"audioplayers","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\audioplayers-0.15.1\\\\","dependencies":[]},{"name":"path_provider_macos","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_macos-0.0.4+3\\\\","dependencies":[]},{"name":"shared_preferences_macos","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_macos-0.0.1+10\\\\","dependencies":[]},{"name":"url_launcher_macos","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_macos-0.0.1+7\\\\","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_linux-0.0.1+1\\\\","dependencies":[]}],"windows":[],"web":[{"name":"audioplayers","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\audioplayers-0.15.1\\\\","dependencies":[]},{"name":"shared_preferences_web","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_web-0.1.2+7\\\\","dependencies":[]},{"name":"url_launcher_web","path":"C:\\\\Users\\\\nimak\\\\AppData\\\\Roaming\\\\Pub\\\\Cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_web-0.1.1+6\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"audioplayers","dependencies":["path_provider"]},{"name":"path_provider","dependencies":["path_provider_macos","path_provider_linux"]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_web","url_launcher_macos"]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]}],"date_created":"2020-06-20 19:19:52.385954","version":"1.17.4"} \ No newline at end of file diff --git a/.gitignore b/.gitignore index ac4a906..aa35107 100644 --- a/.gitignore +++ b/.gitignore @@ -1,72 +1,72 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.packages -.pub-cache/ -.pub/ -/build/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +.dart_tool/ +.flutter-plugins +.packages +.pub-cache/ +.pub/ +/build/ + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/local.properties +**/android/**/GeneratedPluginRegistrant.java + +# iOS/XCode related +**/ios/**/*.mode1v3 +**/ios/**/*.mode2v3 +**/ios/**/*.moved-aside +**/ios/**/*.pbxuser +**/ios/**/*.perspectivev3 +**/ios/**/*sync/ +**/ios/**/.sconsign.dblite +**/ios/**/.tags* +**/ios/**/.vagrant/ +**/ios/**/DerivedData/ +**/ios/**/Icon? +**/ios/**/Pods/ +**/ios/**/.symlinks/ +**/ios/**/profile +**/ios/**/xcuserdata +**/ios/.generated/ +**/ios/Flutter/App.framework +**/ios/Flutter/Flutter.framework +**/ios/Flutter/Generated.xcconfig +**/ios/Flutter/app.flx +**/ios/Flutter/app.zip +**/ios/Flutter/flutter_assets/ +**/ios/ServiceDefinitions.json +**/ios/Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!**/ios/**/default.mode1v3 +!**/ios/**/default.mode2v3 +!**/ios/**/default.pbxuser +!**/ios/**/default.perspectivev3 +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/.metadata b/.metadata index 2abb5c9..5d6df35 100644 --- a/.metadata +++ b/.metadata @@ -1,10 +1,10 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 20e59316b8b8474554b38493b8ca888794b0234a - channel: beta - -project_type: app +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 20e59316b8b8474554b38493b8ca888794b0234a + channel: beta + +project_type: app diff --git a/README.md b/README.md index dcf62c6..aa93243 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ -# four - -Four fours game - -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) - -For help getting started with Flutter, view our -[online documentation](https://flutter.dev/docs), which offers tutorials, -samples, guidance on mobile development, and a full API reference. +# four + +Four fours game + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/android/app/build.gradle b/android/app/build.gradle index 0c573a9..1d9140c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,67 +1,67 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "snibo.four" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' -} +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 28 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "snibo.four" + minSdkVersion 16 + targetSdkVersion 28 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +} diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 66bc9f1..2c4316f 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,7 +1,7 @@ - - - - + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 9fdd4f0..060e365 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/snibo/four/MainActivity.kt b/android/app/src/main/kotlin/snibo/four/MainActivity.kt index 3add216..6bbe4ed 100644 --- a/android/app/src/main/kotlin/snibo/four/MainActivity.kt +++ b/android/app/src/main/kotlin/snibo/four/MainActivity.kt @@ -1,13 +1,13 @@ -package snibo.four - -import android.os.Bundle - -import io.flutter.app.FlutterActivity -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - GeneratedPluginRegistrant.registerWith(this) - } -} +package snibo.four + +import android.os.Bundle + +import io.flutter.app.FlutterActivity +import io.flutter.plugins.GeneratedPluginRegistrant + +class MainActivity: FlutterActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + GeneratedPluginRegistrant.registerWith(this) + } +} diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml index 304732f..8403758 100644 --- a/android/app/src/main/res/drawable/launch_background.xml +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -1,12 +1,12 @@ - - - - - - - - + + + + + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 00fa441..4c57322 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -1,8 +1,8 @@ - - - - + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml index 66bc9f1..2c4316f 100644 --- a/android/app/src/profile/AndroidManifest.xml +++ b/android/app/src/profile/AndroidManifest.xml @@ -1,7 +1,7 @@ - - - - + + + + diff --git a/android/build.gradle b/android/build.gradle index b7faad8..cf83cb9 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,31 +1,31 @@ -buildscript { - ext.kotlin_version = '1.2.71' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} +buildscript { + ext.kotlin_version = '1.2.71' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.2.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/gradle.properties b/android/gradle.properties index 7be3d8b..5b1f143 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,2 +1,2 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx1536M +android.enableR8=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 2819f02..d3b2d27 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jun 23 08:50:38 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip diff --git a/android/settings.gradle b/android/settings.gradle index 5a2f14f..4f14f8e 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,15 +1,15 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +include ':app' + +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + +def plugins = new Properties() +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') +if (pluginsFile.exists()) { + pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } +} + +plugins.each { name, path -> + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() + include ":$name" + project(":$name").projectDir = pluginDirectory +} diff --git a/assets/images/logo.png b/assets/images/logo.png new file mode 100644 index 0000000..1375a08 Binary files /dev/null and b/assets/images/logo.png differ diff --git a/assets/images/logo1.gif b/assets/images/logo1.gif new file mode 100644 index 0000000..f535bfe Binary files /dev/null and b/assets/images/logo1.gif differ diff --git a/assets/images/logo1.png b/assets/images/logo1.png new file mode 100644 index 0000000..1375a08 Binary files /dev/null and b/assets/images/logo1.png differ diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f7..58e65f9 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -1,26 +1,26 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 8.0 - - + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 8.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig index 592ceee..0b2d479 100644 --- a/ios/Flutter/Debug.xcconfig +++ b/ios/Flutter/Debug.xcconfig @@ -1 +1 @@ -#include "Generated.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig index 592ceee..0b2d479 100644 --- a/ios/Flutter/Release.xcconfig +++ b/ios/Flutter/Release.xcconfig @@ -1 +1 @@ -#include "Generated.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Flutter/flutter_export_environment.sh b/ios/Flutter/flutter_export_environment.sh new file mode 100644 index 0000000..e751f7e --- /dev/null +++ b/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=C:\Users\nimak\flutter" +export "FLUTTER_APPLICATION_PATH=C:\Users\nimak\Documents\Programming\four" +export "FLUTTER_TARGET=lib\main.dart" +export "FLUTTER_BUILD_DIR=build" +export "SYMROOT=${SOURCE_ROOT}/../build\ios" +export "OTHER_LDFLAGS=$(inherited) -framework Flutter" +export "FLUTTER_FRAMEWORK_DIR=C:\Users\nimak\flutter\bin\cache\artifacts\engine\ios" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 8957a7e..6d0df96 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -1,521 +1,521 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B80C3931E831B6300D905FE /* App.framework */, - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 0910; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = S8QB4VV633; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = snibo.four; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 4.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = snibo.four; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; - SWIFT_VERSION = 4.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = snibo.four; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; - SWIFT_VERSION = 4.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B80C3931E831B6300D905FE /* App.framework */, + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEBA1CF902C7004384FC /* Flutter.framework */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = "The Chromium Authors"; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 0910; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = snibo.four; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = snibo.four; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = snibo.four; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a1..59c6d39 100644 --- a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -1,7 +1,7 @@ - - - - - + + + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140c..be0b92e 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,91 +1,91 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..59c6d39 100644 --- a/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -1,7 +1,7 @@ - - - - - + + + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 71cc41e..52252fc 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,13 +1,13 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fa..1950fd8 100644 --- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,122 +1,122 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json index 0bedcf2..d08a4de 100644 --- a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -1,23 +1,23 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md index 89c2725..65a94b5 100644 --- a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -1,5 +1,5 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard index f2e259c..497371e 100644 --- a/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -1,37 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard index f3c2851..bbb83ca 100644 --- a/ios/Runner/Base.lproj/Main.storyboard +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 9900004..7bb9d28 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -1,45 +1,45 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - four - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + four + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/lib/About.dart b/lib/About.dart new file mode 100644 index 0000000..e11b002 --- /dev/null +++ b/lib/About.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'utils.dart'; +import 'package:flutter/services.dart'; + +class About extends StatelessWidget { + @override + Widget build(BuildContext context) { + SystemChrome.setEnabledSystemUIOverlays([]); + return Scaffold( + backgroundColor: Theme.of(context).backgroundColor, + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text("Created by Sidney Nimako"), + FlatButton( + child: Text( + "snibo.me", + style: TextStyle(decoration: TextDecoration.underline, color: Theme.of(context).primaryColor), + ), + onPressed: () => launchSite("http://snibo.me"), + ), + FlatButton( + child: Text("Support me", + style: TextStyle(decoration: TextDecoration.underline)), + onPressed: () => launchSite("https://www.paypal.me/snibo/4444"), + ) + ], + ), + ), + ); + } +} diff --git a/lib/Game.dart b/lib/Game.dart new file mode 100644 index 0000000..bcfba80 --- /dev/null +++ b/lib/Game.dart @@ -0,0 +1,325 @@ +import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:flame/flame.dart'; +import 'package:flutter/services.dart'; + +import 'MathEngine.dart'; +import 'utils.dart'; +import 'Themes.dart'; + +class GamePage extends StatefulWidget { + GamePage({Key key, this.gameType}) : super(key: key); + + final int gameType; + + @override + _GamePageState createState() => _GamePageState(); +} + +class _GamePageState extends State { + int _counter = 4; + String _value = ""; + int _goal = 0; + int _score; + int _computation; + + @override + void initState() { + super.initState(); + } + + void _plus() { + setState(() { + _value += "+"; + }); + } + + void correctSound() { + Flame.audio.play("correct.mp3"); + } + + void squared() { + setState(() { + _value += '\u00B2'; + }); + } + + void _factorial() { + setState(() { + _value += '!'; + }); + } + + void _exp() { + setState(() { + _value += "^"; + }); + } + + void _squared() { + setState(() { + _value += "²"; + }); + } + + void _minus() { + setState(() { + _value += "-"; + }); + } + + void _div() { + setState(() { + _value += "\u00F7"; + }); + } + + void _mult() { + setState(() { + _value += "x"; + }); + } + + void _sqrt() { + setState(() { + _value += '\u221a'; + }); + } + + void _openParen() { + setState(() { + _value += "("; + }); + } + + void _closeParen() { + setState(() { + _value += ")"; + }); + } + + void _decimal() { + setState(() { + _value += "."; + }); + } + + void _clear() { + setState(() { + _value = ""; + _counter = 4; + }); + } + + void _equals() { + setState(() { + _computation = mathEngine(_value).round(); + if (_computation == _goal && _counter == 0) { + _goal++; + correctSound(); + _updateScore(_goal); + _clear(); + } else { + if (_counter != 0) { + _value += "=$_computation"; + } else { + _value += "=$_computation"; + } + } + }); + } + + void _four() { + setState(() { + if (_counter == 0) { + } else { + _value += "4"; + _counter--; + } + }); + } + + void _backspace() { + setState(() { + int len = _value.length; + if (int.tryParse(_value.substring(len - 1)) != null) { + _counter++; + } + _value = _value.substring(0, len - 1); + }); + } + + @override + Widget build(BuildContext context) { + Flame.audio.load('correct.mp3'); + SystemChrome.setEnabledSystemUIOverlays([]); + _loadPage(); + return FutureBuilder( + future: Future.delayed(Duration(seconds: minTime), () => true), + builder: (BuildContext context, AsyncSnapshot snapshot) { + Widget _body; + if (snapshot.hasData) { + _body = gamePage(); + } else { + _body = new Container( + color: Theme.of(context).backgroundColor, + child: Center( + child: Image( + image: AssetImage(logosLoading[theme]), height: 200.0), + )); + } + return new Scaffold( + backgroundColor: Theme.of(context).backgroundColor, body: _body); + }, + ); +// startTimer(4); + //return new Scaffold( + //backgroundColor: Color(0xffCED4CC), + //body: gamePage(), + //); + } + + Widget genRow( + String t1, Function f1, String t2, Function f2, String t3, Function f3) { + if (t2 == "=") { + return Row( + children: [ + newButton(t1, f1, Theme.of(context).accentColor, + Theme.of(context).textTheme.bodyText1.color), + newButton(t2, f2, Theme.of(context).primaryColor, + Theme.of(context).textTheme.headline3.color), + newButton(t3, f3, Theme.of(context).accentColor, + Theme.of(context).textTheme.bodyText1.color), + ], + mainAxisAlignment: MainAxisAlignment.spaceAround, + ); + } + return Row( + children: [ + newButton(t1, f1, Theme.of(context).accentColor, + Theme.of(context).textTheme.bodyText1.color), + newButton(t2, f2, Theme.of(context).accentColor, + Theme.of(context).textTheme.bodyText1.color), + newButton(t3, f3, Theme.of(context).accentColor, + Theme.of(context).textTheme.bodyText1.color), + ], + mainAxisAlignment: MainAxisAlignment.spaceAround, + ); + } + + Widget newButton( + String text, Function f, Color backgroundColor, Color textColor) { + return RaisedButton( + color: backgroundColor, + shape: + RoundedRectangleBorder(borderRadius: new BorderRadius.circular(18.0)), + onPressed: f, + child: Text( + "$text", + style: TextStyle( + fontSize: 24, color: Theme.of(context).textTheme.bodyText1.color), + ), + padding: EdgeInsets.all(15), + animationDuration: Duration(microseconds: 0), + ); + } + + Widget gamePage() { + return Padding( + padding: + EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.06), + child: Center( + child: Column( + children: [ + Row( + children: [ + Column( + children: [ + Text("Goal:", style: Theme.of(context).textTheme.bodyText1), + Text('$_goal', + style: Theme.of(context).textTheme.headline3), + ], + ), + Column( + children: [ + Text("Highscore:", style: Theme.of(context).textTheme.bodyText1), + Text( + '$_score', + style: Theme.of(context).textTheme.headline3, + ), + ], + ), + ], + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + ), + Padding( + padding: EdgeInsets.fromLTRB(0,2.0,0,15.0), +// color: Colors.transparent, + child: Container( + child: SizedBox( + width: MediaQuery.of(context).size.width * 0.9, + height: MediaQuery.of(context).size.height * 0.1, + child: Center( + child: Text( + '$_value', + style: Theme.of(context).textTheme.headline4, + textAlign: TextAlign.center, + ), + )), + decoration: BoxDecoration( + color: Theme.of(context).primaryColorDark, + borderRadius: BorderRadius.circular( + MediaQuery.of(context).size.width * 0.04)), + ) + ), + Text( + "Fours Remaining: $_counter", + textAlign: TextAlign.center, + style: TextStyle(color: Theme.of(context).textTheme.bodyText1.color), + ), + SizedBox( + height: 500, + width: MediaQuery.of(context).size.width * 0.88, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + genRow("²", _squared, ".", _decimal, "<", _backspace), + genRow("+", _plus, "-", _minus, "(", _openParen), + genRow("4", _four, "=", _equals, "C", _clear), + genRow("÷", _div, "x", _mult, ")", _closeParen), + genRow("!", _factorial, "^", _exp, "√", _sqrt) + ], + ), + ), + ]))); + } + + _loadPage() async { + await _getScore(); + if (widget.gameType == 1) { + //Normal + _goal = _score + 1; + } + } + + _getScore() async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + if (!prefs.containsKey("score")) { + await prefs.setInt("score", _goal); + } + _score = prefs.getInt("score"); + } + + _updateScore(int score) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + if (score > _score) { + _getScore(); + await prefs.setInt('score', score); + } + } + + @override + void dispose() { + super.dispose(); + } +} diff --git a/lib/Help.dart b/lib/Help.dart new file mode 100644 index 0000000..104a317 --- /dev/null +++ b/lib/Help.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'utils.dart'; +import 'package:flutter/services.dart'; + +class Help extends StatelessWidget { + @override + Widget build(BuildContext context) { + SystemChrome.setEnabledSystemUIOverlays([]); + return Scaffold( + body: Container( + color: Theme.of(context).backgroundColor, + child: ListView( + children: [ + Center( + child: Padding( + padding: EdgeInsets.all(15.0), + child: Text("Learn", + style: TextStyle( + fontSize: 48, + color: Theme.of(context).textTheme.bodyText1.color)), + )), + helpElement( + "!", + "The ! or factorial is a single number operation.\nUnlike addition where you need two numbers, factorial only needs one.\n n! is equal to all the numbers from 1 to n multiplied.\n For example, 4! = 1 x 2 x 3 x 4 = 24", + context), + helpElement( + "²", + "\"²\" or the squared operations is a single number operation.\nUnlike subtraction where you need two numbers, squaring only needs one.\nSquaring is part of a type of operations called exponentials.\nn² is equal to the number times it self.\nFor example, 4² = 4 x 4 = 16.\nIn general, an exponential multiplies the number by itself however many times the little number says.\nFor example, 4³ = 4 x 4 x 4 = 64.", + context), + helpElement( + "^", + "The \"^\" is the symbol for exponentials.\nIt is a lot simpler to write a carat then a little number for computers, so we use the carat.\nThe number after the carat works just like the little number.\nFor example, 4^2 = 4² = 4 x 4 = 16 and 4^3 = 4³ = 4 x 4 x 4 = 64.", + context), + helpElement( + "√", + "The √ or square root symbol is the opposite of the ² symbol.\nUnlike multiplication where you need two numbers, the square root only needs one.\nThe √ asks what number can be multiplied by itself to equal n.\nFor example √4 = 2 because 2² = 2 x 2 = 4", + context) + ], + ), + ), + ); + } +} diff --git a/lib/MathEngine.dart b/lib/MathEngine.dart index 6cd4d7c..7fb5e20 100644 --- a/lib/MathEngine.dart +++ b/lib/MathEngine.dart @@ -1,191 +1,244 @@ -import 'dart:collection'; -import 'dart:math'; -//TODO: Implement place value multiplication for numbers greater than 9 -String postfix(String equation) { - var operatorPrecedenceInStack = { - "(": 0, - "!": 7, - "²": 5, - "√": 5, - "x": 4, - "÷": 4, - "+": 2, - "-": 2 - }; - var operatorPrecedenceToStack = { - "(": 10, - "!": 8, - "²": 6, - "√": 6, - "x": 3, - "÷": 3, - "+": 1, - "-": 1 - }; - - ListQueue operators = new ListQueue(); //Functioning as a queue - ListQueue output = new ListQueue(); //Functioning as a stack - //Cleaning input - equation = equation.replaceAll(" ", ""); - - //Iterating over equation - while (equation.length > 0) { - int numIndex = 0; - //Keep increasing number range until failure - while (numIndex + 1 <= equation.length && double.tryParse(equation.substring(0, numIndex + 1)) != null) { - numIndex++; - } - - if (numIndex != 0) { //Substring represents a number and not an operation - //Queue push - //Add the number to the end of the output list - output.addLast(equation.substring(0, numIndex)); - //Add a space - output.addLast(" "); - //Remove the first string from the equation (SIDE EFFECT) - //Truncation - equation = equation.substring(numIndex); - } else { - //For the first operator - if (operators.isEmpty) { - //Stack push - operators.addFirst(equation.substring(0, 1)); - //Remove the first character from the equation (SIDE EFFECT) - equation = equation.substring(1); - } else { //If not the first operator - //If its a closing parenthesis - if (equation.substring(0, 1) == ")") { - do { - output.addLast(operators.removeFirst()); - } - while (operators.first != "("); - operators.removeFirst(); - //Remove the first string from the equation (SIDE EFFECT) - equation = equation.substring(1); - continue; - } - if (operatorPrecedenceToStack[equation.substring(0, 1)] > operatorPrecedenceInStack[operators.first]) { - //Stack push - operators.addFirst(equation.substring(0, 1)); - //Remove the first string from the equation (SIDE EFFECT) - equation = equation.substring(1); - } else { - while (operatorPrecedenceToStack[equation.substring(0, 1)] < operatorPrecedenceInStack[operators.first] && operators.isNotEmpty) { - - //Pop all operators with higher precedence to the output - output.addLast(operators.removeFirst()); - //Space after operators - output.addLast(" "); - if (operators.isEmpty) { - break; - } - } - operators.addFirst(equation.substring(0, 1)); - //Remove the first string from the equation (SIDE EFFECT) - equation = equation.substring(1); - } - } - } - } - String out = ""; - while (operators.isNotEmpty) { - output.addLast(operators.removeFirst()); - } - while (output.isNotEmpty) { - out += output.removeFirst(); - } - print(out); - return out; -} - - - -double calculatePostfix(String equation) { - ListQueue terms = new ListQueue(); //Functioning as a stack - int symbolIndex = 0; - //print(equation); - //Convert equation to array - List < String > eq = equation.split(" "); - ListQueue < String > operations = new ListQueue < String > (); - - for (int i = 0; i < eq.length; i++) { - var el = eq[i]; - if (double.tryParse(el) != null) { - terms.addLast(double.tryParse(el)); - } else { - operations.addLast(el); - } - } - - var symbol; - - int iterCount = operations.length; - - for (int j = 0; j < iterCount; j++) { - - - var symbol = operations.removeFirst(); - switch (symbol) { - case "x": - double t1 = terms.removeLast(); - double t2 = terms.removeLast(); - terms.addLast(t1 * t2); - break; - case "÷": - double t1 = terms.removeLast(); - double t2 = terms.removeLast(); - if (t1 < t2) { - terms.addLast(t2 / t1); - } else { - terms.addLast(t1 / t2); - } - break; - case "+": - double t1 = terms.removeLast(); - double t2 = terms.removeLast(); - terms.addLast(t1 + t2); - break; - case "-": - double t2 = terms.removeLast(); - double t1 = terms.removeLast(); - if (t2 > t1) { - terms.addLast(t2 - t1); - } else { - terms.addLast(t1 - t2); - } - break; - case "√": - double t = terms.removeLast(); - terms.addLast(sqrt(t).toDouble()); - break; - case "²": - double t = terms.removeLast(); - terms.addLast(t * t); - break; - case "!": - double t = terms.removeLast(); - terms.addLast(factorial(t)); - break; - } - - } - return terms.removeLast(); - -} - -double factorial(double f) { - if (f == 0) { - return 1.0; - } - return f * factorial(f - 1); -} - -double mathEngine(String s) { - //print(postfix(s)); - return calculatePostfix(postfix(s)); -} - - -void main() { - print(mathEngine("22+22+4+78")); -} \ No newline at end of file +import 'dart:collection'; +import 'dart:math'; + +String postfix(String equation) { + var operatorPrecedenceInStack = { + "(": 0, + "!": 7, + "²": 5, + "√": 5, + "x": 4, + "÷": 4, + "+": 2, + "-": 2 + }; + var operatorPrecedenceToStack = { + "(": 10, + "!": 8, + "²": 6, + "√": 6, + "x": 3, + "÷": 3, + "+": 1, + "-": 1 + }; + + ListQueue operators = new ListQueue(); //Functioning as a queue + ListQueue output = new ListQueue(); //Functioning as a stack + //Cleaning input + equation = equation.replaceAll(" ", ""); + + //Iterating over equation + while (equation.length > 0) { + int numIndex = 0; + //Keep increasing number range until failure + while (numIndex + 1 <= equation.length && + double.tryParse(equation.substring(0, numIndex + 1)) != null) { + numIndex++; + } + + if (numIndex != 0) { + //Substring represents a number and not an operation + //Queue push + //Add the number to the end of the output list + output.addLast(equation.substring(0, numIndex)); + //Add a space + output.addLast(" "); + //Remove the first string from the equation (SIDE EFFECT) + //Truncation + equation = equation.substring(numIndex); + } else { + //For the first operator + if (operators.isEmpty) { + //Stack push + operators.addFirst(equation.substring(0, 1)); + //Remove the first character from the equation (SIDE EFFECT) + equation = equation.substring(1); + } else { + //If not the first operator + //If its a closing parenthesis + if (equation.substring(0, 1) == ")") { + do { + output.addLast(operators.removeFirst()); + output.addLast(" "); + } while (operators.first != "("); + operators.removeFirst(); + //Remove the first string from the equation (SIDE EFFECT) + equation = equation.substring(1); + continue; + } + if (operatorPrecedenceToStack[equation.substring(0, 1)] > + operatorPrecedenceInStack[operators.first]) { + //Stack push + operators.addFirst(equation.substring(0, 1)); + //Remove the first string from the equation (SIDE EFFECT) + equation = equation.substring(1); + } else { + while (operatorPrecedenceToStack[equation.substring(0, 1)] < + operatorPrecedenceInStack[operators.first] && + operators.isNotEmpty) { + //Pop all operators with higher precedence to the output + output.addLast(operators.removeFirst()); + //Space after operators + output.addLast(" "); + if (operators.isEmpty) { + break; + } + } + operators.addFirst(equation.substring(0, 1)); + //Remove the first string from the equation (SIDE EFFECT) + equation = equation.substring(1); + } + } + } + } + String out = ""; + while (operators.isNotEmpty) { + output.addLast(operators.removeFirst()); + } + while (output.isNotEmpty) { + out += output.removeFirst(); + } + return out; +} + +double calculate(String e) { + ListQueue stack = new ListQueue(); + ListQueue equation = new ListQueue.from(e.split(" ")); + + print(equation); + + int size = equation.length; + + for (int i = 0; i < size; i++) { + var element = equation.removeFirst(); + if (double.tryParse(element) != null) { + stack.addLast(double.tryParse(element)); + } else { + switch (element) { + case '+': + double term1 = stack.removeFirst(); + double term2 = stack.removeFirst(); + stack.addLast(term1 + term2); + break; + case '-': + double term1 = stack.removeFirst(); + double term2 = stack.removeFirst(); + stack.addLast(term1 - term2); + break; + case 'x': + double term1 = stack.removeFirst(); + double term2 = stack.removeFirst(); + stack.addLast(term1 * term2); + break; + case '÷': + double term1 = stack.removeFirst(); + double term2 = stack.removeFirst(); + stack.addLast(term1 / term2); + break; + case '√': + double term1 = stack.removeLast(); + stack.addLast(sqrt(term1).toDouble()); + break; + case '!': + double term1 = stack.removeFirst(); + stack.addLast(factorial(term1)); + break; + case '²': + double term1 = stack.removeFirst(); + stack.addLast(term1 * term1); + break; + case '^': + double term1 = stack.removeFirst(); + double term2 = stack.removeFirst(); + stack.addLast(pow(term1, term2)); + break; + } + } + print(stack); + } + + return stack.removeFirst(); +} + +double calculatePostfix(String equation) { + ListQueue terms = new ListQueue(); //Functioning as a stack + int symbolIndex = 0; + //print(equation); + //Convert equation to array +// ListQueue eq = ListQueue.from(equation.split(" ")); + List eq = equation.split(" "); + ListQueue operations = new ListQueue(); + for (int i = 0; i < eq.length; i++) { + var el = eq[i]; + if (double.tryParse(el) != null) { + terms.addLast(double.tryParse(el)); + } else { + operations.addLast(el); + } + } + + var symbol; + + int iterCount = operations.length; + + for (int j = 0; j < iterCount; j++) { + var symbol = operations.removeFirst(); + switch (symbol) { + case "x": + double t1 = terms.removeLast(); + double t2 = terms.removeLast(); + terms.addFirst(t1 * t2); + break; + case "÷": + double t1 = terms.removeLast(); + double t2 = terms.removeLast(); + if (t1 < t2) { + terms.addFirst(t2 / t1); + } else { + terms.addFirst(t1 / t2); + } + break; + case "+": + double t1 = terms.removeLast(); + double t2 = terms.removeLast(); + terms.addFirst(t1 + t2); + break; + case "-": + double t2 = terms.removeLast(); + double t1 = terms.removeLast(); + if (t2 > t1) { + terms.addFirst(t2 - t1); + } else { + terms.addFirst(t1 - t2); + } + break; + case "√": + double t = terms.removeLast(); + terms.addFirst(sqrt(t).toDouble()); + break; + case "²": + double t = terms.removeLast(); + terms.addFirst(t * t); + break; + case "!": + double t = terms.removeLast(); + terms.addFirst(factorial(t)); + break; + } + } + return terms.removeLast(); +} + +double factorial(double f) { + if (f == 0) { + return 1.0; + } + return f * factorial(f - 1); +} + +double mathEngine(String s) { + //print(postfix(s)); + return calculate(postfix(s)); +} + diff --git a/lib/MathString.dart b/lib/MathString.dart deleted file mode 100644 index 5066316..0000000 --- a/lib/MathString.dart +++ /dev/null @@ -1,198 +0,0 @@ -void main() { - print(parseEquation("4x4")); - print(parseEquation("(4x4)")); - print(parseEquation("16÷16")); - print(parseEquation("(4x4)÷(4x4)")); - //print(parseEquation("4+4-√4-√4")); - print(parseEquation("(4+4)-(4+4)")); - -} - -int parseEquation(String equation) { - var values = []; - int val = 0; - if (!equation.contains("(")) { - return oop(equation); - } - while (equation.contains('(')) { - values.add(oop(equation.substring(equation.indexOf('(')+1, equation.indexOf(')')))); - var temp = values[values.length-1]; - equation = equation.replaceRange(equation.indexOf('('), equation.indexOf(')')+1,"$temp"); - } - if(int.tryParse(equation) == null) { - return parseEquation(equation); - } else { - for (int i = 0; i < values.length; i++) { - val += values[i]; - } - return val; - } - -} - -int calculate(int opIndex, String subEquation) { - //Remove all spaces - subEquation = subEquation.replaceAll(" ",""); - //Value to be returned - int val = int.parse(subEquation.substring(0,opIndex)); - //Iterate through the subEquation performing operations as seen - while(subEquation.length >= 1) { - switch (subEquation.substring(0,1)) { - case '÷': - val ~/= int.parse(subEquation.substring(opIndex-1)); - break; - case 'x': - val *= int.parse(subEquation.substring(opIndex)); - break; - case '+': - val += int.parse(subEquation.substring(opIndex)); - break; - case '-': - val -= int.parse(subEquation.substring(opIndex)); - break; - } - //Remove the first character in the equation - subEquation = subEquation.substring(1); - } - - //Return the computed value - return val; -} - -int oop(String subEquation) { - var values = []; - int val = 0; - while (subEquation.contains('\u221a')) { - subEquation = subEquation.replaceRange(subEquation.indexOf('\u221a'), subEquation.indexOf('\u221a')+2,"2"); - } - subEquation = oopPair(subEquation,"\u00F7", "x"); - subEquation = oopPair(subEquation,"+", "-"); - return int.parse(subEquation); -} - -List digOp(String op, String equation) { - List vals = []; - int startIndex = 1; - int opIndex = equation.indexOf(op); - int endIndex = opIndex + 1; - if (opIndex - 2 >= 0 && int.tryParse(equation.substring(opIndex -2, opIndex)) != null) { - startIndex = opIndex - 2; - } - if (opIndex + 3 <= equation.length && int.tryParse(equation.substring(opIndex+1, opIndex+3)) != null) { - endIndex = opIndex + 3; - } - return [startIndex, endIndex]; -} -bool isDoubleDigit(String s, int index) { - if (int.tryParse(s.substring(index, index+3)) != null) { - return true; - } - return false; -} - -int calculate2(String subEquation) { - //Remove all spaces - subEquation = subEquation.replaceAll(" ",""); - //Value to be returned - int val; - //Array of values for order of operations - var values = []; - //If the first number is two digits - if (int.tryParse(subEquation.substring(0,2)) != null) { - val = int.parse(subEquation.substring(0,2)); - } - else { - val = int.parse(subEquation.substring(0,1)); - } - //Iterate through the subEquation performing operations as seen - while(subEquation.length >= 1) { - switch (subEquation.substring(0,1)) { - case '/': - val ~/= int.parse(subEquation.substring(1,2)); - subEquation = subEquation.substring(1); - break; - case 'x': - val *= int.parse(subEquation.substring(1,2)); - subEquation = subEquation.substring(1); - break; - case '+': - val += int.parse(subEquation.substring(1,2)); - subEquation = subEquation.substring(1); - break; - case '-': - val -= int.parse(subEquation.substring(1,2)); - subEquation = subEquation.substring(1); - break; - } - //Remove the first character in the equation - subEquation = subEquation.substring(1); - } - - //Return the computed value - return val; -} - -String oopPair(String subEquation, String char1, String char2) { - int temp; - while(subEquation.contains(char1) || subEquation.contains(char2)) { - if (subEquation.contains(char2)) { - if (subEquation.contains(char1)) { - if(subEquation.indexOf(char2) < subEquation.indexOf(char1)) { - if (subEquation.length > 3) { - List indeces = digOp(char2, subEquation); - temp = calculate(subEquation.indexOf(char2), subEquation.substring(indeces[0], indeces[1])); - subEquation = subEquation.replaceRange(indeces[0],indeces[1],"$temp"); - } else { - temp = calculate2(subEquation.substring(subEquation.indexOf(char2)-1, subEquation.indexOf(char2)+2)); - subEquation = subEquation.replaceRange(subEquation.indexOf(char2)-1, subEquation.indexOf(char2)+2,"$temp"); - } - } - else { - if (subEquation.length > 3) { - List indeces = digOp(char1, subEquation); - temp = calculate(subEquation.indexOf(char1), subEquation.substring(indeces[0], indeces[1])); - subEquation = subEquation.replaceRange(indeces[0],indeces[1],"$temp"); - } else { - temp = calculate2(subEquation.substring(subEquation.indexOf(char1)-1, subEquation.indexOf(char1)+2)); - subEquation = subEquation.replaceRange(subEquation.indexOf(char1)-1, subEquation.indexOf(char1)+2,"$temp"); - } - } - } - else { - if (subEquation.length > 3) { - List indeces = digOp(char2, subEquation); - - temp = calculate(subEquation.indexOf(char2), subEquation.substring(indeces[0], indeces[1])); - subEquation = subEquation.replaceRange(indeces[0],indeces[1],"$temp"); - } else { - temp = calculate2(subEquation.substring(subEquation.indexOf(char2)-1, subEquation.indexOf(char2)+2)); - subEquation = subEquation.replaceRange(subEquation.indexOf(char2)-1, subEquation.indexOf(char2)+2,"$temp"); - } - } - } - else { - if (subEquation.length > 3) { - List indeces = digOp(char1, subEquation); - temp = calculate(subEquation.indexOf(char1), subEquation.substring(indeces[0], indeces[1])); - subEquation = subEquation.replaceRange(indeces[0],indeces[1],"$temp"); - } else { - temp = calculate2(subEquation.substring(subEquation.indexOf(char1)-1, subEquation.indexOf(char1)+2)); - subEquation = subEquation.replaceRange(subEquation.indexOf(char1)-1, subEquation.indexOf(char1)+2,"$temp"); - } - } - } - return subEquation; -} -String regex(String string) { - RegExp re = new RegExp('\\d{0,2}'); - Iterable terms = re.allMatches(string); - int startIndex = terms.first.start; - int endIndex = terms.last.end; - return string.substring(startIndex, endIndex); -} - -Iterable regex1(String string) { - RegExp re = new RegExp('\\d{0,2}'); - Iterable terms = re.allMatches(string); - return terms; -} \ No newline at end of file diff --git a/lib/Menu.dart b/lib/Menu.dart new file mode 100644 index 0000000..4231034 --- /dev/null +++ b/lib/Menu.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'utils.dart'; +import 'Themes.dart'; +import 'package:flutter/services.dart'; + +class Menu extends StatelessWidget { + @override + Widget build(BuildContext context) { + SystemChrome.setEnabledSystemUIOverlays([]); + return FutureBuilder( + future: Future.delayed(Duration(seconds: minTime), () => true), + builder: (BuildContext context, AsyncSnapshot snapshot) { + Widget _body; + if (snapshot.hasData) { + _body = Container( + color: Theme.of(context).backgroundColor, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Image(image: AssetImage(logos[theme]), height: 200.0), + Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: EdgeInsets.symmetric(vertical: 15.0), + child: newButton( + "Play", + () => Navigator.of(context).pushNamed('Play'), + context), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 15.0), + child: newButton( + "Arcade", + () => Navigator.of(context).pushNamed('Arcade'), + context), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 15.0), + child: newButton( + "Learn", + () => Navigator.of(context).pushNamed('Help'), + context), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 15.0), + child: newButton( + "About", + () => Navigator.of(context).pushNamed('About'), + context), + ), + ], + ) + ], + ), + ); + } else { + _body = new Scaffold( + backgroundColor: Theme.of(context).backgroundColor, + body: Container( + color: Theme.of(context).backgroundColor, + child: Center( + child: Image( + image: AssetImage(logosLoading[theme]), + height: 200.0), + ))); + } + return _body; + }); + } +} diff --git a/lib/Old UI.dart b/lib/Old UI.dart index 84b4d38..ce6b1b5 100644 --- a/lib/Old UI.dart +++ b/lib/Old UI.dart @@ -1,46 +1,46 @@ -import 'package:flutter/material.dart'; -Widget UI() {return Row( -children: [ -Expanded ( -flex: 3, -child: Padding( -padding: EdgeInsets.only(left: 10, right: 10), -child: RaisedButton( -color: Color(0xffEE6E48), -shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)), -onPressed: _four, child: Text("4", style: TextStyle(fontSize: 25, color: Color(0xff565C5C))),padding: EdgeInsets.all(11.5),)), -), -Expanded ( -flex: 3, -child: Padding( -padding: EdgeInsets.only(left: 10, right: 10), -child: RaisedButton( -color: Color(0xffEE6E48), -shape: RoundedRectangleBorder(borderRadius: -BorderRadius.circular(30)), -onPressed: _equals, -child: Text("=", style: TextStyle(fontSize: 28, color: Color(0xff565C5C)),), -padding: EdgeInsets.all(10),)) -), -], -mainAxisAlignment: MainAxisAlignment.spaceEvenly -), -Row(children: [ -RaisedButton(color: Color(0xffCCD2C6), shape: CircleBorder(), onPressed: _plus, child: Text("+", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), -RaisedButton(color: Color(0xffCCD2C6), shape: CircleBorder(), onPressed: _minus, child: Text("-", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), -RaisedButton(color: Color(0xffCCD2C6), shape: CircleBorder(), onPressed: _backspace, child: Text("DEL", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), -],mainAxisAlignment: MainAxisAlignment.spaceEvenly,), -Row(children: [ -RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _mult, child: Text("x", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), -RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _div, child: Text("\u00F7", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), -RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _clear, child: Text("C", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), - -],mainAxisAlignment: MainAxisAlignment.spaceEvenly,), - -Row(children: [ -RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _sqrt, child: Text("\u221a", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), -RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _openParen, child: Text("(" , style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), -RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _closeParen, child: Text(")", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), -],mainAxisAlignment: MainAxisAlignment.spaceEvenly,), -], +import 'package:flutter/material.dart'; +Widget UI() {return Row( +children: [ +Expanded ( +flex: 3, +child: Padding( +padding: EdgeInsets.only(left: 10, right: 10), +child: RaisedButton( +color: Color(0xffEE6E48), +shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)), +onPressed: _four, child: Text("4", style: TextStyle(fontSize: 25, color: Color(0xff565C5C))),padding: EdgeInsets.all(11.5),)), +), +Expanded ( +flex: 3, +child: Padding( +padding: EdgeInsets.only(left: 10, right: 10), +child: RaisedButton( +color: Color(0xffEE6E48), +shape: RoundedRectangleBorder(borderRadius: +BorderRadius.circular(30)), +onPressed: _equals, +child: Text("=", style: TextStyle(fontSize: 28, color: Color(0xff565C5C)),), +padding: EdgeInsets.all(10),)) +), +], +mainAxisAlignment: MainAxisAlignment.spaceEvenly +), +Row(children: [ +RaisedButton(color: Color(0xffCCD2C6), shape: CircleBorder(), onPressed: _plus, child: Text("+", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), +RaisedButton(color: Color(0xffCCD2C6), shape: CircleBorder(), onPressed: _minus, child: Text("-", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), +RaisedButton(color: Color(0xffCCD2C6), shape: CircleBorder(), onPressed: _backspace, child: Text("DEL", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), +],mainAxisAlignment: MainAxisAlignment.spaceEvenly,), +Row(children: [ +RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _mult, child: Text("x", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), +RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _div, child: Text("\u00F7", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), +RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _clear, child: Text("C", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), + +],mainAxisAlignment: MainAxisAlignment.spaceEvenly,), + +Row(children: [ +RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _sqrt, child: Text("\u221a", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), +RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _openParen, child: Text("(" , style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), +RaisedButton(color: Color(0xffCCD2C6),shape: CircleBorder(), onPressed: _closeParen, child: Text(")", style: TextStyle(fontSize: 24, color: Color(0xff565C5C)),), padding: EdgeInsets.all(15),), +],mainAxisAlignment: MainAxisAlignment.spaceEvenly,), +], )} \ No newline at end of file diff --git a/lib/Themes.dart b/lib/Themes.dart new file mode 100644 index 0000000..00f5d9e --- /dev/null +++ b/lib/Themes.dart @@ -0,0 +1,163 @@ +import 'package:flutter/material.dart'; +import 'dart:async'; +import 'package:shared_preferences/shared_preferences.dart'; + +int theme; + +Future getTheme() async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + if (!prefs.containsKey("theme")) { + await prefs.setInt("theme", 0); + } + theme = prefs.getInt("theme"); + return theme; +} + +List themes = [theme9]; +List logosLoading = ["assets/images/logo1.gif"]; + +List logos = ["assets/images/logo1.png"]; + +//TI Datamouth 2500 +ThemeData theme1 = new ThemeData( + accentColor: Color(0xffCED4CC), + //Buttons + backgroundColor: Color(0xffCED4CC), + //Background + + primaryColor: Color(0xffF6AC2D), + //Logo and Accents + primaryColorDark: Color(0xff8D9687), + //Window color + textTheme: TextTheme( + bodyText1: TextStyle(color: Color(0xff565C5C)), + headline3: TextStyle(color: Color(0xff565C5C)), + headline4: TextStyle(color: Color(0xff565C5C)))); + +//TI 81 +ThemeData theme2 = new ThemeData( + accentColor: Color(0xff1F3037), + backgroundColor: Color(0xff172432), + primaryColor: Color(0xff226BC1), + primaryColorDark: Color(0xff83CCDF), + textTheme: TextTheme( + bodyText1: TextStyle(color: Color(0xff35A2DF)), + headline3: TextStyle(color: Colors.white), + headline4: TextStyle(color: Color(0xff172432)), + ), +); + +//Snow Storm +ThemeData theme3 = new ThemeData( + accentColor: Color(0xff3b3b37), + //Buttons + backgroundColor: Color(0xff2b2b2b), + //Background + primaryColor: Color(0xff004D0D), + //Logo and =s + primaryColorDark: Color(0xff004D0D), + //Window + textTheme: TextTheme( + bodyText1: TextStyle(color: Color(0xff8a8a81)), //Text + headline3: TextStyle(color: Color(0xff219e21)), //Scores + headline4: TextStyle(color: Color(0xff219e21)), //Value + ), +); + +//Unmarked Ocean +ThemeData theme4 = new ThemeData( + accentColor: Color(0xff144B59), + //Buttons + backgroundColor: Color(0xff3B6571), + //Background + primaryColor: Color(0xff144B59), + //Logo and =s + primaryColorDark: Color(0xffBDE8E5), + //Window + textTheme: TextTheme( + bodyText1: TextStyle(color: Color(0xffBDE8E5)), //Text + headline3: TextStyle(color: Color(0xffBDE8E5)), //Scores + headline4: TextStyle(color: Color(0xff144B59)), //Value + ), +); + +ThemeData theme5 = new ThemeData( + accentColor: Color(0xff9C1125), + //Buttons + backgroundColor: Color(0xff800000), + //Background + primaryColor: Color(0xff9C1125), + //Logo and =s + primaryColorDark: Color(0xff9C1125), + //Window + textTheme: TextTheme( + bodyText1: TextStyle(color: Colors.white), //Text + headline3: TextStyle(color: Colors.white), //Scores + headline4: TextStyle(color: Color(0xffC0C0C0)), //Value + ), +); + +ThemeData theme6 = new ThemeData( + accentColor: Color(0xffEAA021), + //Buttons + backgroundColor: Color(0xffF5C24A), + //Background + primaryColor: Color(0xff504E52), + //Logo and =s + primaryColorDark: Color(0xffEAA021), + //Window + textTheme: TextTheme( + bodyText1: TextStyle(color: Colors.white), //Text + headline3: TextStyle(color: Colors.white), //Scores + headline4: TextStyle(color: Colors.white), //Value + ), +); + +ThemeData theme7 = new ThemeData( + accentColor: Color(0xffD6E9F3), + //Buttons + backgroundColor: Color(0xff282C34), + //Background + primaryColor: Color(0xffE06C75), + //Logo and =s + primaryColorDark: Color(0xffD6E9F3), + //Window + textTheme: TextTheme( + bodyText1: TextStyle(color: Color(0xff55606D)), //Text + headline3: TextStyle(color: Color(0xff55606D)), //Scores + headline4: TextStyle(color: Color(0xff282C34)), //Value + ), +); + +ThemeData theme8 = new ThemeData( + accentColor: Color(0xff919BE5), + //Buttons + backgroundColor: Color(0xff232434), + //Background + primaryColor: Color(0xff6CB49F), + //Logo and =s + primaryColorDark: Color(0xff363E7E), + //Window + textTheme: TextTheme( + bodyText1: TextStyle(color: Color(0xff363E7E)), //Text + headline3: TextStyle(color: Color(0xff919BE5)), //Scores + headline4: TextStyle(color: Color(0xff919BE5)), //Value + ), +); + +//BMO +ThemeData theme9 = new ThemeData( + accentColor: Color(0xffCCFFDC), + //Buttons + backgroundColor: Color(0xff5CB19E), + //Background + primaryColor: Color(0xff6CB49F), + //Logo and =s + primaryColorDark: Color(0xffCCFFDC), + //Window + textTheme: TextTheme( + bodyText1: TextStyle(color: Color(0xff001029)), //Text + headline3: TextStyle(color: Color(0xff001029)), //Scores + headline4: TextStyle(color: Color(0xff5EE177)), //Value + ), +); diff --git a/lib/app_state.dart b/lib/app_state.dart deleted file mode 100644 index 96d2753..0000000 --- a/lib/app_state.dart +++ /dev/null @@ -1,15 +0,0 @@ -class AppState { - bool isLoading; - String user; - - //Constructor - AppState({this.isLoading = false, this.user}); - - //A constructor for when the app is loading - factory AppState.loading() => new AppState(isLoading: true); - - @override - String toString() { - return 'AppState(isLoading: $isLoading, user: $user'; - } -} diff --git a/lib/app_state_container.dart b/lib/app_state_container.dart deleted file mode 100644 index de59bee..0000000 --- a/lib/app_state_container.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'app_state.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'dart:async'; - -class AppStateContainer extends StatefulWidget { - //Container that allows for loading state management - final AppState state; - final Widget child; - - AppStateContainer({ - @required this.child, - this.state, - }); - - //Method to allow universal access to state management - static _AppStateContainerState of(BuildContext context) { - return (context.inheritFromWidgetOfExactType(_InheritedStateContainer) - as _InheritedStateContainer) - .data; - } - - @override - _AppStateContainerState createState() => _AppStateContainerState(); -} - -class _AppStateContainerState extends State { - AppState state; - - @override - void initState() { - super.initState(); - if (widget.state != null) { - state = widget.state; - } else { - state = new AppState.loading(); - startCountdown(); - } - } - - Future startCountdown() async { - const timeOut = const Duration(seconds: 2); - new Timer(timeOut, () { - setState(() { - state.isLoading = false; - }); - }); - } - - @override - Widget build(BuildContext context) { - return new _InheritedStateContainer(data: this, child: widget.child); - } -} - -class _InheritedStateContainer extends InheritedWidget { - //Data to pass down - final _AppStateContainerState data; - - _InheritedStateContainer({ - Key key, - @required this.data, - @required Widget child, - }) : super(key: key, child: child); - - //Method called by default when this widget data is changed - @override - bool updateShouldNotify(InheritedWidget oldWidget) => true; -} diff --git a/lib/audio.dart b/lib/audio.dart index e705019..8adbd83 100644 --- a/lib/audio.dart +++ b/lib/audio.dart @@ -1,24 +1,24 @@ -import 'dart:io'; - -import 'package:audioplayers/audioplayers.dart'; -import 'package:audioplayers/audio_cache.dart'; - -class Audio { - AudioCache audioCache = AudioCache(prefix: 'audio/'); - - /// Plays a single run of the given [file] - Future play(String file, {volume = 1.0}) { - return audioCache.play(file, volume: volume, mode: PlayerMode.LOW_LATENCY); - } - - - /// Prefetch an audio in the cache - Future load(String file) { - return audioCache.load(file); - } - - /// Clears all the audios in the cache - void clearAll() { - audioCache.clearCache(); - } +import 'dart:io'; + +import 'package:audioplayers/audioplayers.dart'; +import 'package:audioplayers/audio_cache.dart'; + +class Audio { + AudioCache audioCache = AudioCache(prefix: 'audio/'); + + /// Plays a single run of the given [file] + Future play(String file, {volume = 1.0}) { + return audioCache.play(file, volume: volume, mode: PlayerMode.LOW_LATENCY); + } + + + /// Prefetch an audio in the cache + Future load(String file) { + return audioCache.load(file); + } + + /// Clears all the audios in the cache + void clearAll() { + audioCache.clearCache(); + } } \ No newline at end of file diff --git a/lib/dataAccess.dart b/lib/dataAccess.dart deleted file mode 100644 index 9008e2f..0000000 --- a/lib/dataAccess.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'dart:async'; -import 'package:sqflite/sqflite.dart'; - -final String listTable = "MonitorLists"; -final String dataTable = "MonitorData"; - -class DataAccess { - static final DataAccess _instance = DataAccess._internal(); - Database _monitorLists; - Database _monitorData; - - factory DataAccess() { - return _instance; - } - - DataAccess._internal(); - - Future open() async { - var databasePath = await getDatabasesPath(); - String listPath = databasePath + "\\mLists.db"; - String dataPath = databasePath + "\\dList.db"; - - _monitorLists = await openDatabase(listPath, version: 1, - onCreate: (Database db, int version) async { - await db.execute(''' - create table MonitorLists ( - id interger primary key autoincrement, - listName text not null, - unit text not null - ); - '''); - }); - - _monitorData = await openDatabase(dataPath, version: 1, - onCreate: (Database db, int version) async { - await db.execute(''' - create table MonitorData ( - id integer primary key autoincrement, - listId integer not null, - value int not null, - date date not null, - foreign key (listId) references MonitorLists(id) - ); - '''); - }); - } - - Future> getLists() async { - var data = await _monitorLists.query("") - } -} \ No newline at end of file diff --git a/lib/db.dart b/lib/db.dart deleted file mode 100644 index 6ab3166..0000000 --- a/lib/db.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'dart:async'; -import 'package:sqflite/sqflite.dart'; - -final String scoreTable = "Score"; - -class DataAccess { - static final DataAccess _instance = DataAccess._internal(); - Database _db; - - factory DataAccess() { - return _instance; - } - - DataAccess._internal(); - - Future open() async { - var databasePath = await getDatabasesPath(); - String path = databasePath + "\td.db"; - - _db = await openDatabase(path, version: 1, - onCreate: (Database db, int version) async { - await db.execute(''' - create table $scoreTable ( - score int default 0 - ); - '''); - }); - } - - Future getScore() async { - var res = await _db.query(scoreTable); - return res[0]; - } - - Future updateScore(int s) async { - return _db.update(scoreTable, s); - } -} diff --git a/lib/main.dart b/lib/main.dart index 921a372..ac8059d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,385 +1,42 @@ -import 'dart:async'; -import 'package:flame/flame.dart'; -import 'package:flutter/material.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'MathEngine.dart'; -import 'package:flutter/services.dart'; -import 'package:splashscreen/splashscreen.dart'; - -void main() => runApp(MyApp()); - -class MyApp extends StatelessWidget { - // This widget is the root of your application. - @override - Widget build(BuildContext context) { - - return MaterialApp( - title: 'Four Fours', - debugShowCheckedModeBanner: false, - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: MyHomePage(title: 'Four Fours'), - ); - } -} - -class MyHomePage extends StatefulWidget { - MyHomePage({Key key, this.title}) : super(key: key); - final String title; - - @override - _MyHomePageState createState() => _MyHomePageState(); -} - -class _MyHomePageState extends State { - int _counter = 4; - String _value = ""; - int _goal = 0; - int _score; - int _computation; - Widget _body; - bool _hide = false; - String _alert = ""; - Color orange = Color(0xffEE6E48); - Color darkGrey = Color(0xff565C5C); - Color lightGrey = Color(0xffCCD2C6); - Timer _timer; - - @override - void initState() { - super.initState(); - _body = loadingPage(); - } - - void _plus() { - setState(() { - _value+= "+"; - }); - } - - void correctSound() { - Flame.audio.play("correct.mp3"); - } - - void squared() { - setState(() { - _value += '\u00B2'; - }); - } - - void _factorial() { - setState(() { - _value += '!'; - }); - } - - void _exp() { - setState(() { - _value+= "^"; - }); - } - - void _squared() { - setState(() { - _value += "²"; - }); - } - - void _minus() { - setState(() { - _value+="-"; - }); - } - - void _div() { - setState(() { - _value+="\u00F7"; - }); - } - - void _mult() { - setState(() { - _value+="x"; - }); - } - - void _sqrt() { - setState(() { - _value += '\u221a'; - }); - } - - void _openParen() { - setState(() { - _value+="("; - }); - } - - void _closeParen() { - setState(() { - _value+=")"; - }); - } - - void _decimal() { - setState(() { - _value += "."; - }); - } - - void _clear() { - setState(() { - _value = ""; - _counter = 4; - }); - } - - void _equals() { - setState(() { - _computation = mathEngine(_value).round(); - if (_computation == _goal && _counter == 0) { - _goal++; - correctSound(); - _updateScore(_goal); - _clear(); - } else { - if(_counter != 0) { - _alert="You must use 4 fours"; - _value += "=$_computation"; - } else { - _alert = "Try Again!"; - _value += "=$_computation"; - } - } - }); - } - - void _four() { - setState(() { - if (_counter == 0) { - _alert = "Only 4 Fours allowed!!"; - } else { - _value += "4"; - _counter--; - } - }); - } - - void _backspace() { - setState(() { - int len = _value.length; - if (int.tryParse(_value.substring(len-1)) != null) { - _counter++; - } - _value = _value.substring(0, len-1); - }); - } - - void hide() { - setState(() { - while(true) { - if (!(_score == null)) { - _hide = false; - - break; - } else { - _hide = true; - } - } - }); - } - - void startTimer(int t) { - _timer = Timer(new Duration(seconds: t), hide); - } - - - @override - Widget build(BuildContext context) { - Flame.audio.load('correct.mp3'); - _loadPage(); - SystemChrome.setEnabledSystemUIOverlays([]); - return new Scaffold( - backgroundColor: Color(0xffCED4CC), - body: _body - ); - startTimer(4); -// return new AnimatedOpacity( -// opacity: _hide ? 0.0 : 1.0, -// duration: Duration(milliseconds: 500), -// child: SplashScreen( -// seconds: 4, -// navigateAfterSeconds: new Scaffold( -// backgroundColor: Color(0xffCED4CC), -// body: _body -// ), -// image: new Image(image: AssetImage("assets/images/logo.gif")), -// backgroundColor: Color(0xffCED4CC), -// loaderColor: orange, -// ) -// ); - } - - Widget genRow(String t1, Function f1, String t2, Function f2, String t3, - Function f3) { - return Row( - children: [ - newButton(t1, f1, lightGrey, darkGrey), - newButton(t2, f2, lightGrey, darkGrey), - newButton(t3, f3, lightGrey, darkGrey), - ], - mainAxisAlignment: MainAxisAlignment.spaceAround, - ); - } - - Widget newButton(String text, Function f, Color backgroundColor, - Color textColor) { - return RaisedButton(color: backgroundColor, - shape: RoundedRectangleBorder( - borderRadius: new BorderRadius.circular(18.0)), - onPressed: f, - child: Text("$text", style: TextStyle(fontSize: 24, color: textColor),), - padding: EdgeInsets.all(15),); - } - - Widget loadingPage() { - return new Center( - child: Column( - children: [ - CircularProgressIndicator(), -// Image(image: AssetImage("assets/images/logo.gif")), - ], - ) - ); - } - - Widget gamePage() { - return Padding( - padding: EdgeInsets.only(top: MediaQuery - .of(context) - .size - .height * 0.08), - child: Center( - child: Column( -// mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - children: [ - Column( - children: [ - Text("Goal:"), - Text('$_goal', - style: Theme.of(context).textTheme.display2,), - ], - ), - Column( - children: [ - Text("Highscore:"), - Text('$_score', - style: Theme - .of(context) - .textTheme - .display2,), - ], - ), - ], - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - ), - - - Container( - color: Colors.transparent, - child: Container( - child: SizedBox( - width: MediaQuery - .of(context) - .size - .width * 0.9, - height: MediaQuery - .of(context) - .size - .height * 0.1, - child: Center( - child: Text( - '$_value', - style: Theme - .of(context) - .textTheme - .display1, - textAlign: TextAlign.center, - ), - ) - ), - decoration: BoxDecoration( - color: Color(0xff8D9687), - borderRadius: BorderRadius.circular(MediaQuery - .of(context) - .size - .width * 0.04) - ), - ) - - ), - - Text( - "Fours Remaining: $_counter", - textAlign: TextAlign.center, - ), - -// Text('$_alert'), - SizedBox( - height: 500, - width: MediaQuery - .of(context) - .size - .width * 0.88, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - genRow("²", _squared, ".", _decimal, "<", _backspace), - genRow("+", _plus, "-", _minus, "(", _openParen), - genRow("4", _four, "=", _equals, "C", _clear), - genRow("÷", _div, "x", _mult, ")", _closeParen), - genRow("!", _factorial, "^", _exp, "√", _sqrt) - ], - ), - ), - - ] - ) - ) - ); - } - - _loadPage() async { - await _getScore(); - setState(() { - _body = gamePage(); - }); - - } - - _getScore() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - if (!prefs.containsKey("score")) { - await prefs.setInt("score", _goal); - } - _score = prefs.getInt("score"); - } - - _updateScore(int score) async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - if (score > _score) { - _getScore(); - await prefs.setInt('score', score); - await prefs.commit(); - } - } - - @override - void dispose() { - super.dispose(); - _timer.cancel(); - } -} +import 'package:flutter/material.dart'; + +import 'About.dart'; +import 'Game.dart'; +import 'Menu.dart'; +import 'Help.dart'; +import 'Themes.dart'; + +void main() => runApp(MyApp()); + +class MyApp extends StatefulWidget { + // This widget is the root of your application. + @override + _MyAppState createState() => _MyAppState(); +} + +class _MyAppState extends State { + @override + Widget build(BuildContext context) { + return FutureBuilder( + future: getTheme(), + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.hasData) { + return MaterialApp( + title: 'Four Fours', + debugShowCheckedModeBanner: false, + theme: themes[theme], + home: Menu(), + routes: { + 'Play': (BuildContext context) => GamePage(gameType: 1), + 'Arcade': (BuildContext context) => GamePage(gameType: 2), + 'Help': (BuildContext context) => Help(), + 'About': (BuildContext context) => About() + }, + ); + } else { + return Container(); + } + }, + ); + } +} diff --git a/lib/storage.dart b/lib/storage.dart deleted file mode 100644 index aacbc8e..0000000 --- a/lib/storage.dart +++ /dev/null @@ -1,14 +0,0 @@ -String _generateKey -( - -String id = 1, - String -key) { -return "$id/$key"; -} - -@override -void saveString(String userId, String key, int score) async { - final prefs = await SharedPreferences.getInstance(); - await pres._setString("Highscore", score) -} \ No newline at end of file diff --git a/lib/utils.dart b/lib/utils.dart new file mode 100644 index 0000000..541b867 --- /dev/null +++ b/lib/utils.dart @@ -0,0 +1,50 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; + +int minTime = 4; + +Future launchSite(String url) async { + if (await canLaunch(url)) { + await launch(url); + } else { + throw "Cannot open URL"; + } + return; +} + +Widget newButton(String text, Function f, BuildContext context) { + return RaisedButton( + color: Theme.of(context).accentColor, + shape: + RoundedRectangleBorder(borderRadius: new BorderRadius.circular(18.0)), + onPressed: f, + child: Text( + "$text", + style: TextStyle( + fontSize: 24, color: Theme.of(context).textTheme.bodyText1.color), + ), + padding: EdgeInsets.all(15), + animationDuration: Duration(microseconds: 1), + ); +} + +Widget helpElement(String head, String content, BuildContext context) { + return Padding( + padding: EdgeInsets.all(15.0), + child: Card( + elevation: 0.0, + color: Theme.of(context).backgroundColor, + child: ListTile( + title: Text( + "$head", + style: TextStyle(fontSize: 24), + ), + subtitle: Text( + "$content", + softWrap: true, + style: TextStyle(fontSize: 18), + ), + )), + ); +} diff --git a/pubspec.lock b/pubspec.lock index 880918d..c7fb000 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,56 +7,56 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "2.0.13" args: dependency: transitive description: name: args url: "https://pub.dartlang.org" source: hosted - version: "1.5.2" + version: "1.6.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.4.1" audioplayers: dependency: "direct main" description: name: audioplayers url: "https://pub.dartlang.org" source: hosted - version: "0.13.1" + version: "0.15.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "2.0.0" box2d_flame: dependency: transitive description: name: box2d_flame url: "https://pub.dartlang.org" source: hosted - version: "0.4.4" + version: "0.4.6" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.1.3" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.11" + version: "1.14.12" convert: dependency: transitive description: @@ -70,35 +70,42 @@ packages: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.4" cupertino_icons: dependency: "direct main" description: name: cupertino_icons url: "https://pub.dartlang.org" source: hosted - version: "0.1.2" + version: "0.1.3" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.0" flame: dependency: "direct main" description: name: flame url: "https://pub.dartlang.org" source: hosted - version: "0.15.1" + version: "0.20.2" flare_dart: dependency: transitive description: name: flare_dart url: "https://pub.dartlang.org" source: hosted - version: "1.4.4" + version: "2.3.4" flare_flutter: dependency: transitive description: name: flare_flutter url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" + version: "2.0.3" flutter: dependency: "direct main" description: flutter @@ -110,7 +117,7 @@ packages: name: flutter_svg url: "https://pub.dartlang.org" source: hosted - version: "0.14.0" + version: "0.17.4" flutter_test: dependency: "direct dev" description: flutter @@ -127,7 +134,14 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "2.1.12" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.1" matcher: dependency: transitive description: @@ -148,7 +162,7 @@ packages: name: ordered_set url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "2.0.0" path: dependency: transitive description: @@ -176,14 +190,28 @@ packages: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" - pedantic: + version: "1.6.11" + path_provider_linux: dependency: transitive description: - name: pedantic + name: path_provider_linux url: "https://pub.dartlang.org" source: hosted - version: "1.8.0+1" + version: "0.0.1+1" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4+3" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" petitparser: dependency: transitive description: @@ -191,41 +219,76 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.4.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" + platform_detect: + dependency: transitive + description: + name: platform_detect + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.13" + pub_semver: + dependency: transitive + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.4" quiver: dependency: transitive description: name: quiver url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.1.3" shared_preferences: dependency: "direct main" description: name: shared_preferences url: "https://pub.dartlang.org" source: hosted - version: "0.5.6" + version: "0.5.7+3" shared_preferences_macos: dependency: transitive description: name: shared_preferences_macos url: "https://pub.dartlang.org" source: hosted - version: "0.0.1+3" + version: "0.0.1+10" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.4" shared_preferences_web: dependency: transitive description: name: shared_preferences_web url: "https://pub.dartlang.org" source: hosted - version: "0.1.2+2" + version: "0.1.2+7" sky_engine: dependency: transitive description: flutter @@ -237,14 +300,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" - splashscreen: - dependency: "direct main" - description: - name: splashscreen - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" + version: "1.7.0" stack_trace: dependency: transitive description: @@ -272,7 +328,7 @@ packages: name: synchronized url: "https://pub.dartlang.org" source: hosted - version: "2.1.0+1" + version: "2.2.0" term_glyph: dependency: transitive description: @@ -286,7 +342,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.11" + version: "0.2.15" tiled: dependency: transitive description: @@ -301,13 +357,41 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.6" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "5.4.11" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+7" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.7" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+6" uuid: dependency: transitive description: name: uuid url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.1.0" vector_math: dependency: transitive description: @@ -315,13 +399,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.8" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0" xml: dependency: transitive description: name: xml url: "https://pub.dartlang.org" source: hosted - version: "3.5.0" + version: "3.6.1" sdks: - dart: ">=2.4.0 <3.0.0" - flutter: ">=1.12.13+hotfix.4 <2.0.0" + dart: ">=2.6.0 <3.0.0" + flutter: ">=1.12.13+hotfix.5 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index f3233b1..bc4528f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,80 +1,81 @@ -name: four -description: Four fours game - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1 - -environment: - sdk: ">=2.1.0 <3.0.0" - -dependencies: - audioplayers: ^0.13.0 - path_provider: ^1.1.0 - shared_preferences: ^0.5.6 - splashscreen: ^1.2.0 - flame: ^0.15.1 - flutter: - sdk: flutter - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^0.1.2 - -dev_dependencies: - flutter_test: - sdk: flutter - - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter. -flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages - assets: - - assets/audio/correct.mp3 - - assets/images/logo.gif +name: four +description: Four fours game + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=2.1.0 <3.0.0" + +dependencies: + audioplayers: ^0.15.1 + path_provider: ^1.1.0 + shared_preferences: ^0.5.6 + flame: ^0.20.1 + url_launcher: ^5.4.11 + flutter: + sdk: flutter + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^0.1.2 + +dev_dependencies: + flutter_test: + sdk: flutter + + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages + assets: + - assets/audio/correct.mp3 + - assets/images/logo1.gif + - assets/images/logo1.png diff --git a/test/widget_test.dart b/test/widget_test.dart index ac0c21b..6083cca 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -1,30 +1,30 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility that Flutter provides. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:four/main.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(MyApp()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); -} +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:four/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +}