├── .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 | 
2 |
3 | ## Archived
4 | > This project is now archived and is being no longer actively maintained
5 |
6 |
7 | 
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 |
--------------------------------------------------------------------------------