├── .github └── workflows │ ├── dev.yml │ └── main.yml ├── .gitignore ├── .metadata ├── Flutter Studio Banner.png ├── LICENSE ├── README.md ├── android ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── pi │ │ │ │ └── flutter_studio │ │ │ │ └── MainActivity.java │ │ └── res │ │ │ ├── drawable-hdpi │ │ │ ├── app_launcher_foreground.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-ldpi │ │ │ └── app_launcher_foreground.png │ │ │ ├── drawable-mdpi │ │ │ ├── app_launcher_foreground.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-xhdpi │ │ │ ├── app_launcher_foreground.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-xxhdpi │ │ │ ├── app_launcher_foreground.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-xxxhdpi │ │ │ ├── app_launcher_foreground.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ └── ic_launcher.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets └── images │ ├── app_launcher_icon.png │ ├── app_launcher_icon_legacy.png │ └── flutter_studio_logo.png ├── ios ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── flutter_export_environment.sh ├── Podfile ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ └── contents.xcworkspacedata └── Runner │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── main.m ├── lib ├── bloc │ ├── bloc.dart │ └── provider.dart ├── main.dart ├── material_menu.dart ├── ui │ ├── canvas_dashboard.dart │ ├── components │ │ ├── buttons.dart │ │ ├── screen_background.dart │ │ └── styles.dart │ └── welcome.dart └── utils │ └── colors.dart ├── pubspec.lock ├── pubspec.yaml └── test └── widget_test.dart /.github/workflows/dev.yml: -------------------------------------------------------------------------------- 1 | name: Dev Branch CI 2 | 3 | # Controls when the action will run. Triggers the workflow on push or pull request 4 | # events but only for the master branch 5 | on: 6 | push: 7 | branches: 8 | - dev 9 | pull_request: 10 | branches: 11 | - dev 12 | 13 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 14 | jobs: 15 | # This workflow contains a single job called "build" 16 | build: 17 | # The type of runner that the job will run on 18 | runs-on: windows-latest 19 | 20 | # Steps represent a sequence of tasks that will be executed as part of the job 21 | steps: 22 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 23 | - uses: actions/checkout@v2 24 | 25 | - name: Java Environment Setup 26 | uses: actions/setup-java@v1 27 | with: 28 | java-version: '12.x' 29 | 30 | - name: Flutter Environment Setup 31 | uses: subosito/flutter-action@v1 32 | 33 | - run: flutter pub get 34 | - run: flutter test 35 | - run: flutter build apk 36 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Test, Build and Release APK 4 | 5 | # Controls when the action will run. Triggers the workflow on push or pull request 6 | # events but only for the master branch 7 | on: 8 | push: 9 | branches: [ master ] 10 | pull_request: 11 | branches: [ master ] 12 | 13 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 14 | jobs: 15 | # This workflow contains a single job called "build" 16 | build: 17 | # The type of runner that the job will run on 18 | runs-on: ubuntu-latest 19 | 20 | # Steps represent a sequence of tasks that will be executed as part of the job 21 | steps: 22 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 23 | - uses: actions/checkout@v2 24 | 25 | # Flutter environment setup action 26 | - name: Flutter Environment Setup 27 | uses: subosito/flutter-action@v1.2.0 28 | 29 | # Get necessary packages 30 | - name: Get Packages 31 | run: flutter pub get 32 | 33 | # Runs the defined test cases 34 | - name: Run tests 35 | run: flutter test 36 | 37 | - run: flutter build apk --debug --split-per-abi 38 | - name: Push APK to Release Folder 39 | uses: ncipollo/release-action@v1 40 | with: 41 | artifacts: "build/app/outputs/apk/debug/*.apk" 42 | token: ${{ secrets.ACTIONS_API_TOKEN }} 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # Visual Studio Code related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | .dart_tool/ 24 | .flutter-plugins 25 | .packages 26 | .pub-cache/ 27 | .pub/ 28 | /build/ 29 | 30 | # Android related 31 | **/android/**/gradle-wrapper.jar 32 | **/android/.gradle 33 | **/android/captures/ 34 | **/android/gradlew 35 | **/android/gradlew.bat 36 | **/android/local.properties 37 | **/android/**/GeneratedPluginRegistrant.java 38 | 39 | # iOS/XCode related 40 | **/ios/**/*.mode1v3 41 | **/ios/**/*.mode2v3 42 | **/ios/**/*.moved-aside 43 | **/ios/**/*.pbxuser 44 | **/ios/**/*.perspectivev3 45 | **/ios/**/*sync/ 46 | **/ios/**/.sconsign.dblite 47 | **/ios/**/.tags* 48 | **/ios/**/.vagrant/ 49 | **/ios/**/DerivedData/ 50 | **/ios/**/Icon? 51 | **/ios/**/Pods/ 52 | **/ios/**/.symlinks/ 53 | **/ios/**/profile 54 | **/ios/**/xcuserdata 55 | **/ios/.generated/ 56 | **/ios/Flutter/App.framework 57 | **/ios/Flutter/Flutter.framework 58 | **/ios/Flutter/Generated.xcconfig 59 | **/ios/Flutter/app.flx 60 | **/ios/Flutter/app.zip 61 | **/ios/Flutter/flutter_assets/ 62 | **/ios/ServiceDefinitions.json 63 | **/ios/Runner/GeneratedPluginRegistrant.* 64 | 65 | # Exceptions to above rules. 66 | !**/ios/**/default.mode1v3 67 | !**/ios/**/default.mode2v3 68 | !**/ios/**/default.pbxuser 69 | !**/ios/**/default.perspectivev3 70 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 71 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 88fa7ea4031f5c86225573e58e5558dc4ea1c251 8 | channel: beta 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /Flutter Studio Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/Flutter Studio Banner.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Siddharth Patankar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Test, Build and Release APK](https://github.com/thebuggycoder/flutterstudio/workflows/Test,%20Build%20and%20Release%20APK/badge.svg?branch=master) 2 | 3 | ## Archived 4 | > This project is now archived and is being no longer actively maintained 5 | 6 | 7 | ![Flutter Studio](https://github.com/siddharthpatankar/flutterstudio/blob/master/Flutter%20Studio%20Banner.png?raw=true) 8 | ## Interactive run-time dart code generator app for flutter widgets. 9 | 10 | Flutter Studio is an open source interactive Dart code generator developed in Flutter, the hybrid mobile programming framework based on the Dart language, made by Google. 11 | 12 | Initially developed as an official submission for the first ever Flutter International Hackathon, this project aims to help make flutter as fast and easy to learn as possible for beginners as well as seasoned developers. 13 | 14 | As popularity of flutter keeps on increasing with each new release, and more people are interested to try their hands with this new framework each day. We hope this project can serve as a starting point to all those who are looking to try out flutter, and in due course of time, can evolve into something much more. 15 | 16 | The interactive UI offers a range of widgets to choose from which can be viewed on the canvas board. As the user adds new widgets to the canvas, the corresponding Dart code for the widget tree is seamlessly generated at run time in code preview window. 17 | 18 | This code can be - 19 | - Saved to local device storage as a `.dart` file 20 | - Copied to the clipboard 21 | - Shared via a range of third party apps 22 | 23 | A short demo walkthrough of the app can be found here on [YouTube](https://youtu.be/E7GrLKWOVIY). 24 | 25 | ## Note 26 | We accidentally broke the master branch code! We promise we're working on a fix for it. Meanwhile, please use the [preview](https://github.com/siddharthpatankar/flutterstudio/tree/preview) branch for the lastest stable working code. 27 | 28 | Also, the preview branch version of this app was only prepared for a demo within a short span of 5 hours, and hence for now, only the following basic material widgets are supported - 29 | 1. Default `Scaffold` 30 | 2. Default `AppBar` 31 | 3. `Center` widget 32 | 4. `Text` widget with pre-defined text 33 | 5. Deafult `FloatingActionButton` 34 | 35 | > **Over time, support for more widgets will be added to the app. Any contributions, ideas, comments or suggestions are always welcome!** 36 | 37 | Feel free to fork the project and try out your hands with flutter development! Let's build something great together! 38 | 39 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 26 | 27 | android { 28 | compileSdkVersion 28 29 | 30 | lintOptions { 31 | disable 'InvalidPackage' 32 | } 33 | 34 | defaultConfig { 35 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 36 | applicationId "com.pi.flutter_studio" 37 | minSdkVersion 16 38 | targetSdkVersion 28 39 | versionCode flutterVersionCode.toInteger() 40 | versionName flutterVersionName 41 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | } 50 | } 51 | } 52 | 53 | flutter { 54 | source '../..' 55 | } 56 | 57 | dependencies { 58 | testImplementation 'junit:junit:4.12' 59 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 60 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 61 | } 62 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 10 | 11 | 15 | 22 | 26 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/pi/flutter_studio/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.pi.flutter_studio; 2 | 3 | import android.os.Bundle; 4 | import io.flutter.app.FlutterActivity; 5 | import io.flutter.plugins.GeneratedPluginRegistrant; 6 | 7 | public class MainActivity extends FlutterActivity { 8 | @Override 9 | protected void onCreate(Bundle savedInstanceState) { 10 | super.onCreate(savedInstanceState); 11 | GeneratedPluginRegistrant.registerWith(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/app_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-hdpi/app_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-ldpi/app_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-ldpi/app_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/app_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-mdpi/app_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/app_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-xhdpi/app_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/app_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-xxhdpi/app_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/app_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-xxxhdpi/app_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #003A60 4 | #002E4E 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.2.1' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | rootProject.buildDir = '../build' 20 | subprojects { 21 | project.buildDir = "${rootProject.buildDir}/${project.name}" 22 | } 23 | subprojects { 24 | project.evaluationDependsOn(':app') 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() 4 | 5 | def plugins = new Properties() 6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') 7 | if (pluginsFile.exists()) { 8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } 9 | } 10 | 11 | plugins.each { name, path -> 12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() 13 | include ":$name" 14 | project(":$name").projectDir = pluginDirectory 15 | } 16 | -------------------------------------------------------------------------------- /assets/images/app_launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/assets/images/app_launcher_icon.png -------------------------------------------------------------------------------- /assets/images/app_launcher_icon_legacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/assets/images/app_launcher_icon_legacy.png -------------------------------------------------------------------------------- /assets/images/flutter_studio_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/assets/images/flutter_studio_logo.png -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/flutter_export_environment.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # This is a generated file; do not edit or check into version control. 3 | export "FLUTTER_ROOT=D:\Frameworks\flutter" 4 | export "FLUTTER_APPLICATION_PATH=D:\Work\Flutter Studio\flutterstudio" 5 | export "FLUTTER_TARGET=lib\main.dart" 6 | export "FLUTTER_BUILD_DIR=build" 7 | export "SYMROOT=${SOURCE_ROOT}/../build\ios" 8 | export "FLUTTER_FRAMEWORK_DIR=D:\Frameworks\flutter\bin\cache\artifacts\engine\ios" 9 | export "FLUTTER_BUILD_NAME=1.0.0" 10 | export "FLUTTER_BUILD_NUMBER=1" 11 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def parse_KV_file(file, separator='=') 14 | file_abs_path = File.expand_path(file) 15 | if !File.exists? file_abs_path 16 | return []; 17 | end 18 | pods_ary = [] 19 | skip_line_start_symbols = ["#", "/"] 20 | File.foreach(file_abs_path) { |line| 21 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } 22 | plugin = line.split(pattern=separator) 23 | if plugin.length == 2 24 | podname = plugin[0].strip() 25 | path = plugin[1].strip() 26 | podpath = File.expand_path("#{path}", file_abs_path) 27 | pods_ary.push({:name => podname, :path => podpath}); 28 | else 29 | puts "Invalid plugin specification: #{line}" 30 | end 31 | } 32 | return pods_ary 33 | end 34 | 35 | target 'Runner' do 36 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock 37 | # referring to absolute paths on developers' machines. 38 | system('rm -rf .symlinks') 39 | system('mkdir -p .symlinks/plugins') 40 | 41 | # Flutter Pods 42 | generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig') 43 | if generated_xcode_build_settings.empty? 44 | puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first." 45 | end 46 | generated_xcode_build_settings.map { |p| 47 | if p[:name] == 'FLUTTER_FRAMEWORK_DIR' 48 | symlink = File.join('.symlinks', 'flutter') 49 | File.symlink(File.dirname(p[:path]), symlink) 50 | pod 'Flutter', :path => File.join(symlink, File.basename(p[:path])) 51 | end 52 | } 53 | 54 | # Plugin Pods 55 | plugin_pods = parse_KV_file('../.flutter-plugins') 56 | plugin_pods.map { |p| 57 | symlink = File.join('.symlinks', 'plugins', p[:name]) 58 | File.symlink(p[:path], symlink) 59 | pod p[:name], :path => File.join(symlink, 'ios') 60 | } 61 | end 62 | 63 | post_install do |installer| 64 | installer.pods_project.targets.each do |target| 65 | target.build_configurations.each do |config| 66 | config.build_settings['ENABLE_BITCODE'] = 'NO' 67 | end 68 | end 69 | end 70 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; 13 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; 15 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 16 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 17 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 18 | 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 19 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 20 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 21 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXCopyFilesBuildPhase section */ 25 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 26 | isa = PBXCopyFilesBuildPhase; 27 | buildActionMask = 2147483647; 28 | dstPath = ""; 29 | dstSubfolderSpec = 10; 30 | files = ( 31 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, 32 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, 33 | ); 34 | name = "Embed Frameworks"; 35 | runOnlyForDeploymentPostprocessing = 0; 36 | }; 37 | /* End PBXCopyFilesBuildPhase section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 41 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 42 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 43 | 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 44 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 45 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 46 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 47 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 48 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 49 | 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 50 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 52 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 53 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 54 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 55 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | /* End PBXFileReference section */ 57 | 58 | /* Begin PBXFrameworksBuildPhase section */ 59 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 60 | isa = PBXFrameworksBuildPhase; 61 | buildActionMask = 2147483647; 62 | files = ( 63 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, 64 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, 65 | ); 66 | runOnlyForDeploymentPostprocessing = 0; 67 | }; 68 | /* End PBXFrameworksBuildPhase section */ 69 | 70 | /* Begin PBXGroup section */ 71 | 9740EEB11CF90186004384FC /* Flutter */ = { 72 | isa = PBXGroup; 73 | children = ( 74 | 3B80C3931E831B6300D905FE /* App.framework */, 75 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 76 | 9740EEBA1CF902C7004384FC /* Flutter.framework */, 77 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 78 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 79 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 80 | ); 81 | name = Flutter; 82 | sourceTree = ""; 83 | }; 84 | 97C146E51CF9000F007C117D = { 85 | isa = PBXGroup; 86 | children = ( 87 | 9740EEB11CF90186004384FC /* Flutter */, 88 | 97C146F01CF9000F007C117D /* Runner */, 89 | 97C146EF1CF9000F007C117D /* Products */, 90 | CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, 91 | ); 92 | sourceTree = ""; 93 | }; 94 | 97C146EF1CF9000F007C117D /* Products */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 97C146EE1CF9000F007C117D /* Runner.app */, 98 | ); 99 | name = Products; 100 | sourceTree = ""; 101 | }; 102 | 97C146F01CF9000F007C117D /* Runner */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, 106 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 107 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 108 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 109 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 110 | 97C147021CF9000F007C117D /* Info.plist */, 111 | 97C146F11CF9000F007C117D /* Supporting Files */, 112 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 113 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 114 | ); 115 | path = Runner; 116 | sourceTree = ""; 117 | }; 118 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 97C146F21CF9000F007C117D /* main.m */, 122 | ); 123 | name = "Supporting Files"; 124 | sourceTree = ""; 125 | }; 126 | /* End PBXGroup section */ 127 | 128 | /* Begin PBXNativeTarget section */ 129 | 97C146ED1CF9000F007C117D /* Runner */ = { 130 | isa = PBXNativeTarget; 131 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 132 | buildPhases = ( 133 | 9740EEB61CF901F6004384FC /* Run Script */, 134 | 97C146EA1CF9000F007C117D /* Sources */, 135 | 97C146EB1CF9000F007C117D /* Frameworks */, 136 | 97C146EC1CF9000F007C117D /* Resources */, 137 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 138 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 139 | ); 140 | buildRules = ( 141 | ); 142 | dependencies = ( 143 | ); 144 | name = Runner; 145 | productName = Runner; 146 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 147 | productType = "com.apple.product-type.application"; 148 | }; 149 | /* End PBXNativeTarget section */ 150 | 151 | /* Begin PBXProject section */ 152 | 97C146E61CF9000F007C117D /* Project object */ = { 153 | isa = PBXProject; 154 | attributes = { 155 | LastUpgradeCheck = 0910; 156 | ORGANIZATIONNAME = "The Chromium Authors"; 157 | TargetAttributes = { 158 | 97C146ED1CF9000F007C117D = { 159 | CreatedOnToolsVersion = 7.3.1; 160 | }; 161 | }; 162 | }; 163 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 164 | compatibilityVersion = "Xcode 3.2"; 165 | developmentRegion = English; 166 | hasScannedForEncodings = 0; 167 | knownRegions = ( 168 | en, 169 | Base, 170 | ); 171 | mainGroup = 97C146E51CF9000F007C117D; 172 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 173 | projectDirPath = ""; 174 | projectRoot = ""; 175 | targets = ( 176 | 97C146ED1CF9000F007C117D /* Runner */, 177 | ); 178 | }; 179 | /* End PBXProject section */ 180 | 181 | /* Begin PBXResourcesBuildPhase section */ 182 | 97C146EC1CF9000F007C117D /* Resources */ = { 183 | isa = PBXResourcesBuildPhase; 184 | buildActionMask = 2147483647; 185 | files = ( 186 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 187 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 188 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 189 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 190 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 191 | ); 192 | runOnlyForDeploymentPostprocessing = 0; 193 | }; 194 | /* End PBXResourcesBuildPhase section */ 195 | 196 | /* Begin PBXShellScriptBuildPhase section */ 197 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 198 | isa = PBXShellScriptBuildPhase; 199 | buildActionMask = 2147483647; 200 | files = ( 201 | ); 202 | inputPaths = ( 203 | ); 204 | name = "Thin Binary"; 205 | outputPaths = ( 206 | ); 207 | runOnlyForDeploymentPostprocessing = 0; 208 | shellPath = /bin/sh; 209 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; 210 | }; 211 | 9740EEB61CF901F6004384FC /* Run Script */ = { 212 | isa = PBXShellScriptBuildPhase; 213 | buildActionMask = 2147483647; 214 | files = ( 215 | ); 216 | inputPaths = ( 217 | ); 218 | name = "Run Script"; 219 | outputPaths = ( 220 | ); 221 | runOnlyForDeploymentPostprocessing = 0; 222 | shellPath = /bin/sh; 223 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 224 | }; 225 | /* End PBXShellScriptBuildPhase section */ 226 | 227 | /* Begin PBXSourcesBuildPhase section */ 228 | 97C146EA1CF9000F007C117D /* Sources */ = { 229 | isa = PBXSourcesBuildPhase; 230 | buildActionMask = 2147483647; 231 | files = ( 232 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, 233 | 97C146F31CF9000F007C117D /* main.m in Sources */, 234 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 235 | ); 236 | runOnlyForDeploymentPostprocessing = 0; 237 | }; 238 | /* End PBXSourcesBuildPhase section */ 239 | 240 | /* Begin PBXVariantGroup section */ 241 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 242 | isa = PBXVariantGroup; 243 | children = ( 244 | 97C146FB1CF9000F007C117D /* Base */, 245 | ); 246 | name = Main.storyboard; 247 | sourceTree = ""; 248 | }; 249 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 250 | isa = PBXVariantGroup; 251 | children = ( 252 | 97C147001CF9000F007C117D /* Base */, 253 | ); 254 | name = LaunchScreen.storyboard; 255 | sourceTree = ""; 256 | }; 257 | /* End PBXVariantGroup section */ 258 | 259 | /* Begin XCBuildConfiguration section */ 260 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 261 | isa = XCBuildConfiguration; 262 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 263 | buildSettings = { 264 | ALWAYS_SEARCH_USER_PATHS = NO; 265 | CLANG_ANALYZER_NONNULL = YES; 266 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 267 | CLANG_CXX_LIBRARY = "libc++"; 268 | CLANG_ENABLE_MODULES = YES; 269 | CLANG_ENABLE_OBJC_ARC = YES; 270 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 271 | CLANG_WARN_BOOL_CONVERSION = YES; 272 | CLANG_WARN_COMMA = YES; 273 | CLANG_WARN_CONSTANT_CONVERSION = YES; 274 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 275 | CLANG_WARN_EMPTY_BODY = YES; 276 | CLANG_WARN_ENUM_CONVERSION = YES; 277 | CLANG_WARN_INFINITE_RECURSION = YES; 278 | CLANG_WARN_INT_CONVERSION = YES; 279 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 280 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 281 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 282 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 283 | CLANG_WARN_STRICT_PROTOTYPES = YES; 284 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 285 | CLANG_WARN_UNREACHABLE_CODE = YES; 286 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 287 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 288 | COPY_PHASE_STRIP = NO; 289 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 290 | ENABLE_NS_ASSERTIONS = NO; 291 | ENABLE_STRICT_OBJC_MSGSEND = YES; 292 | GCC_C_LANGUAGE_STANDARD = gnu99; 293 | GCC_NO_COMMON_BLOCKS = YES; 294 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 295 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 296 | GCC_WARN_UNDECLARED_SELECTOR = YES; 297 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 298 | GCC_WARN_UNUSED_FUNCTION = YES; 299 | GCC_WARN_UNUSED_VARIABLE = YES; 300 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 301 | MTL_ENABLE_DEBUG_INFO = NO; 302 | SDKROOT = iphoneos; 303 | TARGETED_DEVICE_FAMILY = "1,2"; 304 | VALIDATE_PRODUCT = YES; 305 | }; 306 | name = Profile; 307 | }; 308 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 309 | isa = XCBuildConfiguration; 310 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 311 | buildSettings = { 312 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 313 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 314 | DEVELOPMENT_TEAM = S8QB4VV633; 315 | ENABLE_BITCODE = NO; 316 | FRAMEWORK_SEARCH_PATHS = ( 317 | "$(inherited)", 318 | "$(PROJECT_DIR)/Flutter", 319 | ); 320 | INFOPLIST_FILE = Runner/Info.plist; 321 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 322 | LIBRARY_SEARCH_PATHS = ( 323 | "$(inherited)", 324 | "$(PROJECT_DIR)/Flutter", 325 | ); 326 | PRODUCT_BUNDLE_IDENTIFIER = com.pi.flutterStudio; 327 | PRODUCT_NAME = "$(TARGET_NAME)"; 328 | VERSIONING_SYSTEM = "apple-generic"; 329 | }; 330 | name = Profile; 331 | }; 332 | 97C147031CF9000F007C117D /* Debug */ = { 333 | isa = XCBuildConfiguration; 334 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 335 | buildSettings = { 336 | ALWAYS_SEARCH_USER_PATHS = NO; 337 | CLANG_ANALYZER_NONNULL = YES; 338 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 339 | CLANG_CXX_LIBRARY = "libc++"; 340 | CLANG_ENABLE_MODULES = YES; 341 | CLANG_ENABLE_OBJC_ARC = YES; 342 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 343 | CLANG_WARN_BOOL_CONVERSION = YES; 344 | CLANG_WARN_COMMA = YES; 345 | CLANG_WARN_CONSTANT_CONVERSION = YES; 346 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 347 | CLANG_WARN_EMPTY_BODY = YES; 348 | CLANG_WARN_ENUM_CONVERSION = YES; 349 | CLANG_WARN_INFINITE_RECURSION = YES; 350 | CLANG_WARN_INT_CONVERSION = YES; 351 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 352 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 353 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 354 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 355 | CLANG_WARN_STRICT_PROTOTYPES = YES; 356 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 357 | CLANG_WARN_UNREACHABLE_CODE = YES; 358 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 359 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 360 | COPY_PHASE_STRIP = NO; 361 | DEBUG_INFORMATION_FORMAT = dwarf; 362 | ENABLE_STRICT_OBJC_MSGSEND = YES; 363 | ENABLE_TESTABILITY = YES; 364 | GCC_C_LANGUAGE_STANDARD = gnu99; 365 | GCC_DYNAMIC_NO_PIC = NO; 366 | GCC_NO_COMMON_BLOCKS = YES; 367 | GCC_OPTIMIZATION_LEVEL = 0; 368 | GCC_PREPROCESSOR_DEFINITIONS = ( 369 | "DEBUG=1", 370 | "$(inherited)", 371 | ); 372 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 373 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 374 | GCC_WARN_UNDECLARED_SELECTOR = YES; 375 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 376 | GCC_WARN_UNUSED_FUNCTION = YES; 377 | GCC_WARN_UNUSED_VARIABLE = YES; 378 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 379 | MTL_ENABLE_DEBUG_INFO = YES; 380 | ONLY_ACTIVE_ARCH = YES; 381 | SDKROOT = iphoneos; 382 | TARGETED_DEVICE_FAMILY = "1,2"; 383 | }; 384 | name = Debug; 385 | }; 386 | 97C147041CF9000F007C117D /* Release */ = { 387 | isa = XCBuildConfiguration; 388 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 389 | buildSettings = { 390 | ALWAYS_SEARCH_USER_PATHS = NO; 391 | CLANG_ANALYZER_NONNULL = YES; 392 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 393 | CLANG_CXX_LIBRARY = "libc++"; 394 | CLANG_ENABLE_MODULES = YES; 395 | CLANG_ENABLE_OBJC_ARC = YES; 396 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 397 | CLANG_WARN_BOOL_CONVERSION = YES; 398 | CLANG_WARN_COMMA = YES; 399 | CLANG_WARN_CONSTANT_CONVERSION = YES; 400 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 401 | CLANG_WARN_EMPTY_BODY = YES; 402 | CLANG_WARN_ENUM_CONVERSION = YES; 403 | CLANG_WARN_INFINITE_RECURSION = YES; 404 | CLANG_WARN_INT_CONVERSION = YES; 405 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 406 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 407 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 408 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 409 | CLANG_WARN_STRICT_PROTOTYPES = YES; 410 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 411 | CLANG_WARN_UNREACHABLE_CODE = YES; 412 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 413 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 414 | COPY_PHASE_STRIP = NO; 415 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 416 | ENABLE_NS_ASSERTIONS = NO; 417 | ENABLE_STRICT_OBJC_MSGSEND = YES; 418 | GCC_C_LANGUAGE_STANDARD = gnu99; 419 | GCC_NO_COMMON_BLOCKS = YES; 420 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 421 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 422 | GCC_WARN_UNDECLARED_SELECTOR = YES; 423 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 424 | GCC_WARN_UNUSED_FUNCTION = YES; 425 | GCC_WARN_UNUSED_VARIABLE = YES; 426 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 427 | MTL_ENABLE_DEBUG_INFO = NO; 428 | SDKROOT = iphoneos; 429 | TARGETED_DEVICE_FAMILY = "1,2"; 430 | VALIDATE_PRODUCT = YES; 431 | }; 432 | name = Release; 433 | }; 434 | 97C147061CF9000F007C117D /* Debug */ = { 435 | isa = XCBuildConfiguration; 436 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 437 | buildSettings = { 438 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 439 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 440 | ENABLE_BITCODE = NO; 441 | FRAMEWORK_SEARCH_PATHS = ( 442 | "$(inherited)", 443 | "$(PROJECT_DIR)/Flutter", 444 | ); 445 | INFOPLIST_FILE = Runner/Info.plist; 446 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 447 | LIBRARY_SEARCH_PATHS = ( 448 | "$(inherited)", 449 | "$(PROJECT_DIR)/Flutter", 450 | ); 451 | PRODUCT_BUNDLE_IDENTIFIER = com.pi.flutterStudio; 452 | PRODUCT_NAME = "$(TARGET_NAME)"; 453 | VERSIONING_SYSTEM = "apple-generic"; 454 | }; 455 | name = Debug; 456 | }; 457 | 97C147071CF9000F007C117D /* Release */ = { 458 | isa = XCBuildConfiguration; 459 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 460 | buildSettings = { 461 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 462 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 463 | ENABLE_BITCODE = NO; 464 | FRAMEWORK_SEARCH_PATHS = ( 465 | "$(inherited)", 466 | "$(PROJECT_DIR)/Flutter", 467 | ); 468 | INFOPLIST_FILE = Runner/Info.plist; 469 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 470 | LIBRARY_SEARCH_PATHS = ( 471 | "$(inherited)", 472 | "$(PROJECT_DIR)/Flutter", 473 | ); 474 | PRODUCT_BUNDLE_IDENTIFIER = com.pi.flutterStudio; 475 | PRODUCT_NAME = "$(TARGET_NAME)"; 476 | VERSIONING_SYSTEM = "apple-generic"; 477 | }; 478 | name = Release; 479 | }; 480 | /* End XCBuildConfiguration section */ 481 | 482 | /* Begin XCConfigurationList section */ 483 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 484 | isa = XCConfigurationList; 485 | buildConfigurations = ( 486 | 97C147031CF9000F007C117D /* Debug */, 487 | 97C147041CF9000F007C117D /* Release */, 488 | 249021D3217E4FDB00AE95B9 /* Profile */, 489 | ); 490 | defaultConfigurationIsVisible = 0; 491 | defaultConfigurationName = Release; 492 | }; 493 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 494 | isa = XCConfigurationList; 495 | buildConfigurations = ( 496 | 97C147061CF9000F007C117D /* Debug */, 497 | 97C147071CF9000F007C117D /* Release */, 498 | 249021D4217E4FDB00AE95B9 /* Profile */, 499 | ); 500 | defaultConfigurationIsVisible = 0; 501 | defaultConfigurationName = Release; 502 | }; 503 | /* End XCConfigurationList section */ 504 | }; 505 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 506 | } 507 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 56 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 75 | 77 | 83 | 84 | 85 | 86 | 88 | 89 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | 4 | @implementation AppDelegate 5 | 6 | - (BOOL)application:(UIApplication *)application 7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GeneratedPluginRegistrant registerWithRegistry:self]; 9 | // Override point for customization after application launch. 10 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytesizedwizard/flutterstudio/d058574f03337cb539e8af9f7f3dccf65eb7e68a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | flutter_studio 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ios/Runner/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char* argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/bloc/bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:rxdart/rxdart.dart'; 2 | import 'dart:async'; 3 | import 'package:share/share.dart'; 4 | import 'package:flutter/services.dart'; 5 | import 'package:path_provider/path_provider.dart'; 6 | import 'package:simple_permissions/simple_permissions.dart'; 7 | import 'dart:io'; 8 | 9 | class Bloc { 10 | final BehaviorSubject _menuOptionController = BehaviorSubject(); 11 | Stream get getSelectedMenu => _menuOptionController.stream; 12 | Function(String) get setSelectedMenu => _menuOptionController.sink.add; 13 | 14 | final BehaviorSubject _codeGenerationController = BehaviorSubject(); 15 | Stream get getGeneratedCode => _codeGenerationController.stream; 16 | 17 | void generateCode(String codeBlock) { 18 | if(_codeGenerationController.hasValue) { 19 | _codeGenerationController.sink.add( 20 | _codeGenerationController.value.replaceAll("404Found", codeBlock), 21 | ); 22 | } else { 23 | _codeGenerationController.sink.add(codeBlock); 24 | } 25 | } 26 | 27 | void share() async{ 28 | await Share.share(_codeGenerationController.value); 29 | } 30 | 31 | void copy() { 32 | Clipboard.setData(ClipboardData(text: _codeGenerationController.value)); 33 | } 34 | 35 | void writeToStorage() async{ 36 | bool checkResult = 37 | await SimplePermissions.checkPermission(Permission.WriteExternalStorage); 38 | 39 | if(!checkResult) { 40 | var status = await SimplePermissions.requestPermission( 41 | Permission.WriteExternalStorage); 42 | 43 | if(status == PermissionStatus.authorized) { 44 | Directory externalDirectory = await getExternalStorageDirectory(); 45 | File myFile = File(externalDirectory.path + "/temp.dart"); 46 | 47 | myFile.writeAsStringSync(_codeGenerationController.value); 48 | } 49 | } else { 50 | Directory externalDirectory = await getExternalStorageDirectory(); 51 | File myFile = File(externalDirectory.path + "/temp.dart"); 52 | 53 | myFile.writeAsStringSync(_codeGenerationController.value); 54 | } 55 | } 56 | 57 | } -------------------------------------------------------------------------------- /lib/bloc/provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'bloc.dart'; 3 | 4 | class Provider extends InheritedWidget { 5 | 6 | Provider({Key key, Widget child}) : super(key: key, child: child); 7 | 8 | final bloc = Bloc(); 9 | 10 | @override 11 | bool updateShouldNotify(InheritedWidget oldWidget) { 12 | return true; 13 | } 14 | 15 | static Bloc of(BuildContext context) { 16 | return (context.inheritFromWidgetOfExactType(Provider) as Provider).bloc; 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | import 'package:flutter_studio/ui/welcome.dart'; 4 | import 'package:flutter_studio/bloc/provider.dart'; 5 | 6 | void main() { 7 | WidgetsFlutterBinding.ensureInitialized(); 8 | SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]) 9 | .then((_) { 10 | runApp(new FlutterStudio()); 11 | }); 12 | } 13 | 14 | class FlutterStudio extends StatelessWidget { 15 | // This widget is the root of your application. 16 | @override 17 | Widget build(BuildContext context) { 18 | return Provider( 19 | child: MaterialApp( 20 | title: 'Flutter Demo', 21 | debugShowCheckedModeBanner: false, 22 | home: WelcomeScreen(), 23 | ), 24 | ); 25 | } 26 | } 27 | 28 | 29 | -------------------------------------------------------------------------------- /lib/material_menu.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_studio/bloc/provider.dart'; 3 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 4 | 5 | class MaterialWidgetMenu extends StatefulWidget { 6 | final VoidCallback expandCollapseMenuCallback; 7 | final void Function(AppBar appBar, dynamic bloc) updateAppBarCallback; 8 | final VoidCallback centerWidgetCallback; 9 | final void Function(Widget body, dynamic bloc) updateBodyCallback; 10 | final void Function(FloatingActionButton button, dynamic bloc) updateFabCallback; 11 | final VoidCallback updateCounterCallback; 12 | int counter; 13 | 14 | MaterialWidgetMenu(this.expandCollapseMenuCallback, this.updateAppBarCallback, 15 | this.updateBodyCallback, this.updateFabCallback, this.updateCounterCallback, this.counter, this.centerWidgetCallback); 16 | 17 | @override 18 | _MaterialWidgetMenuState createState() => _MaterialWidgetMenuState(); 19 | } 20 | 21 | class _MaterialWidgetMenuState extends State { 22 | AppBar _appBar; 23 | Widget _body; 24 | FloatingActionButton _floatingActionButton; 25 | 26 | 27 | @override 28 | Widget build(BuildContext context) { 29 | final _bloc = Provider.of(context); 30 | 31 | return Column( 32 | mainAxisSize: MainAxisSize.max, 33 | mainAxisAlignment: MainAxisAlignment.start, 34 | children: [ 35 | FlatButton( 36 | color: Colors.transparent, 37 | child: Row( 38 | mainAxisAlignment: MainAxisAlignment.center, 39 | children: [ 40 | Flexible( 41 | child: Text( 42 | "Material Widgets", 43 | style: TextStyle( 44 | color: Colors.white, fontWeight: FontWeight.w500), 45 | textAlign: TextAlign.center, 46 | ), 47 | ), 48 | ], 49 | ), 50 | highlightColor: Colors.transparent, 51 | splashColor: Colors.transparent, 52 | onPressed: widget.expandCollapseMenuCallback, 53 | ), 54 | Padding( 55 | padding: EdgeInsets.symmetric(horizontal: 40), 56 | child: Wrap( 57 | alignment: WrapAlignment.start, 58 | spacing: 40, 59 | runSpacing: 20, 60 | children: [ 61 | Column( 62 | children: [ 63 | IconButton( 64 | icon: Icon(FontAwesomeIcons.solidObjectGroup), 65 | color: Colors.white, 66 | onPressed: () { 67 | _bloc.generateCode( 68 | ''' 69 | Scaffold( 70 | 404Found, 71 | ) 72 | ''' 73 | ); 74 | }, 75 | iconSize: 36, 76 | ), 77 | Padding( 78 | padding: const EdgeInsets.all(8.0), 79 | child: Text( 80 | "Sacffold", 81 | style: TextStyle( 82 | color: Colors.white, fontWeight: FontWeight.w300 83 | ), 84 | ), 85 | ) 86 | ], 87 | ), 88 | Column( 89 | children: [ 90 | IconButton( 91 | icon: Icon(Icons.space_bar), 92 | color: Colors.white, 93 | onPressed: () { 94 | _appBar = AppBar( 95 | title: Text( 96 | "Flutter Demo App", 97 | ), 98 | ); 99 | widget.updateAppBarCallback(_appBar, _bloc); 100 | }, 101 | iconSize: 36, 102 | ), 103 | Padding( 104 | padding: const EdgeInsets.all(8.0), 105 | child: Text( 106 | "AppBar", 107 | style: TextStyle( 108 | color: Colors.white, fontWeight: FontWeight.w300 109 | ), 110 | ), 111 | ) 112 | ], 113 | ), 114 | Column( 115 | children: [ 116 | IconButton( 117 | icon: Icon(FontAwesomeIcons.alignCenter), 118 | color: Colors.white, 119 | onPressed: () { 120 | widget.centerWidgetCallback(); 121 | }, 122 | iconSize: 36, 123 | ), 124 | Padding( 125 | padding: const EdgeInsets.all(8.0), 126 | child: Text( 127 | "Center", 128 | style: TextStyle( 129 | color: Colors.white, fontWeight: FontWeight.w300), 130 | ), 131 | ) 132 | ], 133 | ), 134 | Column( 135 | children: [ 136 | IconButton( 137 | icon: Icon(FontAwesomeIcons.font), 138 | color: Colors.white, 139 | onPressed: () { 140 | _body = Text("Button pressed ${widget.counter} times"); 141 | widget.updateBodyCallback(_body, _bloc); 142 | }, 143 | iconSize: 36, 144 | ), 145 | Padding( 146 | padding: const EdgeInsets.all(8.0), 147 | child: Text( 148 | "Text", 149 | style: TextStyle( 150 | color: Colors.white, fontWeight: FontWeight.w300), 151 | ), 152 | ) 153 | ], 154 | ), 155 | Column( 156 | children: [ 157 | IconButton( 158 | icon: Icon(Icons.add_circle), 159 | color: Colors.white, 160 | onPressed: () { 161 | widget.updateFabCallback( 162 | FloatingActionButton( 163 | onPressed: widget.updateCounterCallback, 164 | child: Icon(Icons.add), 165 | ), 166 | _bloc 167 | ); 168 | }, 169 | iconSize: 48, 170 | ), 171 | Padding( 172 | padding: const EdgeInsets.all(8.0), 173 | child: Text( 174 | "FAB", 175 | style: TextStyle( 176 | color: Colors.white, fontWeight: FontWeight.w300), 177 | ), 178 | ) 179 | ], 180 | ), 181 | ], 182 | ), 183 | ) 184 | ], 185 | ); 186 | } 187 | } 188 | -------------------------------------------------------------------------------- /lib/ui/canvas_dashboard.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 3 | import 'package:flutter_studio/bloc/provider.dart'; 4 | import 'package:flutter_studio/material_menu.dart'; 5 | 6 | import 'components/screen_background.dart'; 7 | 8 | class StudioDashboard extends StatefulWidget { 9 | StudioDashboard({Key key, this.title}) : super(key: key); 10 | 11 | final String title; 12 | 13 | @override 14 | _StudioDashboardState createState() => _StudioDashboardState(); 15 | } 16 | 17 | class _StudioDashboardState extends State { 18 | 19 | GlobalKey _formKey = GlobalKey(debugLabel: "Dashboard Form Key"); 20 | PageController _pageController = PageController(); 21 | double _widgetMenuHeight = 150.0; 22 | Widget previewAppBar; 23 | Widget previewBody; 24 | FloatingActionButton previewFloatingActionButton; 25 | int counter = 0; 26 | bool isCentered = false; 27 | 28 | @override 29 | Widget build(BuildContext context) { 30 | 31 | final _bloc = Provider.of(context); 32 | 33 | return Stack( 34 | children: [ 35 | Positioned.fill( 36 | child: ScreenBackgroundBasic(), 37 | ), 38 | Scaffold( 39 | resizeToAvoidBottomInset: false, 40 | backgroundColor: Colors.transparent, 41 | appBar: AppBar( 42 | backgroundColor: Colors.transparent, 43 | automaticallyImplyLeading: false, 44 | elevation: 0.0, 45 | centerTitle: true, 46 | title: Image.asset( 47 | "assets/images/flutter_studio_logo.png", 48 | alignment: Alignment.topLeft, 49 | width: 100, 50 | ), 51 | actions: [ 52 | IconButton( 53 | icon: Icon(Icons.refresh), 54 | onPressed: () { 55 | setState(() { 56 | previewAppBar = previewBody = previewFloatingActionButton = null; 57 | }); 58 | }, 59 | ), 60 | ], 61 | ), 62 | body: Form( 63 | key: _formKey, 64 | child: Stack( 65 | alignment: Alignment.center, 66 | children: [ 67 | Column( 68 | mainAxisAlignment: MainAxisAlignment.center, 69 | children: [ 70 | Flexible( 71 | flex: 1, 72 | fit: FlexFit.loose, 73 | child: Padding( 74 | padding: const EdgeInsets.symmetric( 75 | horizontal: 60.0, 76 | vertical: 10.0 77 | ), 78 | child: Text( 79 | "Use the widgets panel to start building", 80 | textAlign: TextAlign.center, 81 | style: TextStyle( 82 | height: 1.1, 83 | color: Colors.white, 84 | fontSize: 12 85 | ), 86 | ) 87 | ), 88 | ), 89 | Flexible( 90 | flex: 10, 91 | child: PageView( 92 | controller: _pageController, 93 | children: [ 94 | Container( 95 | margin: EdgeInsets.symmetric( 96 | vertical: 20.0, 97 | horizontal: 60.0, 98 | ), 99 | decoration: BoxDecoration( 100 | color: Colors.white 101 | ), 102 | child: Scaffold( 103 | appBar: previewAppBar, 104 | body: previewBody, 105 | floatingActionButton: previewFloatingActionButton, 106 | ), 107 | ), 108 | Container( 109 | margin: EdgeInsets.symmetric( 110 | vertical: 20.0, 111 | horizontal: 50.0, 112 | ), 113 | decoration: BoxDecoration( 114 | color: Colors.white.withOpacity(0.25) 115 | ), 116 | child: StreamBuilder( 117 | stream: _bloc.getGeneratedCode, 118 | builder: (context, snapshot) { 119 | if(!snapshot.hasData) { 120 | return Container(); 121 | } 122 | 123 | return SingleChildScrollView( 124 | child: Text( 125 | snapshot.data, 126 | style: TextStyle( 127 | color: Colors.white, 128 | ), 129 | ), 130 | ); 131 | } 132 | ), 133 | ), 134 | ], 135 | onPageChanged: (index) { 136 | if(index == 1) { 137 | _bloc.setSelectedMenu("codeOptions"); 138 | } else { 139 | _bloc.setSelectedMenu("none"); 140 | } 141 | }, 142 | ), 143 | ), 144 | Expanded( 145 | flex: 4, 146 | child: Container(), 147 | ) 148 | ], 149 | ), 150 | Positioned( 151 | bottom: 0.0, 152 | child: AnimatedContainer( 153 | duration: Duration(milliseconds: 300), 154 | curve: Curves.easeInOut, 155 | width: MediaQuery.of(context).size.width, 156 | height: _widgetMenuHeight, 157 | color: Colors.black, 158 | child: SingleChildScrollView( 159 | child: StreamBuilder( 160 | stream: _bloc.getSelectedMenu, 161 | initialData: "none", 162 | builder: (context, snapshot) { 163 | if(snapshot.hasData) { 164 | switch(snapshot.data) { 165 | case "none": 166 | return defaultMenu(_bloc); 167 | 168 | case "material": 169 | return MaterialWidgetMenu( 170 | expandCollapseMenu, 171 | renderPreviewAppBar, 172 | renderPreviewBody, 173 | renderFloatingActionButton, 174 | onButtonPressed, 175 | counter, 176 | centerWidgetCallback 177 | ); 178 | 179 | case "codeOptions": 180 | return codeMenu(_bloc); 181 | } 182 | } 183 | return defaultMenu(_bloc); 184 | } 185 | ), 186 | ), 187 | ), 188 | ) 189 | ], 190 | ), 191 | ), // This trailing comma makes auto-formatting nicer for build methods. 192 | ), 193 | ], 194 | ); 195 | } 196 | 197 | Widget defaultMenu(var _bloc) { 198 | return Column( 199 | mainAxisSize: MainAxisSize.max, 200 | mainAxisAlignment: MainAxisAlignment.start, 201 | children: [ 202 | FlatButton( 203 | color: Colors.transparent, 204 | child: Text( 205 | "Widgets Menu", 206 | style: TextStyle( 207 | color: Colors.white, 208 | fontWeight: FontWeight.w500 209 | ), 210 | textAlign: TextAlign.center, 211 | ), 212 | highlightColor: Colors.transparent, 213 | splashColor: Colors.transparent, 214 | onPressed: expandCollapseMenu, 215 | ), 216 | Wrap( 217 | children: [ 218 | Column( 219 | children: [ 220 | IconButton( 221 | icon: Icon(FontAwesomeIcons.android), 222 | color: Colors.white, 223 | onPressed: () { 224 | _bloc.setSelectedMenu("material"); 225 | }, 226 | iconSize: 36, 227 | ), 228 | Padding( 229 | padding: const EdgeInsets.all(8.0), 230 | child: Text( 231 | "Material", 232 | style: TextStyle( 233 | color: Colors.white, 234 | fontWeight: FontWeight.w300 235 | ), 236 | ), 237 | ) 238 | ], 239 | ), 240 | SizedBox(width: 40,), 241 | Column( 242 | children: [ 243 | IconButton( 244 | icon: Icon(FontAwesomeIcons.apple), 245 | color: Colors.white, 246 | onPressed: () { 247 | _bloc.setSelectedMenu("cupertino"); 248 | }, 249 | iconSize: 36, 250 | ), 251 | Padding( 252 | padding: const EdgeInsets.all(8.0), 253 | child: Text( 254 | "Cupertino", 255 | style: TextStyle( 256 | color: Colors.white, 257 | fontWeight: FontWeight.w300 258 | ), 259 | ), 260 | ) 261 | ], 262 | ), 263 | SizedBox(width: 40,), 264 | Column( 265 | children: [ 266 | IconButton( 267 | icon: Icon(FontAwesomeIcons.mobileAlt), 268 | color: Colors.white, 269 | onPressed: () { 270 | _bloc.setSelectedMenu("native"); 271 | }, 272 | iconSize: 36, 273 | ), 274 | Padding( 275 | padding: const EdgeInsets.all(8.0), 276 | child: Text( 277 | "Native", 278 | style: TextStyle( 279 | color: Colors.white, 280 | fontWeight: FontWeight.w300 281 | ), 282 | ), 283 | ) 284 | ], 285 | ), 286 | ], 287 | ) 288 | ], 289 | ); 290 | } 291 | 292 | Widget codeMenu(var _bloc) { 293 | return Column( 294 | mainAxisSize: MainAxisSize.max, 295 | mainAxisAlignment: MainAxisAlignment.start, 296 | children: [ 297 | FlatButton( 298 | color: Colors.transparent, 299 | child: Text( 300 | "Code Options", 301 | style: TextStyle( 302 | color: Colors.white, 303 | fontWeight: FontWeight.w500 304 | ), 305 | textAlign: TextAlign.center, 306 | ), 307 | highlightColor: Colors.transparent, 308 | splashColor: Colors.transparent, 309 | onPressed: expandCollapseMenu, 310 | ), 311 | Padding( 312 | padding: EdgeInsets.symmetric(horizontal: 40), 313 | child: Wrap( 314 | spacing: 40, 315 | runSpacing: 20, 316 | alignment: WrapAlignment.start, 317 | children: [ 318 | Column( 319 | children: [ 320 | IconButton( 321 | icon: Icon(FontAwesomeIcons.share), 322 | color: Colors.white, 323 | onPressed: () { 324 | _bloc.share(); 325 | }, 326 | iconSize: 36, 327 | ), 328 | Padding( 329 | padding: const EdgeInsets.all(8.0), 330 | child: Text( 331 | "Share", 332 | style: TextStyle( 333 | color: Colors.white, 334 | fontWeight: FontWeight.w300 335 | ), 336 | ), 337 | ) 338 | ], 339 | ), 340 | Column( 341 | children: [ 342 | IconButton( 343 | icon: Icon(FontAwesomeIcons.copy), 344 | color: Colors.white, 345 | onPressed: () { 346 | _bloc.copy(); 347 | }, 348 | iconSize: 36, 349 | ), 350 | Padding( 351 | padding: const EdgeInsets.all(8.0), 352 | child: Text( 353 | "Copy", 354 | style: TextStyle( 355 | color: Colors.white, 356 | fontWeight: FontWeight.w300 357 | ), 358 | ), 359 | ) 360 | ], 361 | ), 362 | Column( 363 | children: [ 364 | IconButton( 365 | icon: Icon(FontAwesomeIcons.file), 366 | color: Colors.white, 367 | onPressed: () { 368 | _bloc.writeToStorage(); 369 | }, 370 | iconSize: 36, 371 | ), 372 | Padding( 373 | padding: const EdgeInsets.all(8.0), 374 | child: Text( 375 | "Write to File", 376 | style: TextStyle( 377 | color: Colors.white, 378 | fontWeight: FontWeight.w300 379 | ), 380 | ), 381 | ) 382 | ], 383 | ), 384 | Column( 385 | children: [ 386 | IconButton( 387 | icon: Icon(FontAwesomeIcons.github), 388 | color: Colors.white, 389 | onPressed: () { 390 | //TODO:Add GitHub 391 | }, 392 | iconSize: 36, 393 | ), 394 | Padding( 395 | padding: const EdgeInsets.all(8.0), 396 | child: Text( 397 | "GitHub", 398 | style: TextStyle( 399 | color: Colors.white, 400 | fontWeight: FontWeight.w300 401 | ), 402 | ), 403 | ) 404 | ], 405 | ), 406 | Column( 407 | children: [ 408 | IconButton( 409 | icon: Icon(FontAwesomeIcons.stackOverflow), 410 | color: Colors.white, 411 | onPressed: () { 412 | 413 | }, 414 | iconSize: 36, 415 | ), 416 | Padding( 417 | padding: const EdgeInsets.all(8.0), 418 | child: Text( 419 | "Ask", 420 | style: TextStyle( 421 | color: Colors.white, 422 | fontWeight: FontWeight.w300 423 | ), 424 | ), 425 | ) 426 | ], 427 | ), 428 | ], 429 | ), 430 | ) 431 | ], 432 | ); 433 | } 434 | 435 | void expandCollapseMenu() { 436 | if(_widgetMenuHeight == 150.0) { 437 | setState(() { 438 | _widgetMenuHeight = MediaQuery.of(context).size.height - 80.0; 439 | }); 440 | } else { 441 | setState(() { 442 | _widgetMenuHeight = 150.0; 443 | }); 444 | } 445 | } 446 | 447 | void renderPreviewAppBar(AppBar appBar, dynamic _bloc) { 448 | setState(() { 449 | previewAppBar = appBar; 450 | }); 451 | _bloc.generateCode( 452 | ''' 453 | appBar: ${appBar.toString()}( 454 | title: ${appBar.title.toString()} 455 | ), 456 | 404Found 457 | ''' 458 | ); 459 | } 460 | 461 | void centerWidgetCallback() { 462 | setState(() { 463 | isCentered = true; 464 | }); 465 | } 466 | 467 | void renderPreviewBody(Widget body, dynamic _bloc) { 468 | if (!isCentered) { 469 | setState(() { 470 | previewBody = body; 471 | }); 472 | _bloc.generateCode( 473 | ''' 474 | body: ${body.toString()}, 475 | 404Found 476 | ''' 477 | ); 478 | } else { 479 | setState(() { 480 | previewBody = Center(child: body); 481 | }); 482 | _bloc.generateCode( 483 | ''' 484 | body: Center( 485 | child: ${body.toString()}, 486 | ), 487 | 404Found 488 | ''' 489 | ); 490 | } 491 | } 492 | 493 | void renderFloatingActionButton(FloatingActionButton button, dynamic _bloc) { 494 | setState(() { 495 | previewFloatingActionButton = button; 496 | }); 497 | _bloc.generateCode( 498 | ''' 499 | floatingActionButton: ${button.toString()} ( 500 | child: ${button.child.toString()}, 501 | onPressed: () {} 502 | ) 503 | ''' 504 | ); 505 | } 506 | 507 | void onButtonPressed() { 508 | setState(() { 509 | counter++; 510 | }); 511 | } 512 | 513 | } -------------------------------------------------------------------------------- /lib/ui/components/buttons.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_studio/utils/colors.dart'; 3 | 4 | class CustomButton extends StatelessWidget { 5 | 6 | final Widget child; 7 | final VoidCallback onPressed; 8 | 9 | CustomButton({@required this.child, @required this.onPressed}) : assert(child != null && onPressed != null); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return ButtonTheme( 14 | height: 50, 15 | buttonColor: AppColors(0xFF006AD3), 16 | child: RaisedButton( 17 | shape: RoundedRectangleBorder( 18 | borderRadius: BorderRadius.circular(4.0) 19 | ), 20 | elevation: 7.0, 21 | onPressed: onPressed, 22 | child: child, 23 | ), 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/ui/components/screen_background.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_studio/utils/colors.dart'; 3 | 4 | /// The custom widget class for screen background with ellipse overlay 5 | class ScreenBackgroundOverlay extends Stack { 6 | 7 | final Widget child; 8 | 9 | ScreenBackgroundOverlay({this.child}): super( 10 | children: [ 11 | Container( 12 | decoration: BoxDecoration( 13 | gradient: LinearGradient( 14 | colors: [ 15 | AppColors.primaryAppColor, 16 | AppColors.secondaryAppColor 17 | ], 18 | begin: Alignment.bottomCenter, 19 | end: Alignment.topCenter, 20 | tileMode: TileMode.clamp 21 | ), 22 | ), 23 | ), 24 | CustomPaint( 25 | painter: _BackgroundEllipsePainter(), 26 | child: SizedBox.expand(), 27 | willChange: false, 28 | ), 29 | CustomPaint( 30 | painter: _ForegroundEllipsePainter(), 31 | child: SizedBox.expand(), 32 | willChange: false, 33 | ) 34 | ] 35 | ); 36 | } 37 | 38 | /// The custom widget class for a simple screen background 39 | /// without any ellipse overlay 40 | class ScreenBackgroundBasic extends Container { 41 | 42 | final Widget child; 43 | 44 | ScreenBackgroundBasic({this.child}): super( 45 | decoration: BoxDecoration( 46 | gradient: LinearGradient( 47 | colors: [ 48 | AppColors.primaryAppColor, 49 | AppColors.secondaryAppColor 50 | ], 51 | begin: Alignment.bottomCenter, 52 | end: Alignment.topCenter, 53 | tileMode: TileMode.clamp 54 | ), 55 | ), 56 | child: child, 57 | ); 58 | } 59 | 60 | 61 | 62 | class _BackgroundEllipsePainter extends CustomPainter { 63 | 64 | final Paint _customPaint = Paint() 65 | ..color = AppColors.primaryFontColor.withOpacity(0.05) 66 | ..isAntiAlias = true 67 | ..strokeWidth = 4.0 68 | ..style = PaintingStyle.fill; 69 | 70 | @override 71 | void paint(Canvas canvas, Size size) { 72 | canvas.drawCircle(Offset(2 *size.width, 0), 1.75 * size.width, _customPaint); 73 | } 74 | 75 | @override 76 | bool shouldRepaint(CustomPainter oldDelegate) { 77 | return false; 78 | } 79 | 80 | } 81 | 82 | class _ForegroundEllipsePainter extends CustomPainter { 83 | 84 | final Paint _customPaint = Paint() 85 | ..color = AppColors.primaryFontColor.withOpacity(0.05) 86 | ..isAntiAlias = true 87 | ..strokeWidth = 4.0 88 | ..style = PaintingStyle.fill; 89 | 90 | @override 91 | void paint(Canvas canvas, Size size) { 92 | canvas.drawCircle(Offset(2* size.width, 0), (2* size.width), _customPaint); 93 | } 94 | 95 | @override 96 | bool shouldRepaint(CustomPainter oldDelegate) { 97 | return false; 98 | } 99 | 100 | } -------------------------------------------------------------------------------- /lib/ui/components/styles.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_studio/utils/colors.dart'; 3 | 4 | class CustomStyles { 5 | static const ButtonTextStyle = TextStyle( 6 | color: AppColors.primaryFontColor, 7 | fontWeight: FontWeight.w300, 8 | fontSize: 16 9 | ); 10 | 11 | } -------------------------------------------------------------------------------- /lib/ui/welcome.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_studio/ui/canvas_dashboard.dart'; 4 | import 'package:flutter_studio/utils/colors.dart'; 5 | import 'components/screen_background.dart'; 6 | import 'components/buttons.dart'; 7 | import 'components/styles.dart'; 8 | 9 | 10 | /// The first screen shown to the user after the splash screen. 11 | /// Provides a brief message about the project idea. 12 | class WelcomeScreen extends StatefulWidget { 13 | @override 14 | _WelcomeScreenState createState() => _WelcomeScreenState(); 15 | } 16 | 17 | class _WelcomeScreenState extends State { 18 | @override 19 | Widget build(BuildContext context) { 20 | return Scaffold( 21 | body: Stack( 22 | alignment: Alignment.topLeft, 23 | children: [ 24 | Positioned.fill( 25 | child: ScreenBackgroundOverlay(), 26 | ), 27 | Positioned.fill( 28 | child: SafeArea( 29 | minimum: EdgeInsets.only( 30 | left: 20.0, 31 | right: 20.0, 32 | top: 50.0, 33 | bottom: 25.0 34 | ), 35 | child: Column( 36 | crossAxisAlignment: CrossAxisAlignment.stretch, 37 | mainAxisAlignment: MainAxisAlignment.start, 38 | children: [ 39 | Flexible( 40 | flex: 1, 41 | child: Text( 42 | "Welcome to", 43 | style: TextStyle( 44 | color: AppColors.primaryFontColor, 45 | fontSize: 20, 46 | fontWeight: FontWeight.w600 47 | ), 48 | ), 49 | ), 50 | SizedBox(height: 25.0,), 51 | Flexible( 52 | flex: 2, 53 | child: Row( 54 | mainAxisAlignment: MainAxisAlignment.start, 55 | crossAxisAlignment: CrossAxisAlignment.start, 56 | children: [ 57 | Image.asset( 58 | "assets/images/flutter_studio_logo.png", 59 | alignment: Alignment.topLeft, 60 | width: 165, 61 | ), 62 | ], 63 | ), 64 | ), 65 | SizedBox(height: 25.0,), 66 | Flexible( 67 | flex: 14, 68 | child: ListView( 69 | children: [ 70 | Text( 71 | "Flutter Studio is an open source interactive Dart code generator developed in Flutter, the hybrid mobile programming framework based on the Dart language, made by Google.", 72 | style: TextStyle( 73 | fontSize: 14, 74 | color: AppColors.primaryFontColor, 75 | fontWeight: FontWeight.w300, 76 | height: 1.25 77 | ), 78 | ), 79 | SizedBox(height: 25.0,), 80 | Text( 81 | "Initially developed as an official submission for the first ever Flutter International Hackathon, this project aims to help make flutter as fast and easy to learn as possible for beginners as well as seasoned developers.", 82 | style: TextStyle( 83 | fontSize: 14, 84 | color: AppColors.primaryFontColor, 85 | fontWeight: FontWeight.w300, 86 | height: 1.25 87 | ), 88 | ), 89 | SizedBox(height: 25.0,), 90 | Text( 91 | "We hope this project can serve as a starting point to all those who are looking to try out flutter, and in due course of time, can evolve into something much more.", 92 | style: TextStyle( 93 | fontSize: 14, 94 | color: AppColors.primaryFontColor, 95 | fontWeight: FontWeight.w300, 96 | height: 1.25 97 | ), 98 | ), 99 | SizedBox(height: 25.0,), 100 | Text( 101 | "Let's build something great together!", 102 | style: TextStyle( 103 | fontSize: 18, 104 | color: AppColors.primaryFontColor, 105 | fontWeight: FontWeight.w600, 106 | height: 1.25 107 | ), 108 | ), 109 | ], 110 | ), 111 | ), 112 | SizedBox(height: 25.0,), 113 | Flexible( 114 | flex: 2, 115 | fit: FlexFit.loose, 116 | child: CustomButton( 117 | child: Text( 118 | "Get Started", 119 | style: CustomStyles.ButtonTextStyle, 120 | ), 121 | onPressed: () { 122 | Navigator.pushReplacement( 123 | context, 124 | CupertinoPageRoute( 125 | builder: (context) => StudioDashboard(), 126 | ), 127 | ); 128 | }, 129 | ) 130 | ) 131 | ], 132 | ), 133 | ), 134 | ) 135 | ], 136 | ), 137 | ); 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /lib/utils/colors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AppColors extends Color { 4 | 5 | final int colorCode; 6 | const AppColors(this.colorCode) : super(colorCode); 7 | 8 | static const AppColors primaryAppColor = const AppColors(0xFF003A60); 9 | static const AppColors secondaryAppColor = const AppColors(0xFF001320); 10 | static const AppColors primaryFontColor = const AppColors(0xFFFFFFFF); 11 | } -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | archive: 5 | dependency: transitive 6 | description: 7 | name: archive 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.0.10" 11 | args: 12 | dependency: transitive 13 | description: 14 | name: args 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "1.5.2" 18 | async: 19 | dependency: transitive 20 | description: 21 | name: async 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "2.3.0" 25 | boolean_selector: 26 | dependency: transitive 27 | description: 28 | name: boolean_selector 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.0.5" 32 | charcode: 33 | dependency: transitive 34 | description: 35 | name: charcode 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.1.2" 39 | collection: 40 | dependency: transitive 41 | description: 42 | name: collection 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "1.14.11" 46 | convert: 47 | dependency: transitive 48 | description: 49 | name: convert 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "2.1.1" 53 | crypto: 54 | dependency: transitive 55 | description: 56 | name: crypto 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "2.1.3" 60 | cupertino_icons: 61 | dependency: "direct main" 62 | description: 63 | name: cupertino_icons 64 | url: "https://pub.dartlang.org" 65 | source: hosted 66 | version: "0.1.2" 67 | flutter: 68 | dependency: "direct main" 69 | description: flutter 70 | source: sdk 71 | version: "0.0.0" 72 | flutter_launcher_icons: 73 | dependency: "direct dev" 74 | description: 75 | name: flutter_launcher_icons 76 | url: "https://pub.dartlang.org" 77 | source: hosted 78 | version: "0.7.3" 79 | flutter_test: 80 | dependency: "direct dev" 81 | description: flutter 82 | source: sdk 83 | version: "0.0.0" 84 | font_awesome_flutter: 85 | dependency: "direct main" 86 | description: 87 | name: font_awesome_flutter 88 | url: "https://pub.dartlang.org" 89 | source: hosted 90 | version: "8.5.0" 91 | image: 92 | dependency: transitive 93 | description: 94 | name: image 95 | url: "https://pub.dartlang.org" 96 | source: hosted 97 | version: "2.1.4" 98 | matcher: 99 | dependency: transitive 100 | description: 101 | name: matcher 102 | url: "https://pub.dartlang.org" 103 | source: hosted 104 | version: "0.12.5" 105 | meta: 106 | dependency: transitive 107 | description: 108 | name: meta 109 | url: "https://pub.dartlang.org" 110 | source: hosted 111 | version: "1.1.7" 112 | path: 113 | dependency: transitive 114 | description: 115 | name: path 116 | url: "https://pub.dartlang.org" 117 | source: hosted 118 | version: "1.6.4" 119 | path_provider: 120 | dependency: "direct main" 121 | description: 122 | name: path_provider 123 | url: "https://pub.dartlang.org" 124 | source: hosted 125 | version: "1.3.0" 126 | pedantic: 127 | dependency: transitive 128 | description: 129 | name: pedantic 130 | url: "https://pub.dartlang.org" 131 | source: hosted 132 | version: "1.8.0+1" 133 | petitparser: 134 | dependency: transitive 135 | description: 136 | name: petitparser 137 | url: "https://pub.dartlang.org" 138 | source: hosted 139 | version: "2.4.0" 140 | platform: 141 | dependency: transitive 142 | description: 143 | name: platform 144 | url: "https://pub.dartlang.org" 145 | source: hosted 146 | version: "2.2.1" 147 | quiver: 148 | dependency: transitive 149 | description: 150 | name: quiver 151 | url: "https://pub.dartlang.org" 152 | source: hosted 153 | version: "2.0.5" 154 | rxdart: 155 | dependency: "direct main" 156 | description: 157 | name: rxdart 158 | url: "https://pub.dartlang.org" 159 | source: hosted 160 | version: "0.22.2" 161 | share: 162 | dependency: "direct main" 163 | description: 164 | name: share 165 | url: "https://pub.dartlang.org" 166 | source: hosted 167 | version: "0.6.2+1" 168 | simple_permissions: 169 | dependency: "direct main" 170 | description: 171 | name: simple_permissions 172 | url: "https://pub.dartlang.org" 173 | source: hosted 174 | version: "0.1.9" 175 | sky_engine: 176 | dependency: transitive 177 | description: flutter 178 | source: sdk 179 | version: "0.0.99" 180 | source_span: 181 | dependency: transitive 182 | description: 183 | name: source_span 184 | url: "https://pub.dartlang.org" 185 | source: hosted 186 | version: "1.5.5" 187 | stack_trace: 188 | dependency: transitive 189 | description: 190 | name: stack_trace 191 | url: "https://pub.dartlang.org" 192 | source: hosted 193 | version: "1.9.3" 194 | stream_channel: 195 | dependency: transitive 196 | description: 197 | name: stream_channel 198 | url: "https://pub.dartlang.org" 199 | source: hosted 200 | version: "2.0.0" 201 | string_scanner: 202 | dependency: transitive 203 | description: 204 | name: string_scanner 205 | url: "https://pub.dartlang.org" 206 | source: hosted 207 | version: "1.0.5" 208 | term_glyph: 209 | dependency: transitive 210 | description: 211 | name: term_glyph 212 | url: "https://pub.dartlang.org" 213 | source: hosted 214 | version: "1.1.0" 215 | test_api: 216 | dependency: transitive 217 | description: 218 | name: test_api 219 | url: "https://pub.dartlang.org" 220 | source: hosted 221 | version: "0.2.5" 222 | typed_data: 223 | dependency: transitive 224 | description: 225 | name: typed_data 226 | url: "https://pub.dartlang.org" 227 | source: hosted 228 | version: "1.1.6" 229 | vector_math: 230 | dependency: transitive 231 | description: 232 | name: vector_math 233 | url: "https://pub.dartlang.org" 234 | source: hosted 235 | version: "2.0.8" 236 | xml: 237 | dependency: transitive 238 | description: 239 | name: xml 240 | url: "https://pub.dartlang.org" 241 | source: hosted 242 | version: "3.5.0" 243 | yaml: 244 | dependency: transitive 245 | description: 246 | name: yaml 247 | url: "https://pub.dartlang.org" 248 | source: hosted 249 | version: "2.2.0" 250 | sdks: 251 | dart: ">=2.5.0 <3.0.0" 252 | flutter: ">=1.6.0 <2.0.0" 253 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_studio 2 | description: A code generator for flutter 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # In Android, build-name is used as versionName while build-number used as versionCode. 10 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 11 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 12 | # Read more about iOS versioning at 13 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 14 | version: 1.0.0+1 15 | 16 | environment: 17 | sdk: ">=2.5.0 <3.0.0" 18 | 19 | dependencies: 20 | flutter: 21 | sdk: flutter 22 | 23 | # The following adds the Cupertino Icons font to your application. 24 | # Use with the CupertinoIcons class for iOS style icons. 25 | cupertino_icons: ^0.1.2 26 | rxdart: ^0.22.0 27 | font_awesome_flutter: ^8.4.0 28 | share: any 29 | path_provider: any 30 | simple_permissions: any 31 | 32 | dev_dependencies: 33 | flutter_test: 34 | sdk: flutter 35 | flutter_launcher_icons: "^0.7.3" 36 | 37 | flutter_icons: 38 | android: true 39 | ios: true 40 | image_path: "assets/images/app_launcher_icon_legacy.png" 41 | adaptive_icon_background: "#003A60" 42 | adaptive_icon_foreground: "assets/images/app_launcher_icon.png" 43 | 44 | 45 | 46 | # For information on the generic Dart part of this file, see the 47 | # following page: https://www.dartlang.org/tools/pub/pubspec 48 | 49 | # The following section is specific to Flutter. 50 | flutter: 51 | 52 | # The following line ensures that the Material Icons font is 53 | # included with your application, so that you can use the icons in 54 | # the material Icons class. 55 | uses-material-design: true 56 | 57 | # To add assets to your application, add an assets section, like this: 58 | assets: 59 | - assets/images/flutter_studio_logo.png 60 | 61 | # An image asset can refer to one or more resolution-specific "variants", see 62 | # https://flutter.io/assets-and-images/#resolution-aware. 63 | 64 | # For details regarding adding assets from package dependencies, see 65 | # https://flutter.io/assets-and-images/#from-packages 66 | 67 | # To add custom fonts to your application, add a fonts section here, 68 | # in this "flutter" section. Each entry in this list should have a 69 | # "family" key with the font family name, and a "fonts" key with a 70 | # list giving the asset and other descriptors for the font. For 71 | # example: 72 | # fonts: 73 | # - family: Schyler 74 | # fonts: 75 | # - asset: fonts/Schyler-Regular.ttf 76 | # - asset: fonts/Schyler-Italic.ttf 77 | # style: italic 78 | # - family: Trajan Pro 79 | # fonts: 80 | # - asset: fonts/TrajanPro.ttf 81 | # - asset: fonts/TrajanPro_Bold.ttf 82 | # weight: 700 83 | # 84 | # For details regarding fonts from package dependencies, 85 | # see https://flutter.io/custom-fonts/#from-packages 86 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:flutter_studio/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Flutter Studio Test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(FlutterStudio()); 17 | }); 18 | } 19 | --------------------------------------------------------------------------------