├── .firebaserc
├── .github
└── FUNDING.yml
├── .gitignore
├── .metadata
├── LICENSE.md
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── layout_demo_flutter
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-hdpi
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable-mdpi
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable-xhdpi
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable-xxhdpi
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable-xxxhdpi
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ └── launcher_icon.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
├── assets
├── anton-repponen-99530-unsplash.jpg
├── brady-bellini-212790-unsplash.jpg
├── icon
│ ├── icon-background.png
│ ├── icon-foreground.png
│ └── icon.png
├── kevin-cochran-524957-unsplash.jpg
├── meng-ji-102492-unsplash.jpg
├── ronnie-mayo-361348-unsplash.jpg
├── samsommer-72299-unsplash.jpg
├── simon-fitall-530083-unsplash.jpg
├── simon-matzinger-320332-unsplash.jpg
└── stefan-stefancik-105587-unsplash.jpg
├── firebase.json
├── flutter-stack.sketch
├── ios
├── .gitignore
├── Flutter
│ ├── .last_build_id
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-App-1024x1024@1x.png
│ │ ├── Icon-App-20x20@1x.png
│ │ ├── Icon-App-20x20@2x.png
│ │ ├── Icon-App-20x20@3x.png
│ │ ├── Icon-App-29x29@1x.png
│ │ ├── Icon-App-29x29@2x.png
│ │ ├── Icon-App-29x29@3x.png
│ │ ├── Icon-App-40x40@1x.png
│ │ ├── Icon-App-40x40@2x.png
│ │ ├── Icon-App-40x40@3x.png
│ │ ├── Icon-App-50x50@1x.png
│ │ ├── Icon-App-50x50@2x.png
│ │ ├── Icon-App-57x57@1x.png
│ │ ├── Icon-App-57x57@2x.png
│ │ ├── Icon-App-60x60@2x.png
│ │ ├── Icon-App-60x60@3x.png
│ │ ├── Icon-App-72x72@1x.png
│ │ ├── Icon-App-72x72@2x.png
│ │ ├── Icon-App-76x76@1x.png
│ │ ├── Icon-App-76x76@2x.png
│ │ ├── Icon-App-83.5x83.5@2x.png
│ │ ├── flutter-stack1024.png
│ │ ├── flutter-stackn20.png
│ │ ├── flutter-stackn40-1.png
│ │ ├── flutter-stackn40-2.png
│ │ ├── flutter-stackn40.png
│ │ ├── flutter-stackn60.png
│ │ ├── flutter-stackp152.png
│ │ ├── flutter-stackp167.png
│ │ ├── flutter-stackp76.png
│ │ ├── flutter-stacks120-1.png
│ │ ├── flutter-stacks120.png
│ │ ├── flutter-stacks180.png
│ │ ├── flutter-stacks29-1.png
│ │ ├── flutter-stacks29.png
│ │ ├── flutter-stacks58-1.png
│ │ ├── flutter-stacks58.png
│ │ ├── flutter-stacks80-1.png
│ │ ├── flutter-stacks80.png
│ │ └── flutter-stacks87.png
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
├── layout_demo_flutter.iml
├── layout_demo_flutter_android.iml
├── lib
├── layout_attribute_selector.dart
├── layout_type.dart
├── main.dart
├── main_page.dart
└── pages
│ ├── baseline_layout_attributes.dart
│ ├── baseline_page.dart
│ ├── expanded_page.dart
│ ├── hero_page.dart
│ ├── list_page.dart
│ ├── main_app_bar.dart
│ ├── nested_page.dart
│ ├── padding_page.dart
│ ├── page_view_page.dart
│ ├── row_column_layout_attributes.dart
│ ├── row_column_page.dart
│ ├── slivers_page.dart
│ ├── stack_layout_attributes.dart
│ └── stack_page.dart
├── macos
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ ├── Flutter-Release.xcconfig
│ └── GeneratedPluginRegistrant.swift
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── app_icon_1024.png
│ │ ├── app_icon_128.png
│ │ ├── app_icon_16.png
│ │ ├── app_icon_256.png
│ │ ├── app_icon_32.png
│ │ ├── app_icon_512.png
│ │ └── app_icon_64.png
│ ├── Base.lproj
│ └── MainMenu.xib
│ ├── Configs
│ ├── AppInfo.xcconfig
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── Warnings.xcconfig
│ ├── DebugProfile.entitlements
│ ├── Info.plist
│ ├── MainFlutterWindow.swift
│ └── Release.entitlements
├── pubspec.lock
├── pubspec.yaml
├── screenshots
├── baseline.png
├── expanded.png
├── hero.jpg
├── list.png
├── nested.png
├── padding.png
├── page-view.png
├── row-column.png
├── slivers.png
├── stack.png
├── video-poster.png
└── video-poster2.jpg
├── test
└── widget_test.dart
└── web
├── favicon.png
├── icons
├── Icon-192.png
├── Icon-512.png
├── Icon-maskable-192.png
└── Icon-maskable-512.png
├── index.html
└── manifest.json
/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "flutter-layouts-demo"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: bizz84
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.lock
4 | *.log
5 | *.pyc
6 | *.swp
7 | .DS_Store
8 | .atom/
9 | .buildlog/
10 | .history
11 | .svn/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 |
19 | # Visual Studio Code related
20 | .vscode/
21 |
22 | # Flutter repo-specific
23 | /bin/cache/
24 | /bin/mingit/
25 | /dev/benchmarks/mega_gallery/
26 | /dev/bots/.recipe_deps
27 | /dev/bots/android_tools/
28 | /dev/docs/doc/
29 | /dev/docs/flutter.docs.zip
30 | /dev/docs/lib/
31 | /dev/docs/pubspec.yaml
32 | /packages/flutter/coverage/
33 | version
34 |
35 | # Flutter/Dart/Pub related
36 | **/doc/api/
37 | .dart_tool/
38 | .flutter-plugins
39 | .packages
40 | .pub-cache/
41 | .pub/
42 | build/
43 | flutter_*.png
44 | linked_*.ds
45 | unlinked.ds
46 | unlinked_spec.ds
47 | .flutter-plugins-dependencies
48 |
49 | # Android related
50 | **/android/**/gradle-wrapper.jar
51 | **/android/.gradle
52 | **/android/captures/
53 | **/android/gradlew
54 | **/android/gradlew.bat
55 | **/android/local.properties
56 | **/android/**/GeneratedPluginRegistrant.java
57 | **/android/key.properties
58 | *.jks
59 |
60 | # iOS/XCode related
61 | **/ios/**/*.mode1v3
62 | **/ios/**/*.mode2v3
63 | **/ios/**/*.moved-aside
64 | **/ios/**/*.pbxuser
65 | **/ios/**/*.perspectivev3
66 | **/ios/**/*sync/
67 | **/ios/**/.sconsign.dblite
68 | **/ios/**/.tags*
69 | **/ios/**/.vagrant/
70 | **/ios/**/DerivedData/
71 | **/ios/**/Icon?
72 | **/ios/**/Pods/
73 | **/ios/**/.symlinks/
74 | **/ios/**/profile
75 | **/ios/**/xcuserdata
76 | **/ios/.generated/
77 | **/ios/Flutter/App.framework
78 | **/ios/Flutter/Flutter.framework
79 | **/ios/Flutter/Generated.xcconfig
80 | **/ios/Flutter/app.flx
81 | **/ios/Flutter/app.zip
82 | **/ios/Flutter/flutter_assets/
83 | **/ios/ServiceDefinitions.json
84 | **/ios/Runner/GeneratedPluginRegistrant.*
85 | **/ios/Flutter/flutter_export_environment.sh
86 |
87 | # Web related
88 | .firebase/hosting*
89 |
90 | # web
91 | web/firebase-config.js
92 |
93 | # Firebase
94 | public/
95 |
96 | # Exceptions to above rules.
97 | !**/ios/**/default.mode1v3
98 | !**/ios/**/default.mode2v3
99 | !**/ios/**/default.pbxuser
100 | !**/ios/**/default.perspectivev3
101 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
102 |
103 | # Firebase configuration files
104 | ios/Runner/GoogleService-Info.plist
105 | android/app/google-services.json
--------------------------------------------------------------------------------
/.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: "db7ef5bf9f59442b0e200a90587e8fa5e0c6336a"
8 | channel: "stable"
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
17 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
18 | - platform: android
19 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
20 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
21 |
22 | # User provided section
23 |
24 | # List of Local paths (relative to this file) that should be
25 | # ignored by the migrate tool.
26 | #
27 | # Files that are not part of the templates will be ignored by default.
28 | unmanaged_files:
29 | - 'lib/main.dart'
30 | - 'ios/Runner.xcodeproj/project.pbxproj'
31 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) 2018 Andrea Bizzotto [bizz84@gmail.com](mailto:bizz84@gmail.com)
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4 |
5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6 |
7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Super Useful Flutter Layouts - Right in Your Pocket. 😉
2 |
3 | **Update**: Flutter web app preview here: [https://flutter-layouts-demo.web.app/](https://flutter-layouts-demo.web.app/)
4 |
5 | YouTube video walkthroughs with explanations here:
6 |
7 | [](https://www.youtube.com/watch?v=RJEnTRBxaSg)
8 |
9 | [](https://www.youtube.com/watch?v=-zJ6CnOVndE)
10 |
11 | This app shows you how to use the most common layouts in Flutter.
12 |
13 | You can run this project on your simulator or device.
14 |
15 | Oh, and the app itself is built with - guess what - a combination of Flutter layouts. So Meta! 😎
16 |
17 | ### For more articles and video tutorials, check out [Coding With Flutter](https://codingwithflutter.com/).
18 |
19 | # Table of Contents
20 |
21 | - [Table of Contents](#table-of-contents)
22 | - [Row / Column](#row--column)
23 | - [Baseline](#baseline)
24 | - [Stack](#stack)
25 | - [Expanded](#expanded)
26 | - [Padding](#padding)
27 | - [PageView](#pageview)
28 | - [ListView](#listview)
29 | - [Slivers](#slivers)
30 | - [Hero Image](#hero-image)
31 | - [Nested Lists](#nested-lists)
32 | - [For more articles and video tutorials, check out Code With Andrea.](#for-more-articles-and-video-tutorials-check-out-code-with-andrea)
33 | - [License: MIT](#license-mit)
34 | - [Attribution](#attribution)
35 |
36 | ## Row / Column
37 |
38 | - [Row](https://docs.flutter.io/flutter/widgets/Row-class.html)
39 | - [Column](https://docs.flutter.io/flutter/widgets/Column-class.html)
40 | - [MainAxisAlignment](https://docs.flutter.io/flutter/rendering/MainAxisAlignment-class.html)
41 | - [MainAxisSize](https://docs.flutter.io/flutter/rendering/MainAxisSize-class.html)
42 | - [CrossAxisAlignment](https://docs.flutter.io/flutter/rendering/CrossAxisAlignment-class.html)
43 |
44 |
45 |
46 | ## Baseline
47 |
48 | - [Baseline](https://docs.flutter.io/flutter/widgets/Baseline-class.html)
49 | - [CrossAxisAlignment](https://docs.flutter.io/flutter/rendering/CrossAxisAlignment-class.html)
50 |
51 |
52 |
53 | ## Stack
54 |
55 | - [Stack](https://docs.flutter.io/flutter/widgets/Stack-class.html)
56 | - [AlignmentDirectional](https://docs.flutter.io/flutter/painting/AlignmentDirectional-class.html)
57 | - [Positioned](https://docs.flutter.io/flutter/widgets/Positioned-class.html)
58 |
59 |
60 |
61 | ## Expanded
62 |
63 | Wikipedia: [Golden Spiral](https://en.wikipedia.org/wiki/Golden_spiral) (also: Fibonacci, Golden Ratio).
64 |
65 | - [Expanded](https://docs.flutter.io/flutter/widgets/Expanded-class.html)
66 | - [LayoutBuilder](https://docs.flutter.io/flutter/widgets/LayoutBuilder-class.html)
67 |
68 |
69 |
70 | ## Padding
71 |
72 | - [Expanded](https://docs.flutter.io/flutter/widgets/Expanded-class.html)
73 | - [SizedBox](https://docs.flutter.io/flutter/widgets/SizedBox-class.html)
74 |
75 |
76 |
77 | ## PageView
78 |
79 | - [PageView](https://docs.flutter.io/flutter/widgets/PageView-class.html)
80 |
81 |
82 |
83 | ## ListView
84 |
85 | - [ListView](https://docs.flutter.io/flutter/widgets/ListView-class.html)
86 | - [ListTile](https://docs.flutter.io/flutter/material/ListTile-class.html)
87 |
88 |
89 |
90 | ## Slivers
91 |
92 | - [CustomScrollView](https://docs.flutter.io/flutter/widgets/CustomScrollView-class.html)
93 | - [SliverAppBar](https://docs.flutter.io/flutter/material/SliverAppBar-class.html)
94 | - [SliverGrid](https://docs.flutter.io/flutter/widgets/SliverGrid-class.html)
95 | - [SliverFixedExtentList](https://docs.flutter.io/flutter/widgets/SliverFixedExtentList-class.html)
96 |
97 |
98 |
99 | ## Hero Image
100 |
101 | - [Stack](https://docs.flutter.io/flutter/widgets/Stack-class.html)
102 | - [Positioned](https://docs.flutter.io/flutter/widgets/Positioned-class.html)
103 | - [SafeArea](https://docs.flutter.io/flutter/widgets/SafeArea-class.html)
104 | - [SliverPersistentHeader](https://docs.flutter.io/flutter/widgets/SliverPersistentHeader-class.html)
105 | - [SliverGrid](https://docs.flutter.io/flutter/widgets/SliverGrid-class.html)
106 |
107 |
108 |
109 | ## Nested Lists
110 |
111 | - [ListView](https://docs.flutter.io/flutter/widgets/ListView-class.html)
112 |
113 |
114 |
115 |
116 | ### For more articles and video tutorials, check out [Code With Andrea](https://codewithandrea.com/).
117 |
118 | ### [License: MIT](LICENSE.md)
119 |
120 | ### Attribution
121 |
122 | Youtube Play Icon by [Youtube Clipart](http://clipartmag.com/youtube-clipart).
123 |
124 |
125 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at
17 | # https://dart-lang.github.io/linter/lints/index.html.
18 | #
19 | # Instead of disabling a lint rule for the entire project in the
20 | # section below, it can also be suppressed for a single line of code
21 | # or a specific dart file by using the `// ignore: name_of_lint` and
22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
23 | # producing the lint.
24 | rules:
25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 |
28 | # Additional information about this file can be found at
29 | # https://dart.dev/guides/language/analysis-options
30 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id "com.android.application"
3 | id "kotlin-android"
4 | id "dev.flutter.flutter-gradle-plugin"
5 | }
6 |
7 | def localProperties = new Properties()
8 | def localPropertiesFile = rootProject.file('local.properties')
9 | if (localPropertiesFile.exists()) {
10 | localPropertiesFile.withReader('UTF-8') { reader ->
11 | localProperties.load(reader)
12 | }
13 | }
14 |
15 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
16 | if (flutterVersionCode == null) {
17 | flutterVersionCode = '1'
18 | }
19 |
20 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
21 | if (flutterVersionName == null) {
22 | flutterVersionName = '1.0'
23 | }
24 |
25 | android {
26 | namespace "com.example.layout_demo_flutter"
27 | compileSdkVersion flutter.compileSdkVersion
28 | ndkVersion flutter.ndkVersion
29 |
30 | compileOptions {
31 | sourceCompatibility JavaVersion.VERSION_1_8
32 | targetCompatibility JavaVersion.VERSION_1_8
33 | }
34 |
35 | kotlinOptions {
36 | jvmTarget = '1.8'
37 | }
38 |
39 | sourceSets {
40 | main.java.srcDirs += 'src/main/kotlin'
41 | }
42 |
43 | defaultConfig {
44 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
45 | applicationId "com.example.layout_demo_flutter"
46 | // You can update the following values to match your application needs.
47 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
48 | minSdkVersion flutter.minSdkVersion
49 | targetSdkVersion flutter.targetSdkVersion
50 | versionCode flutterVersionCode.toInteger()
51 | versionName flutterVersionName
52 | }
53 |
54 | buildTypes {
55 | release {
56 | // TODO: Add your own signing config for the release build.
57 | // Signing with the debug keys for now, so `flutter run --release` works.
58 | signingConfig signingConfigs.debug
59 | }
60 | }
61 | }
62 |
63 | flutter {
64 | source '../..'
65 | }
66 |
67 | dependencies {}
68 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
14 |
18 |
22 |
23 |
24 |
25 |
26 |
27 |
29 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/layout_demo_flutter/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.layout_demo_flutter
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/mipmap-hdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/mipmap-mdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.7.10'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
10 | }
11 | }
12 |
13 | allprojects {
14 | repositories {
15 | google()
16 | mavenCentral()
17 | }
18 | }
19 |
20 | rootProject.buildDir = '../build'
21 | subprojects {
22 | project.buildDir = "${rootProject.buildDir}/${project.name}"
23 | }
24 | subprojects {
25 | project.evaluationDependsOn(':app')
26 | }
27 |
28 | tasks.register("clean", Delete) {
29 | delete rootProject.buildDir
30 | }
31 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
6 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | def flutterSdkPath = {
3 | def properties = new Properties()
4 | file("local.properties").withInputStream { properties.load(it) }
5 | def flutterSdkPath = properties.getProperty("flutter.sdk")
6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
7 | return flutterSdkPath
8 | }
9 | settings.ext.flutterSdkPath = flutterSdkPath()
10 |
11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
12 |
13 | repositories {
14 | google()
15 | mavenCentral()
16 | gradlePluginPortal()
17 | }
18 |
19 | plugins {
20 | id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
21 | }
22 | }
23 |
24 | plugins {
25 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
26 | id "com.android.application" version "7.3.0" apply false
27 | }
28 |
29 | include ":app"
30 |
--------------------------------------------------------------------------------
/assets/anton-repponen-99530-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/anton-repponen-99530-unsplash.jpg
--------------------------------------------------------------------------------
/assets/brady-bellini-212790-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/brady-bellini-212790-unsplash.jpg
--------------------------------------------------------------------------------
/assets/icon/icon-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/icon/icon-background.png
--------------------------------------------------------------------------------
/assets/icon/icon-foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/icon/icon-foreground.png
--------------------------------------------------------------------------------
/assets/icon/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/icon/icon.png
--------------------------------------------------------------------------------
/assets/kevin-cochran-524957-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/kevin-cochran-524957-unsplash.jpg
--------------------------------------------------------------------------------
/assets/meng-ji-102492-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/meng-ji-102492-unsplash.jpg
--------------------------------------------------------------------------------
/assets/ronnie-mayo-361348-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/ronnie-mayo-361348-unsplash.jpg
--------------------------------------------------------------------------------
/assets/samsommer-72299-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/samsommer-72299-unsplash.jpg
--------------------------------------------------------------------------------
/assets/simon-fitall-530083-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/simon-fitall-530083-unsplash.jpg
--------------------------------------------------------------------------------
/assets/simon-matzinger-320332-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/simon-matzinger-320332-unsplash.jpg
--------------------------------------------------------------------------------
/assets/stefan-stefancik-105587-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/assets/stefan-stefancik-105587-unsplash.jpg
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "hosting": {
3 | "public": "build/web",
4 | "ignore": [
5 | "firebase.json",
6 | "**/.*",
7 | "**/node_modules/**"
8 | ],
9 | "rewrites": [
10 | {
11 | "source": "**",
12 | "destination": "/index.html"
13 | }
14 | ]
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/flutter-stack.sketch:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/flutter-stack.sketch
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | .vagrant/
3 | .sconsign.dblite
4 | .svn/
5 |
6 | .DS_Store
7 | *.swp
8 | profile
9 |
10 | DerivedData/
11 | build/
12 | GeneratedPluginRegistrant.h
13 | GeneratedPluginRegistrant.m
14 |
15 | .generated/
16 |
17 | *.pbxuser
18 | *.mode1v3
19 | *.mode2v3
20 | *.perspectivev3
21 |
22 | !default.pbxuser
23 | !default.mode1v3
24 | !default.mode2v3
25 | !default.perspectivev3
26 |
27 | xcuserdata
28 |
29 | *.moved-aside
30 |
31 | *.pyc
32 | *sync/
33 | Icon?
34 | .tags*
35 |
36 | /Flutter/app.flx
37 | /Flutter/app.zip
38 | /Flutter/flutter_assets/
39 | /Flutter/App.framework
40 | /Flutter/Flutter.framework
41 | /Flutter/Generated.xcconfig
42 | /ServiceDefinitions.json
43 |
44 | Pods/
45 |
--------------------------------------------------------------------------------
/ios/Flutter/.last_build_id:
--------------------------------------------------------------------------------
1 | 1c0a6ec2d510714733dd535b86194cdf
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
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 | 11.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXCopyFilesBuildPhase section */
19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
20 | isa = PBXCopyFilesBuildPhase;
21 | buildActionMask = 2147483647;
22 | dstPath = "";
23 | dstSubfolderSpec = 10;
24 | files = (
25 | );
26 | name = "Embed Frameworks";
27 | runOnlyForDeploymentPostprocessing = 0;
28 | };
29 | /* End PBXCopyFilesBuildPhase section */
30 |
31 | /* Begin PBXFileReference section */
32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
45 | /* End PBXFileReference section */
46 |
47 | /* Begin PBXFrameworksBuildPhase section */
48 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
49 | isa = PBXFrameworksBuildPhase;
50 | buildActionMask = 2147483647;
51 | files = (
52 | );
53 | runOnlyForDeploymentPostprocessing = 0;
54 | };
55 | /* End PBXFrameworksBuildPhase section */
56 |
57 | /* Begin PBXGroup section */
58 | 9740EEB11CF90186004384FC /* Flutter */ = {
59 | isa = PBXGroup;
60 | children = (
61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
65 | );
66 | name = Flutter;
67 | sourceTree = "";
68 | };
69 | 97C146E51CF9000F007C117D = {
70 | isa = PBXGroup;
71 | children = (
72 | 9740EEB11CF90186004384FC /* Flutter */,
73 | 97C146F01CF9000F007C117D /* Runner */,
74 | 97C146EF1CF9000F007C117D /* Products */,
75 | );
76 | sourceTree = "";
77 | };
78 | 97C146EF1CF9000F007C117D /* Products */ = {
79 | isa = PBXGroup;
80 | children = (
81 | 97C146EE1CF9000F007C117D /* Runner.app */,
82 | );
83 | name = Products;
84 | sourceTree = "";
85 | };
86 | 97C146F01CF9000F007C117D /* Runner */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
92 | 97C147021CF9000F007C117D /* Info.plist */,
93 | 97C146F11CF9000F007C117D /* Supporting Files */,
94 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
95 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
96 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
97 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
98 | );
99 | path = Runner;
100 | sourceTree = "";
101 | };
102 | 97C146F11CF9000F007C117D /* Supporting Files */ = {
103 | isa = PBXGroup;
104 | children = (
105 | );
106 | name = "Supporting Files";
107 | sourceTree = "";
108 | };
109 | /* End PBXGroup section */
110 |
111 | /* Begin PBXNativeTarget section */
112 | 97C146ED1CF9000F007C117D /* Runner */ = {
113 | isa = PBXNativeTarget;
114 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
115 | buildPhases = (
116 | 9740EEB61CF901F6004384FC /* Run Script */,
117 | 97C146EA1CF9000F007C117D /* Sources */,
118 | 97C146EB1CF9000F007C117D /* Frameworks */,
119 | 97C146EC1CF9000F007C117D /* Resources */,
120 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
121 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
122 | );
123 | buildRules = (
124 | );
125 | dependencies = (
126 | );
127 | name = Runner;
128 | productName = Runner;
129 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
130 | productType = "com.apple.product-type.application";
131 | };
132 | /* End PBXNativeTarget section */
133 |
134 | /* Begin PBXProject section */
135 | 97C146E61CF9000F007C117D /* Project object */ = {
136 | isa = PBXProject;
137 | attributes = {
138 | LastUpgradeCheck = 1430;
139 | ORGANIZATIONNAME = "";
140 | TargetAttributes = {
141 | 97C146ED1CF9000F007C117D = {
142 | CreatedOnToolsVersion = 7.3.1;
143 | LastSwiftMigration = 1100;
144 | };
145 | };
146 | };
147 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
148 | compatibilityVersion = "Xcode 9.3";
149 | developmentRegion = en;
150 | hasScannedForEncodings = 0;
151 | knownRegions = (
152 | en,
153 | Base,
154 | );
155 | mainGroup = 97C146E51CF9000F007C117D;
156 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
157 | projectDirPath = "";
158 | projectRoot = "";
159 | targets = (
160 | 97C146ED1CF9000F007C117D /* Runner */,
161 | );
162 | };
163 | /* End PBXProject section */
164 |
165 | /* Begin PBXResourcesBuildPhase section */
166 | 97C146EC1CF9000F007C117D /* Resources */ = {
167 | isa = PBXResourcesBuildPhase;
168 | buildActionMask = 2147483647;
169 | files = (
170 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
171 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
172 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
173 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
174 | );
175 | runOnlyForDeploymentPostprocessing = 0;
176 | };
177 | /* End PBXResourcesBuildPhase section */
178 |
179 | /* Begin PBXShellScriptBuildPhase section */
180 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
181 | isa = PBXShellScriptBuildPhase;
182 | alwaysOutOfDate = 1;
183 | buildActionMask = 2147483647;
184 | files = (
185 | );
186 | inputPaths = (
187 | "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
188 | );
189 | name = "Thin Binary";
190 | outputPaths = (
191 | );
192 | runOnlyForDeploymentPostprocessing = 0;
193 | shellPath = /bin/sh;
194 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
195 | };
196 | 9740EEB61CF901F6004384FC /* Run Script */ = {
197 | isa = PBXShellScriptBuildPhase;
198 | alwaysOutOfDate = 1;
199 | buildActionMask = 2147483647;
200 | files = (
201 | );
202 | inputPaths = (
203 | );
204 | name = "Run Script";
205 | outputPaths = (
206 | );
207 | runOnlyForDeploymentPostprocessing = 0;
208 | shellPath = /bin/sh;
209 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
210 | };
211 | /* End PBXShellScriptBuildPhase section */
212 |
213 | /* Begin PBXSourcesBuildPhase section */
214 | 97C146EA1CF9000F007C117D /* Sources */ = {
215 | isa = PBXSourcesBuildPhase;
216 | buildActionMask = 2147483647;
217 | files = (
218 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
219 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
220 | );
221 | runOnlyForDeploymentPostprocessing = 0;
222 | };
223 | /* End PBXSourcesBuildPhase section */
224 |
225 | /* Begin PBXVariantGroup section */
226 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
227 | isa = PBXVariantGroup;
228 | children = (
229 | 97C146FB1CF9000F007C117D /* Base */,
230 | );
231 | name = Main.storyboard;
232 | sourceTree = "";
233 | };
234 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
235 | isa = PBXVariantGroup;
236 | children = (
237 | 97C147001CF9000F007C117D /* Base */,
238 | );
239 | name = LaunchScreen.storyboard;
240 | sourceTree = "";
241 | };
242 | /* End PBXVariantGroup section */
243 |
244 | /* Begin XCBuildConfiguration section */
245 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
246 | isa = XCBuildConfiguration;
247 | buildSettings = {
248 | ALWAYS_SEARCH_USER_PATHS = NO;
249 | CLANG_ANALYZER_NONNULL = YES;
250 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
251 | CLANG_CXX_LIBRARY = "libc++";
252 | CLANG_ENABLE_MODULES = YES;
253 | CLANG_ENABLE_OBJC_ARC = YES;
254 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
255 | CLANG_WARN_BOOL_CONVERSION = YES;
256 | CLANG_WARN_COMMA = YES;
257 | CLANG_WARN_CONSTANT_CONVERSION = YES;
258 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
259 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
260 | CLANG_WARN_EMPTY_BODY = YES;
261 | CLANG_WARN_ENUM_CONVERSION = YES;
262 | CLANG_WARN_INFINITE_RECURSION = YES;
263 | CLANG_WARN_INT_CONVERSION = YES;
264 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
265 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
266 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
267 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
268 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
269 | CLANG_WARN_STRICT_PROTOTYPES = YES;
270 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
271 | CLANG_WARN_UNREACHABLE_CODE = YES;
272 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
273 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
274 | COPY_PHASE_STRIP = NO;
275 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
276 | ENABLE_NS_ASSERTIONS = NO;
277 | ENABLE_STRICT_OBJC_MSGSEND = YES;
278 | GCC_C_LANGUAGE_STANDARD = gnu99;
279 | GCC_NO_COMMON_BLOCKS = YES;
280 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
281 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
282 | GCC_WARN_UNDECLARED_SELECTOR = YES;
283 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
284 | GCC_WARN_UNUSED_FUNCTION = YES;
285 | GCC_WARN_UNUSED_VARIABLE = YES;
286 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
287 | MTL_ENABLE_DEBUG_INFO = NO;
288 | SDKROOT = iphoneos;
289 | SUPPORTED_PLATFORMS = iphoneos;
290 | TARGETED_DEVICE_FAMILY = "1,2";
291 | VALIDATE_PRODUCT = YES;
292 | };
293 | name = Profile;
294 | };
295 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
296 | isa = XCBuildConfiguration;
297 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
298 | buildSettings = {
299 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
300 | CLANG_ENABLE_MODULES = YES;
301 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
302 | ENABLE_BITCODE = NO;
303 | FRAMEWORK_SEARCH_PATHS = (
304 | "$(inherited)",
305 | "$(PROJECT_DIR)/Flutter",
306 | );
307 | INFOPLIST_FILE = Runner/Info.plist;
308 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
309 | LIBRARY_SEARCH_PATHS = (
310 | "$(inherited)",
311 | "$(PROJECT_DIR)/Flutter",
312 | );
313 | PRODUCT_BUNDLE_IDENTIFIER = com.example.layoutDemoFlutter;
314 | PRODUCT_NAME = "$(TARGET_NAME)";
315 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
316 | SWIFT_VERSION = 5.0;
317 | VERSIONING_SYSTEM = "apple-generic";
318 | };
319 | name = Profile;
320 | };
321 | 97C147031CF9000F007C117D /* Debug */ = {
322 | isa = XCBuildConfiguration;
323 | buildSettings = {
324 | ALWAYS_SEARCH_USER_PATHS = NO;
325 | CLANG_ANALYZER_NONNULL = YES;
326 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
327 | CLANG_CXX_LIBRARY = "libc++";
328 | CLANG_ENABLE_MODULES = YES;
329 | CLANG_ENABLE_OBJC_ARC = YES;
330 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
331 | CLANG_WARN_BOOL_CONVERSION = YES;
332 | CLANG_WARN_COMMA = YES;
333 | CLANG_WARN_CONSTANT_CONVERSION = YES;
334 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
335 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
336 | CLANG_WARN_EMPTY_BODY = YES;
337 | CLANG_WARN_ENUM_CONVERSION = YES;
338 | CLANG_WARN_INFINITE_RECURSION = YES;
339 | CLANG_WARN_INT_CONVERSION = YES;
340 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
341 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
342 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
343 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
344 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
345 | CLANG_WARN_STRICT_PROTOTYPES = YES;
346 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
347 | CLANG_WARN_UNREACHABLE_CODE = YES;
348 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
349 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
350 | COPY_PHASE_STRIP = NO;
351 | DEBUG_INFORMATION_FORMAT = dwarf;
352 | ENABLE_STRICT_OBJC_MSGSEND = YES;
353 | ENABLE_TESTABILITY = YES;
354 | GCC_C_LANGUAGE_STANDARD = gnu99;
355 | GCC_DYNAMIC_NO_PIC = NO;
356 | GCC_NO_COMMON_BLOCKS = YES;
357 | GCC_OPTIMIZATION_LEVEL = 0;
358 | GCC_PREPROCESSOR_DEFINITIONS = (
359 | "DEBUG=1",
360 | "$(inherited)",
361 | );
362 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
363 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
364 | GCC_WARN_UNDECLARED_SELECTOR = YES;
365 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
366 | GCC_WARN_UNUSED_FUNCTION = YES;
367 | GCC_WARN_UNUSED_VARIABLE = YES;
368 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
369 | MTL_ENABLE_DEBUG_INFO = YES;
370 | ONLY_ACTIVE_ARCH = YES;
371 | SDKROOT = iphoneos;
372 | TARGETED_DEVICE_FAMILY = "1,2";
373 | };
374 | name = Debug;
375 | };
376 | 97C147041CF9000F007C117D /* Release */ = {
377 | isa = XCBuildConfiguration;
378 | buildSettings = {
379 | ALWAYS_SEARCH_USER_PATHS = NO;
380 | CLANG_ANALYZER_NONNULL = YES;
381 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
382 | CLANG_CXX_LIBRARY = "libc++";
383 | CLANG_ENABLE_MODULES = YES;
384 | CLANG_ENABLE_OBJC_ARC = YES;
385 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
386 | CLANG_WARN_BOOL_CONVERSION = YES;
387 | CLANG_WARN_COMMA = YES;
388 | CLANG_WARN_CONSTANT_CONVERSION = YES;
389 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
390 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
391 | CLANG_WARN_EMPTY_BODY = YES;
392 | CLANG_WARN_ENUM_CONVERSION = YES;
393 | CLANG_WARN_INFINITE_RECURSION = YES;
394 | CLANG_WARN_INT_CONVERSION = YES;
395 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
396 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
397 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
398 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
399 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
400 | CLANG_WARN_STRICT_PROTOTYPES = YES;
401 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
402 | CLANG_WARN_UNREACHABLE_CODE = YES;
403 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
404 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
405 | COPY_PHASE_STRIP = NO;
406 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
407 | ENABLE_NS_ASSERTIONS = NO;
408 | ENABLE_STRICT_OBJC_MSGSEND = YES;
409 | GCC_C_LANGUAGE_STANDARD = gnu99;
410 | GCC_NO_COMMON_BLOCKS = YES;
411 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
412 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
413 | GCC_WARN_UNDECLARED_SELECTOR = YES;
414 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
415 | GCC_WARN_UNUSED_FUNCTION = YES;
416 | GCC_WARN_UNUSED_VARIABLE = YES;
417 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
418 | MTL_ENABLE_DEBUG_INFO = NO;
419 | SDKROOT = iphoneos;
420 | SUPPORTED_PLATFORMS = iphoneos;
421 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
422 | TARGETED_DEVICE_FAMILY = "1,2";
423 | VALIDATE_PRODUCT = YES;
424 | };
425 | name = Release;
426 | };
427 | 97C147061CF9000F007C117D /* Debug */ = {
428 | isa = XCBuildConfiguration;
429 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
430 | buildSettings = {
431 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
432 | CLANG_ENABLE_MODULES = YES;
433 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
434 | ENABLE_BITCODE = NO;
435 | FRAMEWORK_SEARCH_PATHS = (
436 | "$(inherited)",
437 | "$(PROJECT_DIR)/Flutter",
438 | );
439 | INFOPLIST_FILE = Runner/Info.plist;
440 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
441 | LIBRARY_SEARCH_PATHS = (
442 | "$(inherited)",
443 | "$(PROJECT_DIR)/Flutter",
444 | );
445 | PRODUCT_BUNDLE_IDENTIFIER = com.example.layoutDemoFlutter;
446 | PRODUCT_NAME = "$(TARGET_NAME)";
447 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
448 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
449 | SWIFT_VERSION = 5.0;
450 | VERSIONING_SYSTEM = "apple-generic";
451 | };
452 | name = Debug;
453 | };
454 | 97C147071CF9000F007C117D /* Release */ = {
455 | isa = XCBuildConfiguration;
456 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
457 | buildSettings = {
458 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
459 | CLANG_ENABLE_MODULES = YES;
460 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
461 | ENABLE_BITCODE = NO;
462 | FRAMEWORK_SEARCH_PATHS = (
463 | "$(inherited)",
464 | "$(PROJECT_DIR)/Flutter",
465 | );
466 | INFOPLIST_FILE = Runner/Info.plist;
467 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
468 | LIBRARY_SEARCH_PATHS = (
469 | "$(inherited)",
470 | "$(PROJECT_DIR)/Flutter",
471 | );
472 | PRODUCT_BUNDLE_IDENTIFIER = com.example.layoutDemoFlutter;
473 | PRODUCT_NAME = "$(TARGET_NAME)";
474 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
475 | SWIFT_VERSION = 5.0;
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/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "flutter-stackn40-2.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "flutter-stackn60.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "flutter-stacks29-1.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "flutter-stacks58-1.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "flutter-stacks87.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "flutter-stacks80-1.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "flutter-stacks120.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "flutter-stacks120-1.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "flutter-stacks180.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "flutter-stackn20.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "flutter-stackn40-1.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "flutter-stacks29.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "flutter-stacks58.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "flutter-stackn40.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "flutter-stacks80.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "flutter-stackp76.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "flutter-stackp152.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "flutter-stackp167.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "flutter-stack1024.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stack1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stack1024.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackn20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackn20.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackn40-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackn40-1.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackn40-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackn40-2.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackn40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackn40.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackn60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackn60.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackp152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackp152.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackp167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackp167.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackp76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stackp76.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks120-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks120-1.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks120.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks180.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks29-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks29-1.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks29.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks58-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks58-1.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks58.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks80-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks80-1.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks80.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/AppIcon.appiconset/flutter-stacks87.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/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | layout_demo_flutter
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 | CADisableMinimumFrameDurationOnPhone
45 |
46 | UIApplicationSupportsIndirectInputEvents
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/layout_demo_flutter.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/layout_demo_flutter_android.iml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/lib/layout_attribute_selector.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class LayoutAttributeSelector extends StatefulWidget {
4 | const LayoutAttributeSelector({
5 | super.key,
6 | required this.title,
7 | required this.values,
8 | this.disabled = false,
9 | required this.onIndexChanged,
10 | });
11 |
12 | final String title;
13 | final List values;
14 | final bool disabled;
15 | final ValueChanged onIndexChanged;
16 |
17 | @override
18 | State createState() => LayoutAttributeSelectorState();
19 | }
20 |
21 | class LayoutAttributeSelectorState extends State {
22 | var _valueIndex = 0;
23 |
24 | void _next() {
25 | _valueIndex = _valueIndex + 1 < widget.values.length ? _valueIndex + 1 : 0;
26 | _update();
27 | }
28 |
29 | void _previous() {
30 | _valueIndex = _valueIndex > 0 ? _valueIndex - 1 : widget.values.length - 1;
31 | _update();
32 | }
33 |
34 | void _update() {
35 | widget.onIndexChanged(_valueIndex);
36 | setState(() {});
37 | }
38 |
39 | @override
40 | Widget build(BuildContext context) {
41 | return Column(children: [
42 | const Divider(color: Colors.black54),
43 | Text(widget.title),
44 | Row(
45 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
46 | children: [
47 | IconButton(
48 | padding: const EdgeInsets.all(4.0),
49 | icon: const Icon(Icons.arrow_back),
50 | onPressed: widget.disabled ? null : _previous,
51 | ),
52 | Text(
53 | widget.values[_valueIndex],
54 | maxLines: 2,
55 | textAlign: TextAlign.center,
56 | style: TextStyle(
57 | fontWeight: FontWeight.w700,
58 | color: widget.disabled ? Colors.black26 : Colors.black87,
59 | ),
60 | ),
61 | IconButton(
62 | padding: const EdgeInsets.all(4.0),
63 | icon: const Icon(Icons.arrow_forward),
64 | onPressed: widget.disabled ? null : _next,
65 | ),
66 | ],
67 | ),
68 | ]);
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/lib/layout_type.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 |
3 | enum LayoutGroup {
4 | nonScrollable,
5 | scrollable,
6 | }
7 |
8 | abstract class HasLayoutGroup {
9 | LayoutGroup get layoutGroup;
10 | VoidCallback get onLayoutToggle;
11 | }
12 |
13 | enum LayoutType {
14 | rowColumn,
15 | baseline,
16 | stack,
17 | expanded,
18 | padding,
19 | pageView,
20 | list,
21 | slivers,
22 | hero,
23 | nested,
24 | }
25 |
26 | Map layoutNames = {
27 | LayoutType.rowColumn: 'Row / Col',
28 | LayoutType.baseline: 'Baseline',
29 | LayoutType.stack: 'Stack',
30 | LayoutType.expanded: 'Expanded',
31 | LayoutType.padding: 'Padding',
32 | LayoutType.pageView: 'Page View',
33 | LayoutType.list: 'List',
34 | LayoutType.slivers: 'Slivers',
35 | LayoutType.hero: 'Hero',
36 | LayoutType.nested: 'Nested',
37 | };
38 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/main_page.dart';
3 |
4 | void main() => runApp(const MyApp());
5 |
6 | class MyApp extends StatelessWidget {
7 | const MyApp({super.key});
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | return MaterialApp(
12 | title: 'Flutter Layouts Demo',
13 | debugShowCheckedModeBanner: false,
14 | theme: ThemeData(
15 | useMaterial3: false,
16 | primarySwatch: Colors.orange,
17 | ),
18 | home: const MainPage(),
19 | );
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/lib/main_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/pages/baseline_page.dart';
3 | import 'package:layout_demo_flutter/pages/expanded_page.dart';
4 | import 'package:layout_demo_flutter/layout_type.dart';
5 | import 'package:layout_demo_flutter/pages/hero_page.dart';
6 | import 'package:layout_demo_flutter/pages/list_page.dart';
7 | import 'package:layout_demo_flutter/pages/nested_page.dart';
8 | import 'package:layout_demo_flutter/pages/padding_page.dart';
9 | import 'package:layout_demo_flutter/pages/page_view_page.dart';
10 | import 'package:layout_demo_flutter/pages/row_column_page.dart';
11 | import 'package:layout_demo_flutter/pages/slivers_page.dart';
12 | import 'package:layout_demo_flutter/pages/stack_page.dart';
13 |
14 | class MainPage extends StatefulWidget {
15 | const MainPage({super.key});
16 |
17 | @override
18 | State createState() => _MainPageState();
19 | }
20 |
21 | class _MainPageState extends State {
22 | LayoutGroup _layoutGroup = LayoutGroup.nonScrollable;
23 | LayoutType _layoutSelection1 = LayoutType.rowColumn;
24 | LayoutType _layoutSelection2 = LayoutType.pageView;
25 | LayoutType get _layoutSelection => _layoutGroup == LayoutGroup.nonScrollable
26 | ? _layoutSelection1
27 | : _layoutSelection2;
28 |
29 | void _onLayoutGroupToggle() {
30 | setState(() {
31 | _layoutGroup = _layoutGroup == LayoutGroup.nonScrollable
32 | ? LayoutGroup.scrollable
33 | : LayoutGroup.nonScrollable;
34 | });
35 | }
36 |
37 | void _onLayoutSelected(LayoutType selection) {
38 | setState(() {
39 | if (_layoutGroup == LayoutGroup.nonScrollable) {
40 | _layoutSelection1 = selection;
41 | } else {
42 | _layoutSelection2 = selection;
43 | }
44 | });
45 | }
46 |
47 | void _onSelectTab(int index) {
48 | if (_layoutGroup == LayoutGroup.nonScrollable) {
49 | _onLayoutSelected(LayoutType.values[index]);
50 | } else {
51 | _onLayoutSelected(LayoutType.values[index + 5]);
52 | }
53 | }
54 |
55 | @override
56 | Widget build(BuildContext context) {
57 | return Scaffold(
58 | body: switch (_layoutSelection) {
59 | LayoutType.rowColumn => RowColumnPage(
60 | layoutGroup: _layoutGroup, onLayoutToggle: _onLayoutGroupToggle),
61 | LayoutType.baseline => BaselinePage(
62 | layoutGroup: _layoutGroup, onLayoutToggle: _onLayoutGroupToggle),
63 | LayoutType.stack => StackPage(
64 | layoutGroup: _layoutGroup, onLayoutToggle: _onLayoutGroupToggle),
65 | LayoutType.expanded => ExpandedPage(
66 | layoutGroup: _layoutGroup, onLayoutToggle: _onLayoutGroupToggle),
67 | LayoutType.padding => PaddingPage(
68 | layoutGroup: _layoutGroup, onLayoutToggle: _onLayoutGroupToggle),
69 | LayoutType.pageView => PageViewPage(
70 | layoutGroup: _layoutGroup, onLayoutToggle: _onLayoutGroupToggle),
71 | LayoutType.list => ListPage(
72 | layoutGroup: _layoutGroup, onLayoutToggle: _onLayoutGroupToggle),
73 | LayoutType.slivers => SliversPage(
74 | layoutGroup: _layoutGroup, onLayoutToggle: _onLayoutGroupToggle),
75 | LayoutType.hero => HeroPage(
76 | layoutGroup: _layoutGroup, onLayoutToggle: _onLayoutGroupToggle),
77 | LayoutType.nested => NestedPage(
78 | layoutGroup: _layoutGroup, onLayoutToggle: _onLayoutGroupToggle),
79 | },
80 | bottomNavigationBar: () {
81 | if (_layoutGroup == LayoutGroup.nonScrollable) {
82 | return BottomNavigationBar(
83 | type: BottomNavigationBarType.fixed,
84 | items: [
85 | _buildItem(
86 | icon: Icons.view_headline,
87 | layoutSelection: LayoutType.rowColumn),
88 | _buildItem(
89 | icon: Icons.format_size,
90 | layoutSelection: LayoutType.baseline),
91 | _buildItem(icon: Icons.layers, layoutSelection: LayoutType.stack),
92 | _buildItem(
93 | icon: Icons.line_weight,
94 | layoutSelection: LayoutType.expanded),
95 | _buildItem(
96 | icon: Icons.format_line_spacing,
97 | layoutSelection: LayoutType.padding),
98 | ],
99 | onTap: _onSelectTab,
100 | );
101 | } else {
102 | return BottomNavigationBar(
103 | type: BottomNavigationBarType.fixed,
104 | items: [
105 | _buildItem(
106 | icon: Icons.view_week, layoutSelection: LayoutType.pageView),
107 | _buildItem(
108 | icon: Icons.format_list_bulleted,
109 | layoutSelection: LayoutType.list),
110 | _buildItem(
111 | icon: Icons.view_day, layoutSelection: LayoutType.slivers),
112 | _buildItem(
113 | icon: Icons.gradient, layoutSelection: LayoutType.hero),
114 | _buildItem(
115 | icon: Icons.dashboard, layoutSelection: LayoutType.nested),
116 | ],
117 | onTap: _onSelectTab,
118 | );
119 | }
120 | }(),
121 | );
122 | }
123 |
124 | Color _colorTabMatching({required LayoutType layoutSelection}) {
125 | if (_layoutGroup == LayoutGroup.nonScrollable) {
126 | return _layoutSelection1 == layoutSelection ? Colors.orange : Colors.grey;
127 | } else {
128 | return _layoutSelection2 == layoutSelection ? Colors.orange : Colors.grey;
129 | }
130 | }
131 |
132 | BottomNavigationBarItem _buildItem({
133 | required IconData icon,
134 | required LayoutType layoutSelection,
135 | }) {
136 | String text = layoutNames[layoutSelection] ?? '';
137 | return BottomNavigationBarItem(
138 | icon: Icon(
139 | icon,
140 | color: _colorTabMatching(layoutSelection: layoutSelection),
141 | ),
142 | label: text,
143 | );
144 | }
145 | }
146 |
--------------------------------------------------------------------------------
/lib/pages/baseline_layout_attributes.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_attribute_selector.dart';
3 |
4 | class BaselineLayoutAttributes extends StatefulWidget {
5 | const BaselineLayoutAttributes(
6 | {super.key, required this.onUpdateCrossAxisAlignment});
7 |
8 | final ValueChanged onUpdateCrossAxisAlignment;
9 |
10 | @override
11 | State createState() => BaselineLayoutAttributesState();
12 | }
13 |
14 | class BaselineLayoutAttributesState extends State {
15 | @override
16 | Widget build(BuildContext context) {
17 | return Row(
18 | mainAxisAlignment: MainAxisAlignment.spaceAround,
19 | mainAxisSize: MainAxisSize.max,
20 | children: [
21 | Expanded(
22 | child: LayoutAttributeSelector(
23 | title: 'Cross Axis Alignment',
24 | values: const [
25 | 'baseline',
26 | 'start',
27 | 'end',
28 | 'center',
29 | //'stretch',
30 | ],
31 | onIndexChanged: widget.onUpdateCrossAxisAlignment,
32 | ),
33 | ),
34 | ],
35 | );
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/lib/pages/baseline_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_type.dart';
3 | import 'package:layout_demo_flutter/pages/main_app_bar.dart';
4 | import 'package:layout_demo_flutter/pages/baseline_layout_attributes.dart';
5 |
6 | class BaselinePage extends StatefulWidget implements HasLayoutGroup {
7 | const BaselinePage({
8 | super.key,
9 | required this.layoutGroup,
10 | required this.onLayoutToggle,
11 | });
12 |
13 | @override
14 | final LayoutGroup layoutGroup;
15 | @override
16 | final VoidCallback onLayoutToggle;
17 |
18 | @override
19 | State createState() => BaselinePageState();
20 | }
21 |
22 | class BaselinePageState extends State {
23 | CrossAxisAlignment _crossAxisAlignment = CrossAxisAlignment.baseline;
24 |
25 | CrossAxisAlignment _crossAxisAlignmentFromIndex(int index) => switch (index) {
26 | 0 => CrossAxisAlignment.baseline,
27 | 1 => CrossAxisAlignment.start,
28 | 2 => CrossAxisAlignment.end,
29 | 3 => CrossAxisAlignment.center,
30 | 4 => CrossAxisAlignment.stretch,
31 | _ => CrossAxisAlignment.start,
32 | };
33 |
34 | void _updateCrossAxisAlignment(int index) {
35 | setState(() {
36 | _crossAxisAlignment = _crossAxisAlignmentFromIndex(index);
37 | });
38 | }
39 |
40 | @override
41 | Widget build(BuildContext context) {
42 | return Scaffold(
43 | appBar: MainAppBar(
44 | layoutGroup: widget.layoutGroup,
45 | layoutType: LayoutType.baseline,
46 | bottom: PreferredSize(
47 | preferredSize: const Size(0.0, 80.0),
48 | child: BaselineLayoutAttributes(
49 | onUpdateCrossAxisAlignment: _updateCrossAxisAlignment,
50 | ),
51 | ),
52 | onLayoutToggle: widget.onLayoutToggle,
53 | ),
54 | body: Padding(
55 | padding: const EdgeInsets.all(15.0),
56 | child: BaselineContent(crossAxisAlignment: _crossAxisAlignment),
57 | ),
58 | );
59 | }
60 | }
61 |
62 | class BaselineContent extends StatelessWidget {
63 | const BaselineContent({super.key, required this.crossAxisAlignment});
64 | final CrossAxisAlignment crossAxisAlignment;
65 |
66 | @override
67 | Widget build(BuildContext context) {
68 | return Column(
69 | children: [
70 | ColoredBox(
71 | color: Colors.yellow,
72 | child: Row(
73 | crossAxisAlignment: crossAxisAlignment,
74 | textBaseline: TextBaseline.alphabetic,
75 | children: const [
76 | Text(
77 | 'Flutter',
78 | style: TextStyle(fontSize: 24.0, color: Colors.blue),
79 | ),
80 | SizedBox(width: 5.0),
81 | Text(
82 | 'Layout',
83 | style: TextStyle(fontSize: 32.0, color: Colors.red),
84 | ),
85 | SizedBox(width: 5.0),
86 | Text(
87 | 'Is',
88 | style: TextStyle(fontSize: 18.0, color: Colors.indigo),
89 | ),
90 | SizedBox(width: 5.0),
91 | Text(
92 | 'Great',
93 | style: TextStyle(fontSize: 26.0, color: Colors.green),
94 | ),
95 | ],
96 | ),
97 | ),
98 | const SizedBox(height: 30.0),
99 | ColoredBox(
100 | color: Colors.yellow,
101 | child: Row(
102 | crossAxisAlignment: crossAxisAlignment,
103 | textBaseline: TextBaseline.alphabetic,
104 | children: const [
105 | Text(
106 | 'Big',
107 | style: TextStyle(fontSize: 48.0, color: Colors.blue),
108 | ),
109 | SizedBox(width: 5.0),
110 | Text(
111 | 'Medium',
112 | style: TextStyle(fontSize: 32.0, color: Colors.red),
113 | ),
114 | SizedBox(width: 5.0),
115 | Text(
116 | 'Small',
117 | style: TextStyle(fontSize: 16.0, color: Colors.indigo),
118 | ),
119 | ],
120 | ),
121 | ),
122 | ],
123 | );
124 | }
125 | }
126 |
--------------------------------------------------------------------------------
/lib/pages/expanded_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_type.dart';
3 | import 'package:layout_demo_flutter/pages/main_app_bar.dart';
4 |
5 | class ExpandedPage extends StatelessWidget implements HasLayoutGroup {
6 | const ExpandedPage({
7 | super.key,
8 | required this.layoutGroup,
9 | required this.onLayoutToggle,
10 | });
11 |
12 | @override
13 | final LayoutGroup layoutGroup;
14 | @override
15 | final VoidCallback onLayoutToggle;
16 |
17 | @override
18 | Widget build(BuildContext context) {
19 | return Scaffold(
20 | appBar: MainAppBar(
21 | layoutGroup: layoutGroup,
22 | layoutType: LayoutType.expanded,
23 | onLayoutToggle: onLayoutToggle,
24 | ),
25 | body: const ExpandedContent(),
26 | );
27 | }
28 | }
29 |
30 | class ExpandedContent extends StatelessWidget {
31 | const ExpandedContent({super.key});
32 |
33 | @override
34 | Widget build(BuildContext context) {
35 | return const CenteredGoldenRatioLayout(
36 | child: Column(
37 | children: [
38 | ExpandedColoredBox(points: 8, color: Colors.red),
39 | Expanded(
40 | flex: 5,
41 | child: Row(
42 | children: [
43 | ExpandedColoredBox(points: 5, color: Colors.indigo),
44 | Expanded(
45 | flex: 3,
46 | child: Column(
47 | children: [
48 | Expanded(
49 | flex: 2,
50 | child: Row(
51 | children: [
52 | Expanded(
53 | flex: 1,
54 | child: Column(
55 | children: [
56 | ExpandedColoredBox(
57 | points: 1, color: Colors.green),
58 | ExpandedColoredBox(
59 | points: 1, color: Colors.blue),
60 | ],
61 | ),
62 | ),
63 | ExpandedColoredBox(points: 2, color: Colors.brown),
64 | ],
65 | ),
66 | ),
67 | ExpandedColoredBox(points: 3, color: Colors.purple),
68 | ],
69 | ),
70 | ),
71 | ],
72 | ),
73 | ),
74 | ],
75 | ),
76 | );
77 | }
78 | }
79 |
80 | class CenteredGoldenRatioLayout extends StatelessWidget {
81 | const CenteredGoldenRatioLayout({super.key, required this.child});
82 | final Widget child;
83 |
84 | @override
85 | Widget build(BuildContext context) {
86 | return LayoutBuilder(builder: (content, constraints) {
87 | final size = _goldenRatio(constraints);
88 | return Center(
89 | child: ConstrainedBox(
90 | constraints: BoxConstraints(
91 | maxWidth: size.width,
92 | maxHeight: size.height,
93 | ),
94 | child: child,
95 | ),
96 | );
97 | });
98 | }
99 |
100 | Size _goldenRatio(BoxConstraints constraints) {
101 | double ratio = 13.0 / 8.0;
102 | if (constraints.maxHeight / constraints.maxWidth > ratio) {
103 | double height = constraints.maxWidth * ratio;
104 | return Size(constraints.maxWidth, height);
105 | } else {
106 | double width = constraints.maxHeight / ratio;
107 | return Size(width, constraints.maxHeight);
108 | }
109 | }
110 | }
111 |
112 | class ExpandedColoredBox extends StatelessWidget {
113 | const ExpandedColoredBox({
114 | super.key,
115 | required this.points,
116 | required this.color,
117 | this.textColor = Colors.white,
118 | });
119 | final int points;
120 | final Color color;
121 | final Color textColor;
122 |
123 | @override
124 | Widget build(BuildContext context) {
125 | return Expanded(
126 | flex: points,
127 | child: ConstrainedBox(
128 | constraints: const BoxConstraints.expand(),
129 | child: ColoredBox(
130 | color: color,
131 | child: Center(
132 | child: Text(
133 | '$points',
134 | style: TextStyle(fontSize: 32.0, color: textColor),
135 | ),
136 | ),
137 | ),
138 | ),
139 | );
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/lib/pages/hero_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_type.dart';
3 | import 'package:flutter/rendering.dart';
4 |
5 | class HeroHeader implements SliverPersistentHeaderDelegate {
6 | HeroHeader({
7 | required this.layoutGroup,
8 | required this.onLayoutToggle,
9 | required this.minExtent,
10 | required this.maxExtent,
11 | });
12 | final LayoutGroup layoutGroup;
13 | final VoidCallback onLayoutToggle;
14 | @override
15 | double maxExtent;
16 | @override
17 | double minExtent;
18 |
19 | @override
20 | Widget build(
21 | BuildContext context, double shrinkOffset, bool overlapsContent) {
22 | return Stack(
23 | fit: StackFit.expand,
24 | children: [
25 | Image.asset(
26 | 'assets/ronnie-mayo-361348-unsplash.jpg',
27 | fit: BoxFit.cover,
28 | ),
29 | const DecoratedBox(
30 | decoration: BoxDecoration(
31 | gradient: LinearGradient(
32 | colors: [
33 | Colors.transparent,
34 | Colors.black54,
35 | ],
36 | stops: [0.5, 1.0],
37 | begin: Alignment.topCenter,
38 | end: Alignment.bottomCenter,
39 | tileMode: TileMode.repeated,
40 | ),
41 | ),
42 | ),
43 | Positioned(
44 | left: 4.0,
45 | top: 4.0,
46 | child: SafeArea(
47 | child: IconButton(
48 | icon: Icon(layoutGroup == LayoutGroup.nonScrollable
49 | ? Icons.filter_1
50 | : Icons.filter_2),
51 | onPressed: onLayoutToggle,
52 | ),
53 | ),
54 | ),
55 | const Positioned(
56 | left: 16.0,
57 | right: 16.0,
58 | bottom: 16.0,
59 | child: Text(
60 | 'Hero Image',
61 | style: TextStyle(fontSize: 32.0, color: Colors.white),
62 | ),
63 | ),
64 | ],
65 | );
66 | }
67 |
68 | @override
69 | bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) {
70 | return true;
71 | }
72 |
73 | @override
74 | FloatingHeaderSnapConfiguration? get snapConfiguration => null;
75 |
76 | @override
77 | OverScrollHeaderStretchConfiguration get stretchConfiguration =>
78 | OverScrollHeaderStretchConfiguration();
79 |
80 | @override
81 | PersistentHeaderShowOnScreenConfiguration? get showOnScreenConfiguration =>
82 | null;
83 |
84 | @override
85 | TickerProvider? get vsync => null;
86 | }
87 |
88 | class HeroPage extends StatelessWidget implements HasLayoutGroup {
89 | HeroPage({
90 | super.key,
91 | required this.layoutGroup,
92 | required this.onLayoutToggle,
93 | });
94 |
95 | @override
96 | final LayoutGroup layoutGroup;
97 | @override
98 | final VoidCallback onLayoutToggle;
99 |
100 | final List assetNames = [
101 | 'assets/brady-bellini-212790-unsplash.jpg',
102 | 'assets/stefan-stefancik-105587-unsplash.jpg',
103 | 'assets/simon-fitall-530083-unsplash.jpg',
104 | 'assets/anton-repponen-99530-unsplash.jpg',
105 | 'assets/kevin-cochran-524957-unsplash.jpg',
106 | 'assets/samsommer-72299-unsplash.jpg',
107 | 'assets/simon-matzinger-320332-unsplash.jpg',
108 | 'assets/meng-ji-102492-unsplash.jpg',
109 | ];
110 |
111 | @override
112 | Widget build(BuildContext context) {
113 | return Scaffold(
114 | body: _scrollView(context),
115 | );
116 | }
117 |
118 | Widget _scrollView(BuildContext context) {
119 | // Use LayoutBuilder to get the hero header size while keeping the image aspect-ratio
120 | return CustomScrollView(
121 | slivers: [
122 | SliverPersistentHeader(
123 | pinned: true,
124 | delegate: HeroHeader(
125 | layoutGroup: layoutGroup,
126 | onLayoutToggle: onLayoutToggle,
127 | minExtent: 150.0,
128 | maxExtent: 250.0,
129 | ),
130 | ),
131 | SliverGrid(
132 | gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
133 | maxCrossAxisExtent: 200.0,
134 | mainAxisSpacing: 0.0,
135 | crossAxisSpacing: 0.0,
136 | childAspectRatio: 0.75,
137 | ),
138 | delegate: SliverChildBuilderDelegate(
139 | (BuildContext context, int index) {
140 | return Padding(
141 | padding: _edgeInsetsForIndex(index),
142 | child: Align(
143 | alignment: Alignment.center,
144 | child: Image.asset(
145 | assetNames[index % assetNames.length],
146 | ),
147 | ),
148 | );
149 | },
150 | childCount: assetNames.length * 2,
151 | ),
152 | ),
153 | ],
154 | );
155 | }
156 |
157 | EdgeInsets _edgeInsetsForIndex(int index) {
158 | if (index % 2 == 0) {
159 | return const EdgeInsets.only(
160 | top: 4.0, left: 8.0, right: 4.0, bottom: 4.0);
161 | } else {
162 | return const EdgeInsets.only(
163 | top: 4.0, left: 4.0, right: 8.0, bottom: 4.0);
164 | }
165 | }
166 | }
167 |
--------------------------------------------------------------------------------
/lib/pages/list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_type.dart';
3 | import 'package:layout_demo_flutter/pages/main_app_bar.dart';
4 |
5 | class Contact {
6 | Contact({required this.name, required this.email});
7 | final String name;
8 | final String email;
9 | }
10 |
11 | class ListPage extends StatelessWidget implements HasLayoutGroup {
12 | const ListPage({
13 | super.key,
14 | required this.layoutGroup,
15 | required this.onLayoutToggle,
16 | });
17 |
18 | @override
19 | final LayoutGroup layoutGroup;
20 | @override
21 | final VoidCallback onLayoutToggle;
22 |
23 | @override
24 | Widget build(BuildContext context) {
25 | return Scaffold(
26 | appBar: MainAppBar(
27 | layoutGroup: layoutGroup,
28 | layoutType: LayoutType.list,
29 | onLayoutToggle: onLayoutToggle,
30 | ),
31 | body: ListView.builder(
32 | itemCount: allContacts.length,
33 | itemBuilder: (BuildContext content, int index) {
34 | Contact contact = allContacts[index];
35 | return ContactListTile(contact);
36 | },
37 | ),
38 | );
39 | }
40 | }
41 |
42 | class ContactListTile extends ListTile {
43 | ContactListTile(Contact contact, {super.key})
44 | : super(
45 | title: Text(contact.name),
46 | subtitle: Text(contact.email),
47 | leading: CircleAvatar(child: Text(contact.name[0])),
48 | );
49 | }
50 |
51 | List allContacts = [
52 | Contact(name: 'Isa Tusa', email: 'isa.tusa@me.com'),
53 | Contact(name: 'Racquel Ricciardi', email: 'racquel.ricciardi@me.com'),
54 | Contact(name: 'Teresita Mccubbin', email: 'teresita.mccubbin@me.com'),
55 | Contact(name: 'Rhoda Hassinger', email: 'rhoda.hassinger@me.com'),
56 | Contact(name: 'Carson Cupps', email: 'carson.cupps@me.com'),
57 | Contact(name: 'Devora Nantz', email: 'devora.nantz@me.com'),
58 | Contact(name: 'Tyisha Primus', email: 'tyisha.primus@me.com'),
59 | Contact(name: 'Muriel Lewellyn', email: 'muriel.lewellyn@me.com'),
60 | Contact(name: 'Hunter Giraud', email: 'hunter.giraud@me.com'),
61 | Contact(name: 'Corina Whiddon', email: 'corina.whiddon@me.com'),
62 | Contact(name: 'Meaghan Covarrubias', email: 'meaghan.covarrubias@me.com'),
63 | Contact(name: 'Ulysses Severson', email: 'ulysses.severson@me.com'),
64 | Contact(name: 'Richard Baxter', email: 'richard.baxter@me.com'),
65 | Contact(name: 'Alessandra Kahn', email: 'alessandra.kahn@me.com'),
66 | Contact(name: 'Libby Saari', email: 'libby.saari@me.com'),
67 | Contact(name: 'Valeria Salvador', email: 'valeria.salvador@me.com'),
68 | Contact(name: 'Fredrick Folkerts', email: 'fredrick.folkerts@me.com'),
69 | Contact(name: 'Delmy Izzi', email: 'delmy.izzi@me.com'),
70 | Contact(name: 'Leann Klock', email: 'leann.klock@me.com'),
71 | Contact(name: 'Rhiannon Macfarlane', email: 'rhiannon.macfarlane@me.com'),
72 | ];
73 |
--------------------------------------------------------------------------------
/lib/pages/main_app_bar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_type.dart';
3 |
4 | class MainAppBar extends AppBar {
5 | MainAppBar({super.key,
6 | required LayoutGroup layoutGroup,
7 | required LayoutType layoutType,
8 | PreferredSize? bottom,
9 | required VoidCallback onLayoutToggle,
10 | }) : super(
11 | leading: IconButton(
12 | icon: Icon(layoutGroup == LayoutGroup.nonScrollable
13 | ? Icons.filter_1
14 | : Icons.filter_2),
15 | onPressed: onLayoutToggle,
16 | ),
17 | title: Text(layoutNames[layoutType] ?? ''),
18 | elevation: 1.0,
19 | bottom: bottom,
20 | );
21 | }
22 |
--------------------------------------------------------------------------------
/lib/pages/nested_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_type.dart';
3 | import 'package:layout_demo_flutter/pages/main_app_bar.dart';
4 |
5 | class NestedPage extends StatelessWidget implements HasLayoutGroup {
6 | const NestedPage({
7 | super.key,
8 | required this.layoutGroup,
9 | required this.onLayoutToggle,
10 | });
11 |
12 | @override
13 | final LayoutGroup layoutGroup;
14 | @override
15 | final VoidCallback onLayoutToggle;
16 |
17 | @override
18 | Widget build(BuildContext context) {
19 | return Scaffold(
20 | appBar: MainAppBar(
21 | layoutGroup: layoutGroup,
22 | layoutType: LayoutType.nested,
23 | onLayoutToggle: onLayoutToggle,
24 | ),
25 | body: ListView.builder(
26 | itemCount: 16,
27 | itemBuilder: (BuildContext content, int index) {
28 | return NestedHorizontalListView(parentIndex: index);
29 | },
30 | ),
31 | );
32 | }
33 | }
34 |
35 | class NestedHorizontalListView extends StatelessWidget {
36 | const NestedHorizontalListView({super.key, required this.parentIndex});
37 | final int parentIndex;
38 |
39 | @override
40 | Widget build(BuildContext context) {
41 | const colors = [
42 | Colors.green,
43 | Colors.blue,
44 | Colors.indigo,
45 | Colors.red,
46 | Colors.orange
47 | ];
48 | const height = 136.0;
49 | return SizedBox(
50 | height: height,
51 | child: ListView.builder(
52 | scrollDirection: Axis.horizontal,
53 | itemCount: 20,
54 | itemBuilder: (BuildContext content, int index) {
55 | return ListViewColoredItem(
56 | index: index + 1,
57 | color: colors[(parentIndex + index) % colors.length],
58 | parentSize: height,
59 | );
60 | }),
61 | );
62 | }
63 | }
64 |
65 | class ListViewColoredItem extends StatelessWidget {
66 | const ListViewColoredItem({
67 | super.key,
68 | required this.index,
69 | required this.color,
70 | required this.parentSize,
71 | });
72 | final int index;
73 | final Color color;
74 | final double parentSize;
75 |
76 | @override
77 | Widget build(BuildContext context) {
78 | double edgeSize = 8.0;
79 | double itemSize = parentSize - edgeSize * 2.0;
80 | return Padding(
81 | padding: EdgeInsets.all(edgeSize),
82 | child: SizedBox(
83 | width: itemSize,
84 | height: itemSize,
85 | child: ColoredBox(
86 | color: color,
87 | child: Align(
88 | alignment: AlignmentDirectional.center,
89 | child: Text(
90 | '$index',
91 | style: const TextStyle(fontSize: 72.0, color: Colors.white),
92 | ),
93 | ),
94 | ),
95 | ),
96 | );
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/lib/pages/padding_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_type.dart';
3 | import 'package:layout_demo_flutter/pages/main_app_bar.dart';
4 |
5 | class PaddingPage extends StatelessWidget implements HasLayoutGroup {
6 | const PaddingPage({
7 | super.key,
8 | required this.layoutGroup,
9 | required this.onLayoutToggle,
10 | });
11 |
12 | @override
13 | final LayoutGroup layoutGroup;
14 | @override
15 | final VoidCallback onLayoutToggle;
16 |
17 | @override
18 | Widget build(BuildContext context) {
19 | return Scaffold(
20 | appBar: MainAppBar(
21 | layoutGroup: layoutGroup,
22 | layoutType: LayoutType.padding,
23 | onLayoutToggle: onLayoutToggle,
24 | ),
25 | body: Column(
26 | crossAxisAlignment: CrossAxisAlignment.stretch,
27 | children: [
28 | VerticalPadding(
29 | color: Colors.green[100] ?? Colors.green,
30 | child: const ColoredText(text: 'First', color: Colors.green),
31 | ),
32 | VerticalPadding(
33 | color: Colors.red[100] ?? Colors.red,
34 | child: const ColoredText(text: 'Second', color: Colors.red),
35 | ),
36 | const SizedBox(
37 | height: 50.0,
38 | child: ColoredText(
39 | text: '50 pt', color: Colors.white, textColor: Colors.black),
40 | ),
41 | VerticalPadding(
42 | color: Colors.blue[100] ?? Colors.blue,
43 | child: const ColoredText(text: 'Third', color: Colors.blue),
44 | ),
45 | const Expanded(
46 | flex: 1,
47 | child: ColoredText(
48 | text: 'flex: 1', color: Colors.white, textColor: Colors.black),
49 | ),
50 | VerticalPadding(
51 | color: Colors.purple[100] ?? Colors.purple,
52 | child: const ColoredText(text: 'Fourth', color: Colors.purple),
53 | ),
54 | const Expanded(
55 | flex: 2,
56 | child: ColoredText(
57 | text: 'flex: 2', color: Colors.white, textColor: Colors.black),
58 | ),
59 | VerticalPadding(
60 | color: Colors.brown[100] ?? Colors.brown,
61 | child: const ColoredText(text: 'Fifth', color: Colors.brown),
62 | ),
63 | ],
64 | ),
65 | );
66 | }
67 | }
68 |
69 | class VerticalPadding extends StatelessWidget {
70 | const VerticalPadding({
71 | super.key,
72 | required this.child,
73 | this.padding = 16.0,
74 | this.color = Colors.white,
75 | });
76 |
77 | final double padding;
78 | final Widget child;
79 | final Color color;
80 |
81 | @override
82 | Widget build(BuildContext context) {
83 | return ColoredBox(
84 | color: color,
85 | child: Padding(
86 | padding: EdgeInsets.symmetric(vertical: padding),
87 | child: child,
88 | ),
89 | );
90 | }
91 | }
92 |
93 | class ColoredText extends StatelessWidget {
94 | const ColoredText({
95 | super.key,
96 | required this.text,
97 | required this.color,
98 | this.textColor = Colors.white,
99 | });
100 | final String text;
101 | final Color color;
102 | final Color textColor;
103 |
104 | @override
105 | Widget build(BuildContext context) {
106 | return ColoredBox(
107 | color: color,
108 | child: Align(
109 | alignment: AlignmentDirectional.center,
110 | child: Text(
111 | text,
112 | style: TextStyle(color: textColor, fontSize: 32.0),
113 | textAlign: TextAlign.center,
114 | ),
115 | ),
116 | );
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/lib/pages/page_view_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_type.dart';
3 | import 'package:layout_demo_flutter/pages/main_app_bar.dart';
4 |
5 | class PageViewPage extends StatelessWidget implements HasLayoutGroup {
6 | const PageViewPage({
7 | super.key,
8 | required this.layoutGroup,
9 | required this.onLayoutToggle,
10 | });
11 |
12 | @override
13 | final LayoutGroup layoutGroup;
14 | @override
15 | final VoidCallback onLayoutToggle;
16 |
17 | @override
18 | Widget build(BuildContext context) {
19 | return Scaffold(
20 | appBar: MainAppBar(
21 | layoutGroup: layoutGroup,
22 | layoutType: LayoutType.pageView,
23 | onLayoutToggle: onLayoutToggle,
24 | ),
25 | body: PageView(
26 | children: const [
27 | PageContent(index: 1, color: Colors.green),
28 | PageContent(index: 2, color: Colors.blue),
29 | PageContent(index: 3, color: Colors.indigo),
30 | PageContent(index: 4, color: Colors.red),
31 | ],
32 | ),
33 | );
34 | }
35 | }
36 |
37 | class PageContent extends StatelessWidget {
38 | const PageContent({super.key, required this.index, required this.color});
39 | final int index;
40 | final Color color;
41 |
42 | @override
43 | Widget build(BuildContext context) {
44 | return ColoredBox(
45 | color: color,
46 | child: Align(
47 | alignment: AlignmentDirectional.center,
48 | child: Text(
49 | '$index',
50 | style: const TextStyle(fontSize: 132.0, color: Colors.white),
51 | ),
52 | ),
53 | );
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/lib/pages/row_column_layout_attributes.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_attribute_selector.dart';
3 |
4 | class RowColumnLayoutAttributes extends StatelessWidget {
5 | const RowColumnLayoutAttributes({
6 | super.key,
7 | required this.onUpdateLayout,
8 | required this.onUpdateMainAxisAlignment,
9 | required this.onUpdateCrossAxisAlignment,
10 | required this.onUpdateMainAxisSize,
11 | });
12 |
13 | final ValueChanged onUpdateLayout;
14 | final ValueChanged onUpdateMainAxisAlignment;
15 | final ValueChanged onUpdateCrossAxisAlignment;
16 | final ValueChanged onUpdateMainAxisSize;
17 |
18 | @override
19 | Widget build(BuildContext context) {
20 | return Row(
21 | mainAxisAlignment: MainAxisAlignment.spaceAround,
22 | mainAxisSize: MainAxisSize.max,
23 | children: [
24 | Expanded(
25 | flex: 1,
26 | child: Column(children: [
27 | LayoutAttributeSelector(
28 | title: 'Layout',
29 | values: const ['row', 'column'],
30 | onIndexChanged: onUpdateLayout,
31 | ),
32 | LayoutAttributeSelector(
33 | title: 'Main Axis Size',
34 | values: const ['min', 'max'],
35 | onIndexChanged: onUpdateMainAxisSize,
36 | ),
37 | ])),
38 | Expanded(
39 | flex: 1,
40 | child: Column(
41 | children: [
42 | LayoutAttributeSelector(
43 | title: 'Main Axis Alignment',
44 | values: const [
45 | 'start',
46 | 'end',
47 | 'center',
48 | 'space\nbetween',
49 | 'space\naround',
50 | 'space\nevenly'
51 | ],
52 | onIndexChanged: onUpdateMainAxisAlignment,
53 | ),
54 | LayoutAttributeSelector(
55 | title: 'Cross Axis Alignment',
56 | values: const [
57 | 'start',
58 | 'end',
59 | 'center',
60 | 'stretch', /*'baseline'*/
61 | ],
62 | onIndexChanged: onUpdateCrossAxisAlignment,
63 | ),
64 | ],
65 | ),
66 | ),
67 | ],
68 | );
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/lib/pages/row_column_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_type.dart';
3 | import 'package:layout_demo_flutter/pages/main_app_bar.dart';
4 | import 'package:layout_demo_flutter/pages/row_column_layout_attributes.dart';
5 |
6 | class RowColumnPage extends StatefulWidget implements HasLayoutGroup {
7 | const RowColumnPage({
8 | super.key,
9 | required this.layoutGroup,
10 | required this.onLayoutToggle,
11 | });
12 |
13 | @override
14 | final LayoutGroup layoutGroup;
15 | @override
16 | final VoidCallback onLayoutToggle;
17 |
18 | @override
19 | State createState() => _RowColumnPageState();
20 | }
21 |
22 | class _RowColumnPageState extends State {
23 | var _isRow = true;
24 | var _mainAxisAlignment = MainAxisAlignment.start;
25 | var _crossAxisAlignment = CrossAxisAlignment.start;
26 | var _mainAxisSize = MainAxisSize.min;
27 |
28 | MainAxisAlignment _mainAxisAlignmentFromIndex(int index) => switch (index) {
29 | 0 => MainAxisAlignment.start,
30 | 1 => MainAxisAlignment.end,
31 | 2 => MainAxisAlignment.center,
32 | 3 => MainAxisAlignment.spaceBetween,
33 | 4 => MainAxisAlignment.spaceAround,
34 | 5 => MainAxisAlignment.spaceEvenly,
35 | _ => MainAxisAlignment.start,
36 | };
37 |
38 | CrossAxisAlignment _crossAxisAlignmentFromIndex(int index) => switch (index) {
39 | 0 => CrossAxisAlignment.baseline,
40 | 1 => CrossAxisAlignment.start,
41 | 2 => CrossAxisAlignment.end,
42 | 3 => CrossAxisAlignment.center,
43 | 4 => CrossAxisAlignment.stretch,
44 | _ => CrossAxisAlignment.start,
45 | };
46 |
47 | void _updateLayout(int index) {
48 | setState(() {
49 | _isRow = index == 0;
50 | });
51 | }
52 |
53 | void _updateMainAxisAlignment(int index) {
54 | setState(() {
55 | _mainAxisAlignment = _mainAxisAlignmentFromIndex(index);
56 | });
57 | }
58 |
59 | void _updateCrossAxisAlignment(int index) {
60 | setState(() {
61 | _crossAxisAlignment = _crossAxisAlignmentFromIndex(index);
62 | });
63 | }
64 |
65 | void _updateMainAxisSize(int index) {
66 | setState(() {
67 | _mainAxisSize = index == 0 ? MainAxisSize.min : MainAxisSize.max;
68 | });
69 | }
70 |
71 | @override
72 | Widget build(BuildContext context) {
73 | return Scaffold(
74 | appBar: MainAppBar(
75 | layoutGroup: widget.layoutGroup,
76 | layoutType: LayoutType.rowColumn,
77 | bottom: PreferredSize(
78 | preferredSize: const Size(0.0, 160.0),
79 | child: RowColumnLayoutAttributes(
80 | onUpdateLayout: _updateLayout,
81 | onUpdateMainAxisAlignment: _updateMainAxisAlignment,
82 | onUpdateCrossAxisAlignment: _updateCrossAxisAlignment,
83 | onUpdateMainAxisSize: _updateMainAxisSize,
84 | ),
85 | ),
86 | onLayoutToggle: widget.onLayoutToggle,
87 | ),
88 | body: ColoredBox(
89 | color: Colors.yellow,
90 | child: _isRow
91 | ? Row(
92 | mainAxisAlignment: _mainAxisAlignment,
93 | crossAxisAlignment: _crossAxisAlignment,
94 | mainAxisSize: _mainAxisSize,
95 | children: const [
96 | Icon(Icons.stars, size: 50.0),
97 | Icon(Icons.stars, size: 100.0),
98 | Icon(Icons.stars, size: 50.0),
99 | ],
100 | )
101 | : Column(
102 | mainAxisAlignment: _mainAxisAlignment,
103 | crossAxisAlignment: _crossAxisAlignment,
104 | mainAxisSize: _mainAxisSize,
105 | children: const [
106 | Icon(Icons.stars, size: 50.0),
107 | Icon(Icons.stars, size: 100.0),
108 | Icon(Icons.stars, size: 50.0),
109 | ],
110 | ),
111 | ),
112 | );
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/lib/pages/slivers_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_type.dart';
3 |
4 | class SliversPage extends StatelessWidget implements HasLayoutGroup {
5 | const SliversPage({
6 | super.key,
7 | required this.layoutGroup,
8 | required this.onLayoutToggle,
9 | });
10 |
11 | @override
12 | final LayoutGroup layoutGroup;
13 | @override
14 | final VoidCallback onLayoutToggle;
15 |
16 | @override
17 | Widget build(BuildContext context) {
18 | return CustomScrollView(
19 | slivers: [
20 | SliverAppBar(
21 | centerTitle: true,
22 | pinned: true,
23 | title: const Text('Slivers'),
24 | leading: IconButton(
25 | icon: Icon(layoutGroup == LayoutGroup.nonScrollable
26 | ? Icons.filter_1
27 | : Icons.filter_2),
28 | onPressed: onLayoutToggle,
29 | ),
30 | ),
31 | SliverGrid(
32 | gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
33 | maxCrossAxisExtent: 200.0,
34 | mainAxisSpacing: 10.0,
35 | crossAxisSpacing: 10.0,
36 | childAspectRatio: 4.0,
37 | ),
38 | delegate: SliverChildBuilderDelegate(
39 | (BuildContext context, int index) {
40 | return ColoredBox(
41 | color: Colors.teal[index % 9 == 0 ? 50 : 100 * (index % 9)]!,
42 | child: Align(
43 | alignment: Alignment.center,
44 | child: Text('grid item $index'),
45 | ),
46 | );
47 | },
48 | childCount: 20,
49 | ),
50 | ),
51 | SliverFixedExtentList(
52 | itemExtent: 50.0,
53 | delegate: SliverChildBuilderDelegate(
54 | (BuildContext context, int index) {
55 | return ColoredBox(
56 | color:
57 | Colors.lightBlue[index % 9 == 0 ? 50 : 100 * (index % 9)]!,
58 | child: Align(
59 | alignment: Alignment.center,
60 | child: Text('list item $index'),
61 | ),
62 | );
63 | },
64 | ),
65 | ),
66 | ],
67 | );
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/lib/pages/stack_layout_attributes.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:layout_demo_flutter/layout_attribute_selector.dart';
3 |
4 | class StackLayoutAttributes extends StatefulWidget {
5 | const StackLayoutAttributes({
6 | super.key,
7 | required this.onUpdateType,
8 | required this.onUpdateAlignment,
9 | });
10 |
11 | final ValueChanged onUpdateType;
12 | final ValueChanged onUpdateAlignment;
13 |
14 | @override
15 | State createState() => StackLayoutAttributesState();
16 | }
17 |
18 | class StackLayoutAttributesState extends State {
19 | bool _alignmentDisabled = false;
20 |
21 | void _updateType(int index) {
22 | widget.onUpdateType(index);
23 | setState(() {
24 | _alignmentDisabled = index == 1;
25 | });
26 | }
27 |
28 | @override
29 | Widget build(BuildContext context) {
30 | return Row(
31 | mainAxisAlignment: MainAxisAlignment.spaceAround,
32 | mainAxisSize: MainAxisSize.max,
33 | children: [
34 | Expanded(
35 | child: LayoutAttributeSelector(
36 | title: 'Type',
37 | values: const [
38 | 'align',
39 | 'position',
40 | ],
41 | onIndexChanged: _updateType,
42 | ),
43 | ),
44 | Expanded(
45 | child: LayoutAttributeSelector(
46 | title: 'Alignment',
47 | values: const [
48 | 'top\nstart',
49 | 'top\ncenter',
50 | 'top\nend',
51 | 'center\nstart',
52 | 'center',
53 | 'center\nend',
54 | 'bottom\nstart',
55 | 'bottom\ncenter',
56 | 'bottom\nend',
57 | ],
58 | disabled: _alignmentDisabled,
59 | onIndexChanged: widget.onUpdateAlignment,
60 | ),
61 | ),
62 | ],
63 | );
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/lib/pages/stack_page.dart:
--------------------------------------------------------------------------------
1 | // ignore_for_file: public_member_api_docs, sort_constructors_first
2 | import 'package:flutter/material.dart';
3 |
4 | import 'package:layout_demo_flutter/layout_type.dart';
5 | import 'package:layout_demo_flutter/pages/main_app_bar.dart';
6 | import 'package:layout_demo_flutter/pages/stack_layout_attributes.dart';
7 |
8 | class StackPage extends StatefulWidget implements HasLayoutGroup {
9 | const StackPage({
10 | super.key,
11 | required this.layoutGroup,
12 | required this.onLayoutToggle,
13 | });
14 |
15 | @override
16 | final LayoutGroup layoutGroup;
17 | @override
18 | final VoidCallback onLayoutToggle;
19 |
20 | @override
21 | State createState() => _StackPageState();
22 | }
23 |
24 | class _StackPageState extends State {
25 | bool _useAlignment = true;
26 | AlignmentDirectional _alignmentDirectional = AlignmentDirectional.topStart;
27 |
28 | AlignmentDirectional _alignmentFromIndex(int index) => switch (index) {
29 | 0 => AlignmentDirectional.topStart,
30 | 1 => AlignmentDirectional.topCenter,
31 | 2 => AlignmentDirectional.topEnd,
32 | 3 => AlignmentDirectional.centerStart,
33 | 4 => AlignmentDirectional.center,
34 | 5 => AlignmentDirectional.centerEnd,
35 | 6 => AlignmentDirectional.bottomStart,
36 | 7 => AlignmentDirectional.bottomCenter,
37 | 8 => AlignmentDirectional.bottomEnd,
38 | _ => AlignmentDirectional.center,
39 | };
40 |
41 | void _updateAlignment(int index) {
42 | setState(() {
43 | _alignmentDirectional = _alignmentFromIndex(index);
44 | });
45 | }
46 |
47 | void _updateType(int index) {
48 | setState(() {
49 | _useAlignment = index == 0;
50 | });
51 | }
52 |
53 | @override
54 | Widget build(BuildContext context) {
55 | return Scaffold(
56 | appBar: MainAppBar(
57 | layoutGroup: widget.layoutGroup,
58 | layoutType: LayoutType.stack,
59 | bottom: PreferredSize(
60 | preferredSize: const Size(0.0, 80.0),
61 | child: StackLayoutAttributes(
62 | onUpdateType: _updateType,
63 | onUpdateAlignment: _updateAlignment,
64 | ),
65 | ),
66 | onLayoutToggle: widget.onLayoutToggle,
67 | ),
68 | body: Center(
69 | child: StackContent(
70 | useAlignment: _useAlignment,
71 | alignment: _alignmentDirectional,
72 | ),
73 | ),
74 | );
75 | }
76 | }
77 |
78 | class StackContent extends StatelessWidget {
79 | const StackContent({
80 | super.key,
81 | required this.useAlignment,
82 | required this.alignment,
83 | });
84 | final bool useAlignment;
85 | final AlignmentDirectional alignment;
86 |
87 | @override
88 | Widget build(BuildContext context) {
89 | if (useAlignment) {
90 | return Stack(
91 | alignment: alignment,
92 | children: const [
93 | SizedBox(
94 | width: 300.0,
95 | height: 300.0,
96 | child: ColoredBox(
97 | color: Colors.green,
98 | ),
99 | ),
100 | SizedBox(
101 | width: 200.0,
102 | height: 200.0,
103 | child: ColoredBox(
104 | color: Colors.yellow,
105 | ),
106 | ),
107 | SizedBox(
108 | width: 100.0,
109 | height: 100.0,
110 | child: ColoredBox(
111 | color: Colors.red,
112 | ),
113 | ),
114 | ],
115 | );
116 | } else {
117 | return Stack(
118 | alignment: alignment,
119 | children: const [
120 | SizedBox(
121 | width: 300.0,
122 | height: 300.0,
123 | child: ColoredBox(
124 | color: Colors.yellow,
125 | ),
126 | ),
127 | Positioned(
128 | left: 20.0,
129 | top: 20.0,
130 | width: 100.0,
131 | height: 100.0,
132 | child: ColoredBox(
133 | color: Colors.indigo,
134 | ),
135 | ),
136 | Positioned(
137 | right: 40.0,
138 | top: 40.0,
139 | width: 100.0,
140 | height: 100.0,
141 | child: ColoredBox(
142 | color: Colors.red,
143 | ),
144 | ),
145 | Positioned(
146 | left: 40.0,
147 | bottom: 40.0,
148 | width: 100.0,
149 | height: 100.0,
150 | child: ColoredBox(
151 | color: Colors.green,
152 | ),
153 | ),
154 | Positioned(
155 | bottom: 20.0,
156 | right: 20.0,
157 | width: 100.0,
158 | height: 100.0,
159 | child: ColoredBox(
160 | color: Colors.blue,
161 | ),
162 | ),
163 | ],
164 | );
165 | }
166 | }
167 | }
168 |
--------------------------------------------------------------------------------
/macos/.gitignore:
--------------------------------------------------------------------------------
1 | # Flutter-related
2 | **/Flutter/ephemeral/
3 | **/Pods/
4 |
5 | # Xcode-related
6 | **/dgph
7 | **/xcuserdata/
8 |
--------------------------------------------------------------------------------
/macos/Flutter/Flutter-Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "ephemeral/Flutter-Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/macos/Flutter/Flutter-Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "ephemeral/Flutter-Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/macos/Flutter/GeneratedPluginRegistrant.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | import FlutterMacOS
6 | import Foundation
7 |
8 |
9 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
10 | }
11 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 51;
7 | objects = {
8 |
9 | /* Begin PBXAggregateTarget section */
10 | 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
11 | isa = PBXAggregateTarget;
12 | buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
13 | buildPhases = (
14 | 33CC111E2044C6BF0003C045 /* ShellScript */,
15 | );
16 | dependencies = (
17 | );
18 | name = "Flutter Assemble";
19 | productName = FLX;
20 | };
21 | /* End PBXAggregateTarget section */
22 |
23 | /* Begin PBXBuildFile section */
24 | 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
25 | 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
26 | 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
27 | 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
28 | 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
29 | /* End PBXBuildFile section */
30 |
31 | /* Begin PBXContainerItemProxy section */
32 | 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
33 | isa = PBXContainerItemProxy;
34 | containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
35 | proxyType = 1;
36 | remoteGlobalIDString = 33CC111A2044C6BA0003C045;
37 | remoteInfo = FLX;
38 | };
39 | /* End PBXContainerItemProxy section */
40 |
41 | /* Begin PBXCopyFilesBuildPhase section */
42 | 33CC110E2044A8840003C045 /* Bundle Framework */ = {
43 | isa = PBXCopyFilesBuildPhase;
44 | buildActionMask = 2147483647;
45 | dstPath = "";
46 | dstSubfolderSpec = 10;
47 | files = (
48 | );
49 | name = "Bundle Framework";
50 | runOnlyForDeploymentPostprocessing = 0;
51 | };
52 | /* End PBXCopyFilesBuildPhase section */
53 |
54 | /* Begin PBXFileReference section */
55 | 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
56 | 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; };
57 | 33CC10ED2044A3C60003C045 /* layout_demo_flutter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "layout_demo_flutter.app"; sourceTree = BUILT_PRODUCTS_DIR; };
58 | 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
59 | 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; };
60 | 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
61 | 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; };
62 | 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; };
63 | 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; };
64 | 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; };
65 | 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; };
66 | 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; };
67 | 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; };
68 | 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; };
69 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
70 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
71 | /* End PBXFileReference section */
72 |
73 | /* Begin PBXFrameworksBuildPhase section */
74 | 33CC10EA2044A3C60003C045 /* Frameworks */ = {
75 | isa = PBXFrameworksBuildPhase;
76 | buildActionMask = 2147483647;
77 | files = (
78 | );
79 | runOnlyForDeploymentPostprocessing = 0;
80 | };
81 | /* End PBXFrameworksBuildPhase section */
82 |
83 | /* Begin PBXGroup section */
84 | 33BA886A226E78AF003329D5 /* Configs */ = {
85 | isa = PBXGroup;
86 | children = (
87 | 33E5194F232828860026EE4D /* AppInfo.xcconfig */,
88 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
89 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
90 | 333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
91 | );
92 | path = Configs;
93 | sourceTree = "";
94 | };
95 | 33CC10E42044A3C60003C045 = {
96 | isa = PBXGroup;
97 | children = (
98 | 33FAB671232836740065AC1E /* Runner */,
99 | 33CEB47122A05771004F2AC0 /* Flutter */,
100 | 33CC10EE2044A3C60003C045 /* Products */,
101 | D73912EC22F37F3D000D13A0 /* Frameworks */,
102 | );
103 | sourceTree = "";
104 | };
105 | 33CC10EE2044A3C60003C045 /* Products */ = {
106 | isa = PBXGroup;
107 | children = (
108 | 33CC10ED2044A3C60003C045 /* layout_demo_flutter.app */,
109 | );
110 | name = Products;
111 | sourceTree = "";
112 | };
113 | 33CC11242044D66E0003C045 /* Resources */ = {
114 | isa = PBXGroup;
115 | children = (
116 | 33CC10F22044A3C60003C045 /* Assets.xcassets */,
117 | 33CC10F42044A3C60003C045 /* MainMenu.xib */,
118 | 33CC10F72044A3C60003C045 /* Info.plist */,
119 | );
120 | name = Resources;
121 | path = ..;
122 | sourceTree = "";
123 | };
124 | 33CEB47122A05771004F2AC0 /* Flutter */ = {
125 | isa = PBXGroup;
126 | children = (
127 | 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
128 | 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
129 | 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
130 | 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
131 | );
132 | path = Flutter;
133 | sourceTree = "";
134 | };
135 | 33FAB671232836740065AC1E /* Runner */ = {
136 | isa = PBXGroup;
137 | children = (
138 | 33CC10F02044A3C60003C045 /* AppDelegate.swift */,
139 | 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
140 | 33E51913231747F40026EE4D /* DebugProfile.entitlements */,
141 | 33E51914231749380026EE4D /* Release.entitlements */,
142 | 33CC11242044D66E0003C045 /* Resources */,
143 | 33BA886A226E78AF003329D5 /* Configs */,
144 | );
145 | path = Runner;
146 | sourceTree = "";
147 | };
148 | D73912EC22F37F3D000D13A0 /* Frameworks */ = {
149 | isa = PBXGroup;
150 | children = (
151 | );
152 | name = Frameworks;
153 | sourceTree = "";
154 | };
155 | /* End PBXGroup section */
156 |
157 | /* Begin PBXNativeTarget section */
158 | 33CC10EC2044A3C60003C045 /* Runner */ = {
159 | isa = PBXNativeTarget;
160 | buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
161 | buildPhases = (
162 | 33CC10E92044A3C60003C045 /* Sources */,
163 | 33CC10EA2044A3C60003C045 /* Frameworks */,
164 | 33CC10EB2044A3C60003C045 /* Resources */,
165 | 33CC110E2044A8840003C045 /* Bundle Framework */,
166 | 3399D490228B24CF009A79C7 /* ShellScript */,
167 | );
168 | buildRules = (
169 | );
170 | dependencies = (
171 | 33CC11202044C79F0003C045 /* PBXTargetDependency */,
172 | );
173 | name = Runner;
174 | productName = Runner;
175 | productReference = 33CC10ED2044A3C60003C045 /* layout_demo_flutter.app */;
176 | productType = "com.apple.product-type.application";
177 | };
178 | /* End PBXNativeTarget section */
179 |
180 | /* Begin PBXProject section */
181 | 33CC10E52044A3C60003C045 /* Project object */ = {
182 | isa = PBXProject;
183 | attributes = {
184 | LastSwiftUpdateCheck = 0920;
185 | LastUpgradeCheck = 1300;
186 | ORGANIZATIONNAME = "";
187 | TargetAttributes = {
188 | 33CC10EC2044A3C60003C045 = {
189 | CreatedOnToolsVersion = 9.2;
190 | LastSwiftMigration = 1100;
191 | ProvisioningStyle = Automatic;
192 | SystemCapabilities = {
193 | com.apple.Sandbox = {
194 | enabled = 1;
195 | };
196 | };
197 | };
198 | 33CC111A2044C6BA0003C045 = {
199 | CreatedOnToolsVersion = 9.2;
200 | ProvisioningStyle = Manual;
201 | };
202 | };
203 | };
204 | buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
205 | compatibilityVersion = "Xcode 9.3";
206 | developmentRegion = en;
207 | hasScannedForEncodings = 0;
208 | knownRegions = (
209 | en,
210 | Base,
211 | );
212 | mainGroup = 33CC10E42044A3C60003C045;
213 | productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
214 | projectDirPath = "";
215 | projectRoot = "";
216 | targets = (
217 | 33CC10EC2044A3C60003C045 /* Runner */,
218 | 33CC111A2044C6BA0003C045 /* Flutter Assemble */,
219 | );
220 | };
221 | /* End PBXProject section */
222 |
223 | /* Begin PBXResourcesBuildPhase section */
224 | 33CC10EB2044A3C60003C045 /* Resources */ = {
225 | isa = PBXResourcesBuildPhase;
226 | buildActionMask = 2147483647;
227 | files = (
228 | 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
229 | 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
230 | );
231 | runOnlyForDeploymentPostprocessing = 0;
232 | };
233 | /* End PBXResourcesBuildPhase section */
234 |
235 | /* Begin PBXShellScriptBuildPhase section */
236 | 3399D490228B24CF009A79C7 /* ShellScript */ = {
237 | isa = PBXShellScriptBuildPhase;
238 | buildActionMask = 2147483647;
239 | files = (
240 | );
241 | inputFileListPaths = (
242 | );
243 | inputPaths = (
244 | );
245 | outputFileListPaths = (
246 | );
247 | outputPaths = (
248 | );
249 | runOnlyForDeploymentPostprocessing = 0;
250 | shellPath = /bin/sh;
251 | shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
252 | };
253 | 33CC111E2044C6BF0003C045 /* ShellScript */ = {
254 | isa = PBXShellScriptBuildPhase;
255 | buildActionMask = 2147483647;
256 | files = (
257 | );
258 | inputFileListPaths = (
259 | Flutter/ephemeral/FlutterInputs.xcfilelist,
260 | );
261 | inputPaths = (
262 | Flutter/ephemeral/tripwire,
263 | );
264 | outputFileListPaths = (
265 | Flutter/ephemeral/FlutterOutputs.xcfilelist,
266 | );
267 | outputPaths = (
268 | );
269 | runOnlyForDeploymentPostprocessing = 0;
270 | shellPath = /bin/sh;
271 | shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
272 | };
273 | /* End PBXShellScriptBuildPhase section */
274 |
275 | /* Begin PBXSourcesBuildPhase section */
276 | 33CC10E92044A3C60003C045 /* Sources */ = {
277 | isa = PBXSourcesBuildPhase;
278 | buildActionMask = 2147483647;
279 | files = (
280 | 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
281 | 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
282 | 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
283 | );
284 | runOnlyForDeploymentPostprocessing = 0;
285 | };
286 | /* End PBXSourcesBuildPhase section */
287 |
288 | /* Begin PBXTargetDependency section */
289 | 33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
290 | isa = PBXTargetDependency;
291 | target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
292 | targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
293 | };
294 | /* End PBXTargetDependency section */
295 |
296 | /* Begin PBXVariantGroup section */
297 | 33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
298 | isa = PBXVariantGroup;
299 | children = (
300 | 33CC10F52044A3C60003C045 /* Base */,
301 | );
302 | name = MainMenu.xib;
303 | path = Runner;
304 | sourceTree = "";
305 | };
306 | /* End PBXVariantGroup section */
307 |
308 | /* Begin XCBuildConfiguration section */
309 | 338D0CE9231458BD00FA5F75 /* Profile */ = {
310 | isa = XCBuildConfiguration;
311 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
312 | buildSettings = {
313 | ALWAYS_SEARCH_USER_PATHS = NO;
314 | CLANG_ANALYZER_NONNULL = YES;
315 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
316 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
317 | CLANG_CXX_LIBRARY = "libc++";
318 | CLANG_ENABLE_MODULES = YES;
319 | CLANG_ENABLE_OBJC_ARC = YES;
320 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
321 | CLANG_WARN_BOOL_CONVERSION = YES;
322 | CLANG_WARN_CONSTANT_CONVERSION = YES;
323 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
324 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
325 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
326 | CLANG_WARN_EMPTY_BODY = YES;
327 | CLANG_WARN_ENUM_CONVERSION = YES;
328 | CLANG_WARN_INFINITE_RECURSION = YES;
329 | CLANG_WARN_INT_CONVERSION = YES;
330 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
331 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
332 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
333 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
334 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
335 | CODE_SIGN_IDENTITY = "-";
336 | COPY_PHASE_STRIP = NO;
337 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
338 | ENABLE_NS_ASSERTIONS = NO;
339 | ENABLE_STRICT_OBJC_MSGSEND = YES;
340 | GCC_C_LANGUAGE_STANDARD = gnu11;
341 | GCC_NO_COMMON_BLOCKS = YES;
342 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
343 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
344 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
345 | GCC_WARN_UNUSED_FUNCTION = YES;
346 | GCC_WARN_UNUSED_VARIABLE = YES;
347 | MACOSX_DEPLOYMENT_TARGET = 10.11;
348 | MTL_ENABLE_DEBUG_INFO = NO;
349 | SDKROOT = macosx;
350 | SWIFT_COMPILATION_MODE = wholemodule;
351 | SWIFT_OPTIMIZATION_LEVEL = "-O";
352 | };
353 | name = Profile;
354 | };
355 | 338D0CEA231458BD00FA5F75 /* Profile */ = {
356 | isa = XCBuildConfiguration;
357 | baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
358 | buildSettings = {
359 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
360 | CLANG_ENABLE_MODULES = YES;
361 | CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
362 | CODE_SIGN_STYLE = Automatic;
363 | COMBINE_HIDPI_IMAGES = YES;
364 | INFOPLIST_FILE = Runner/Info.plist;
365 | LD_RUNPATH_SEARCH_PATHS = (
366 | "$(inherited)",
367 | "@executable_path/../Frameworks",
368 | );
369 | PROVISIONING_PROFILE_SPECIFIER = "";
370 | SWIFT_VERSION = 5.0;
371 | };
372 | name = Profile;
373 | };
374 | 338D0CEB231458BD00FA5F75 /* Profile */ = {
375 | isa = XCBuildConfiguration;
376 | buildSettings = {
377 | CODE_SIGN_STYLE = Manual;
378 | PRODUCT_NAME = "$(TARGET_NAME)";
379 | };
380 | name = Profile;
381 | };
382 | 33CC10F92044A3C60003C045 /* Debug */ = {
383 | isa = XCBuildConfiguration;
384 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
385 | buildSettings = {
386 | ALWAYS_SEARCH_USER_PATHS = NO;
387 | CLANG_ANALYZER_NONNULL = YES;
388 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
389 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
390 | CLANG_CXX_LIBRARY = "libc++";
391 | CLANG_ENABLE_MODULES = YES;
392 | CLANG_ENABLE_OBJC_ARC = YES;
393 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
394 | CLANG_WARN_BOOL_CONVERSION = YES;
395 | CLANG_WARN_CONSTANT_CONVERSION = YES;
396 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
397 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
398 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
399 | CLANG_WARN_EMPTY_BODY = YES;
400 | CLANG_WARN_ENUM_CONVERSION = YES;
401 | CLANG_WARN_INFINITE_RECURSION = YES;
402 | CLANG_WARN_INT_CONVERSION = YES;
403 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
404 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
405 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
406 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
407 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
408 | CODE_SIGN_IDENTITY = "-";
409 | COPY_PHASE_STRIP = NO;
410 | DEBUG_INFORMATION_FORMAT = dwarf;
411 | ENABLE_STRICT_OBJC_MSGSEND = YES;
412 | ENABLE_TESTABILITY = YES;
413 | GCC_C_LANGUAGE_STANDARD = gnu11;
414 | GCC_DYNAMIC_NO_PIC = NO;
415 | GCC_NO_COMMON_BLOCKS = YES;
416 | GCC_OPTIMIZATION_LEVEL = 0;
417 | GCC_PREPROCESSOR_DEFINITIONS = (
418 | "DEBUG=1",
419 | "$(inherited)",
420 | );
421 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
422 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
423 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
424 | GCC_WARN_UNUSED_FUNCTION = YES;
425 | GCC_WARN_UNUSED_VARIABLE = YES;
426 | MACOSX_DEPLOYMENT_TARGET = 10.11;
427 | MTL_ENABLE_DEBUG_INFO = YES;
428 | ONLY_ACTIVE_ARCH = YES;
429 | SDKROOT = macosx;
430 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
431 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
432 | };
433 | name = Debug;
434 | };
435 | 33CC10FA2044A3C60003C045 /* Release */ = {
436 | isa = XCBuildConfiguration;
437 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
438 | buildSettings = {
439 | ALWAYS_SEARCH_USER_PATHS = NO;
440 | CLANG_ANALYZER_NONNULL = YES;
441 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
442 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
443 | CLANG_CXX_LIBRARY = "libc++";
444 | CLANG_ENABLE_MODULES = YES;
445 | CLANG_ENABLE_OBJC_ARC = YES;
446 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
447 | CLANG_WARN_BOOL_CONVERSION = YES;
448 | CLANG_WARN_CONSTANT_CONVERSION = YES;
449 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
450 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
451 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
452 | CLANG_WARN_EMPTY_BODY = YES;
453 | CLANG_WARN_ENUM_CONVERSION = YES;
454 | CLANG_WARN_INFINITE_RECURSION = YES;
455 | CLANG_WARN_INT_CONVERSION = YES;
456 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
457 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
458 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
459 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
460 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
461 | CODE_SIGN_IDENTITY = "-";
462 | COPY_PHASE_STRIP = NO;
463 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
464 | ENABLE_NS_ASSERTIONS = NO;
465 | ENABLE_STRICT_OBJC_MSGSEND = YES;
466 | GCC_C_LANGUAGE_STANDARD = gnu11;
467 | GCC_NO_COMMON_BLOCKS = YES;
468 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
469 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
470 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
471 | GCC_WARN_UNUSED_FUNCTION = YES;
472 | GCC_WARN_UNUSED_VARIABLE = YES;
473 | MACOSX_DEPLOYMENT_TARGET = 10.11;
474 | MTL_ENABLE_DEBUG_INFO = NO;
475 | SDKROOT = macosx;
476 | SWIFT_COMPILATION_MODE = wholemodule;
477 | SWIFT_OPTIMIZATION_LEVEL = "-O";
478 | };
479 | name = Release;
480 | };
481 | 33CC10FC2044A3C60003C045 /* Debug */ = {
482 | isa = XCBuildConfiguration;
483 | baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
484 | buildSettings = {
485 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
486 | CLANG_ENABLE_MODULES = YES;
487 | CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
488 | CODE_SIGN_STYLE = Automatic;
489 | COMBINE_HIDPI_IMAGES = YES;
490 | INFOPLIST_FILE = Runner/Info.plist;
491 | LD_RUNPATH_SEARCH_PATHS = (
492 | "$(inherited)",
493 | "@executable_path/../Frameworks",
494 | );
495 | PROVISIONING_PROFILE_SPECIFIER = "";
496 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
497 | SWIFT_VERSION = 5.0;
498 | };
499 | name = Debug;
500 | };
501 | 33CC10FD2044A3C60003C045 /* Release */ = {
502 | isa = XCBuildConfiguration;
503 | baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
504 | buildSettings = {
505 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
506 | CLANG_ENABLE_MODULES = YES;
507 | CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
508 | CODE_SIGN_STYLE = Automatic;
509 | COMBINE_HIDPI_IMAGES = YES;
510 | INFOPLIST_FILE = Runner/Info.plist;
511 | LD_RUNPATH_SEARCH_PATHS = (
512 | "$(inherited)",
513 | "@executable_path/../Frameworks",
514 | );
515 | PROVISIONING_PROFILE_SPECIFIER = "";
516 | SWIFT_VERSION = 5.0;
517 | };
518 | name = Release;
519 | };
520 | 33CC111C2044C6BA0003C045 /* Debug */ = {
521 | isa = XCBuildConfiguration;
522 | buildSettings = {
523 | CODE_SIGN_STYLE = Manual;
524 | PRODUCT_NAME = "$(TARGET_NAME)";
525 | };
526 | name = Debug;
527 | };
528 | 33CC111D2044C6BA0003C045 /* Release */ = {
529 | isa = XCBuildConfiguration;
530 | buildSettings = {
531 | CODE_SIGN_STYLE = Automatic;
532 | PRODUCT_NAME = "$(TARGET_NAME)";
533 | };
534 | name = Release;
535 | };
536 | /* End XCBuildConfiguration section */
537 |
538 | /* Begin XCConfigurationList section */
539 | 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
540 | isa = XCConfigurationList;
541 | buildConfigurations = (
542 | 33CC10F92044A3C60003C045 /* Debug */,
543 | 33CC10FA2044A3C60003C045 /* Release */,
544 | 338D0CE9231458BD00FA5F75 /* Profile */,
545 | );
546 | defaultConfigurationIsVisible = 0;
547 | defaultConfigurationName = Release;
548 | };
549 | 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
550 | isa = XCConfigurationList;
551 | buildConfigurations = (
552 | 33CC10FC2044A3C60003C045 /* Debug */,
553 | 33CC10FD2044A3C60003C045 /* Release */,
554 | 338D0CEA231458BD00FA5F75 /* Profile */,
555 | );
556 | defaultConfigurationIsVisible = 0;
557 | defaultConfigurationName = Release;
558 | };
559 | 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
560 | isa = XCConfigurationList;
561 | buildConfigurations = (
562 | 33CC111C2044C6BA0003C045 /* Debug */,
563 | 33CC111D2044C6BA0003C045 /* Release */,
564 | 338D0CEB231458BD00FA5F75 /* Profile */,
565 | );
566 | defaultConfigurationIsVisible = 0;
567 | defaultConfigurationName = Release;
568 | };
569 | /* End XCConfigurationList section */
570 | };
571 | rootObject = 33CC10E52044A3C60003C045 /* Project object */;
572 | }
573 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
69 |
71 |
77 |
78 |
79 |
80 |
82 |
83 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/macos/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | @NSApplicationMain
5 | class AppDelegate: FlutterAppDelegate {
6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
7 | return true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info": {
3 | "version": 1,
4 | "author": "xcode"
5 | },
6 | "images": [
7 | {
8 | "size": "16x16",
9 | "idiom": "mac",
10 | "filename": "app_icon_16.png",
11 | "scale": "1x"
12 | },
13 | {
14 | "size": "16x16",
15 | "idiom": "mac",
16 | "filename": "app_icon_32.png",
17 | "scale": "2x"
18 | },
19 | {
20 | "size": "32x32",
21 | "idiom": "mac",
22 | "filename": "app_icon_32.png",
23 | "scale": "1x"
24 | },
25 | {
26 | "size": "32x32",
27 | "idiom": "mac",
28 | "filename": "app_icon_64.png",
29 | "scale": "2x"
30 | },
31 | {
32 | "size": "128x128",
33 | "idiom": "mac",
34 | "filename": "app_icon_128.png",
35 | "scale": "1x"
36 | },
37 | {
38 | "size": "128x128",
39 | "idiom": "mac",
40 | "filename": "app_icon_256.png",
41 | "scale": "2x"
42 | },
43 | {
44 | "size": "256x256",
45 | "idiom": "mac",
46 | "filename": "app_icon_256.png",
47 | "scale": "1x"
48 | },
49 | {
50 | "size": "256x256",
51 | "idiom": "mac",
52 | "filename": "app_icon_512.png",
53 | "scale": "2x"
54 | },
55 | {
56 | "size": "512x512",
57 | "idiom": "mac",
58 | "filename": "app_icon_512.png",
59 | "scale": "1x"
60 | },
61 | {
62 | "size": "512x512",
63 | "idiom": "mac",
64 | "filename": "app_icon_1024.png",
65 | "scale": "2x"
66 | }
67 | ]
68 | }
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
--------------------------------------------------------------------------------
/macos/Runner/Configs/AppInfo.xcconfig:
--------------------------------------------------------------------------------
1 | // Application-level settings for the Runner target.
2 | //
3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
4 | // future. If not, the values below would default to using the project name when this becomes a
5 | // 'flutter create' template.
6 |
7 | // The application's name. By default this is also the title of the Flutter window.
8 | PRODUCT_NAME = layout_demo_flutter
9 |
10 | // The application's bundle identifier
11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.layoutDemoFlutter
12 |
13 | // The copyright displayed in application information
14 | PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved.
15 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Debug.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Release.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Warnings.xcconfig:
--------------------------------------------------------------------------------
1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
2 | GCC_WARN_UNDECLARED_SELECTOR = YES
3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
6 | CLANG_WARN_PRAGMA_PACK = YES
7 | CLANG_WARN_STRICT_PROTOTYPES = YES
8 | CLANG_WARN_COMMA = YES
9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES
10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
12 | GCC_WARN_SHADOW = YES
13 | CLANG_WARN_UNREACHABLE_CODE = YES
14 |
--------------------------------------------------------------------------------
/macos/Runner/DebugProfile.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.cs.allow-jit
8 |
9 | com.apple.security.network.server
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/macos/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(FLUTTER_BUILD_NAME)
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSHumanReadableCopyright
26 | $(PRODUCT_COPYRIGHT)
27 | NSMainNibFile
28 | MainMenu
29 | NSPrincipalClass
30 | NSApplication
31 |
32 |
33 |
--------------------------------------------------------------------------------
/macos/Runner/MainFlutterWindow.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | class MainFlutterWindow: NSWindow {
5 | override func awakeFromNib() {
6 | let flutterViewController = FlutterViewController.init()
7 | let windowFrame = self.frame
8 | self.contentViewController = flutterViewController
9 | self.setFrame(windowFrame, display: true)
10 |
11 | RegisterGeneratedPlugins(registry: flutterViewController)
12 |
13 | super.awakeFromNib()
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/macos/Runner/Release.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/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 | sha256: "7b875fd4a20b165a3084bd2d210439b22ebc653f21cea4842729c0c30c82596b"
9 | url: "https://pub.dev"
10 | source: hosted
11 | version: "3.4.9"
12 | args:
13 | dependency: transitive
14 | description:
15 | name: args
16 | sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596
17 | url: "https://pub.dev"
18 | source: hosted
19 | version: "2.4.2"
20 | async:
21 | dependency: transitive
22 | description:
23 | name: async
24 | sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
25 | url: "https://pub.dev"
26 | source: hosted
27 | version: "2.11.0"
28 | boolean_selector:
29 | dependency: transitive
30 | description:
31 | name: boolean_selector
32 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
33 | url: "https://pub.dev"
34 | source: hosted
35 | version: "2.1.1"
36 | characters:
37 | dependency: transitive
38 | description:
39 | name: characters
40 | sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
41 | url: "https://pub.dev"
42 | source: hosted
43 | version: "1.3.0"
44 | checked_yaml:
45 | dependency: transitive
46 | description:
47 | name: checked_yaml
48 | sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
49 | url: "https://pub.dev"
50 | source: hosted
51 | version: "2.0.3"
52 | cli_util:
53 | dependency: transitive
54 | description:
55 | name: cli_util
56 | sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7
57 | url: "https://pub.dev"
58 | source: hosted
59 | version: "0.4.0"
60 | clock:
61 | dependency: transitive
62 | description:
63 | name: clock
64 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
65 | url: "https://pub.dev"
66 | source: hosted
67 | version: "1.1.1"
68 | collection:
69 | dependency: transitive
70 | description:
71 | name: collection
72 | sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
73 | url: "https://pub.dev"
74 | source: hosted
75 | version: "1.18.0"
76 | convert:
77 | dependency: transitive
78 | description:
79 | name: convert
80 | sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
81 | url: "https://pub.dev"
82 | source: hosted
83 | version: "3.1.1"
84 | crypto:
85 | dependency: transitive
86 | description:
87 | name: crypto
88 | sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
89 | url: "https://pub.dev"
90 | source: hosted
91 | version: "3.0.3"
92 | cupertino_icons:
93 | dependency: "direct main"
94 | description:
95 | name: cupertino_icons
96 | sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
97 | url: "https://pub.dev"
98 | source: hosted
99 | version: "1.0.6"
100 | fake_async:
101 | dependency: transitive
102 | description:
103 | name: fake_async
104 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
105 | url: "https://pub.dev"
106 | source: hosted
107 | version: "1.3.1"
108 | flutter:
109 | dependency: "direct main"
110 | description: flutter
111 | source: sdk
112 | version: "0.0.0"
113 | flutter_launcher_icons:
114 | dependency: "direct main"
115 | description:
116 | name: flutter_launcher_icons
117 | sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea"
118 | url: "https://pub.dev"
119 | source: hosted
120 | version: "0.13.1"
121 | flutter_lints:
122 | dependency: "direct dev"
123 | description:
124 | name: flutter_lints
125 | sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7
126 | url: "https://pub.dev"
127 | source: hosted
128 | version: "3.0.1"
129 | flutter_test:
130 | dependency: "direct dev"
131 | description: flutter
132 | source: sdk
133 | version: "0.0.0"
134 | image:
135 | dependency: transitive
136 | description:
137 | name: image
138 | sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271"
139 | url: "https://pub.dev"
140 | source: hosted
141 | version: "4.1.3"
142 | js:
143 | dependency: transitive
144 | description:
145 | name: js
146 | sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
147 | url: "https://pub.dev"
148 | source: hosted
149 | version: "0.6.7"
150 | json_annotation:
151 | dependency: transitive
152 | description:
153 | name: json_annotation
154 | sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467
155 | url: "https://pub.dev"
156 | source: hosted
157 | version: "4.8.1"
158 | lints:
159 | dependency: transitive
160 | description:
161 | name: lints
162 | sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
163 | url: "https://pub.dev"
164 | source: hosted
165 | version: "3.0.0"
166 | matcher:
167 | dependency: transitive
168 | description:
169 | name: matcher
170 | sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
171 | url: "https://pub.dev"
172 | source: hosted
173 | version: "0.12.16"
174 | material_color_utilities:
175 | dependency: transitive
176 | description:
177 | name: material_color_utilities
178 | sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
179 | url: "https://pub.dev"
180 | source: hosted
181 | version: "0.5.0"
182 | meta:
183 | dependency: transitive
184 | description:
185 | name: meta
186 | sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
187 | url: "https://pub.dev"
188 | source: hosted
189 | version: "1.10.0"
190 | path:
191 | dependency: transitive
192 | description:
193 | name: path
194 | sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
195 | url: "https://pub.dev"
196 | source: hosted
197 | version: "1.8.3"
198 | petitparser:
199 | dependency: transitive
200 | description:
201 | name: petitparser
202 | sha256: eeb2d1428ee7f4170e2bd498827296a18d4e7fc462b71727d111c0ac7707cfa6
203 | url: "https://pub.dev"
204 | source: hosted
205 | version: "6.0.1"
206 | pointycastle:
207 | dependency: transitive
208 | description:
209 | name: pointycastle
210 | sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c"
211 | url: "https://pub.dev"
212 | source: hosted
213 | version: "3.7.3"
214 | sky_engine:
215 | dependency: transitive
216 | description: flutter
217 | source: sdk
218 | version: "0.0.99"
219 | source_span:
220 | dependency: transitive
221 | description:
222 | name: source_span
223 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
224 | url: "https://pub.dev"
225 | source: hosted
226 | version: "1.10.0"
227 | stack_trace:
228 | dependency: transitive
229 | description:
230 | name: stack_trace
231 | sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
232 | url: "https://pub.dev"
233 | source: hosted
234 | version: "1.11.1"
235 | stream_channel:
236 | dependency: transitive
237 | description:
238 | name: stream_channel
239 | sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
240 | url: "https://pub.dev"
241 | source: hosted
242 | version: "2.1.2"
243 | string_scanner:
244 | dependency: transitive
245 | description:
246 | name: string_scanner
247 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
248 | url: "https://pub.dev"
249 | source: hosted
250 | version: "1.2.0"
251 | term_glyph:
252 | dependency: transitive
253 | description:
254 | name: term_glyph
255 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
256 | url: "https://pub.dev"
257 | source: hosted
258 | version: "1.2.1"
259 | test_api:
260 | dependency: transitive
261 | description:
262 | name: test_api
263 | sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
264 | url: "https://pub.dev"
265 | source: hosted
266 | version: "0.6.1"
267 | typed_data:
268 | dependency: transitive
269 | description:
270 | name: typed_data
271 | sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
272 | url: "https://pub.dev"
273 | source: hosted
274 | version: "1.3.2"
275 | vector_math:
276 | dependency: transitive
277 | description:
278 | name: vector_math
279 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
280 | url: "https://pub.dev"
281 | source: hosted
282 | version: "2.1.4"
283 | web:
284 | dependency: transitive
285 | description:
286 | name: web
287 | sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
288 | url: "https://pub.dev"
289 | source: hosted
290 | version: "0.3.0"
291 | xml:
292 | dependency: transitive
293 | description:
294 | name: xml
295 | sha256: af5e77e9b83f2f4adc5d3f0a4ece1c7f45a2467b695c2540381bac793e34e556
296 | url: "https://pub.dev"
297 | source: hosted
298 | version: "6.4.2"
299 | yaml:
300 | dependency: transitive
301 | description:
302 | name: yaml
303 | sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
304 | url: "https://pub.dev"
305 | source: hosted
306 | version: "3.1.2"
307 | sdks:
308 | dart: ">=3.2.0 <4.0.0"
309 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: layout_demo_flutter
2 | description: A new Flutter project.
3 |
4 | version: 1.0.0+1
5 |
6 | environment:
7 | sdk: ">=3.2.0 <4.0.0"
8 |
9 | dependencies:
10 | flutter:
11 | sdk: flutter
12 | flutter_launcher_icons: ^0.13.1
13 | cupertino_icons: ^1.0.6
14 |
15 | dev_dependencies:
16 | flutter_test:
17 | sdk: flutter
18 | flutter_lints: ^3.0.1
19 |
20 | flutter_icons:
21 | android: "launcher_icon"
22 | ios: true
23 | image_path: "assets/icon/icon.png"
24 | remove_alpha_ios: true
25 | web:
26 | generate: true
27 | background_color: "#0175C2"
28 | theme_color: "#0175C2"
29 | windows:
30 | generate: true
31 | icon_size: 48
32 | macos:
33 | generate: true
34 | # https://github.com/fluttercommunity/flutter_launcher_icons/issues/144
35 | adaptive_icon_background: "assets/icon/icon-background.png"
36 | adaptive_icon_foreground: "assets/icon/icon-foreground.png"
37 |
38 |
39 | # The following section is specific to Flutter.
40 | flutter:
41 | assets:
42 | # https://unsplash.com/photos/EN2PucB2yhA
43 | - assets/ronnie-mayo-361348-unsplash.jpg
44 | # https://unsplash.com/photos/pmH_Y4Qetrk
45 | - assets/stefan-stefancik-105587-unsplash.jpg
46 | # https://unsplash.com/photos/5ditmO9_ae0
47 | - assets/simon-fitall-530083-unsplash.jpg
48 | # https://unsplash.com/photos/3MNzGlQM7qs
49 | - assets/anton-repponen-99530-unsplash.jpg
50 | # https://unsplash.com/photos/CPjkWSD0RM0
51 | - assets/kevin-cochran-524957-unsplash.jpg
52 | # https://unsplash.com/photos/T0XLKgpyT_c
53 | - assets/samsommer-72299-unsplash.jpg
54 | # https://unsplash.com/photos/twukN12EN7c
55 | - assets/simon-matzinger-320332-unsplash.jpg
56 | # https://unsplash.com/photos/8BH_M-53CyA
57 | - assets/meng-ji-102492-unsplash.jpg
58 | # https://unsplash.com/photos/tvOvBq90bM0
59 | - assets/brady-bellini-212790-unsplash.jpg
60 |
61 | uses-material-design: true
62 |
--------------------------------------------------------------------------------
/screenshots/baseline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/baseline.png
--------------------------------------------------------------------------------
/screenshots/expanded.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/expanded.png
--------------------------------------------------------------------------------
/screenshots/hero.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/hero.jpg
--------------------------------------------------------------------------------
/screenshots/list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/list.png
--------------------------------------------------------------------------------
/screenshots/nested.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/nested.png
--------------------------------------------------------------------------------
/screenshots/padding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/padding.png
--------------------------------------------------------------------------------
/screenshots/page-view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/page-view.png
--------------------------------------------------------------------------------
/screenshots/row-column.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/row-column.png
--------------------------------------------------------------------------------
/screenshots/slivers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/slivers.png
--------------------------------------------------------------------------------
/screenshots/stack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/stack.png
--------------------------------------------------------------------------------
/screenshots/video-poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/video-poster.png
--------------------------------------------------------------------------------
/screenshots/video-poster2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/screenshots/video-poster2.jpg
--------------------------------------------------------------------------------
/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | // To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter
3 | // provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to
4 | // find child widgets in the widget tree, read text, and verify that the values of widget properties
5 | // are correct.
6 |
7 | import 'package:flutter/material.dart';
8 | import 'package:flutter_test/flutter_test.dart';
9 |
10 | import 'package:layout_demo_flutter/main.dart';
11 |
12 | void main() {
13 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
14 | // Build our app and trigger a frame.
15 | await tester.pumpWidget(const MyApp());
16 |
17 | // Verify that our counter starts at 0.
18 | expect(find.text('0'), findsOneWidget);
19 | expect(find.text('1'), findsNothing);
20 |
21 | // Tap the '+' icon and trigger a frame.
22 | await tester.tap(find.byIcon(Icons.add));
23 | await tester.pump();
24 |
25 | // Verify that our counter has incremented.
26 | expect(find.text('0'), findsNothing);
27 | expect(find.text('1'), findsOneWidget);
28 | }, skip: true);
29 | }
30 |
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/web/favicon.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/web/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bizz84/layout-demo-flutter/282909e73ccb7fedf1bb51d9865df5d21aad8661/web/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | layout_demo_flutter
18 |
19 |
20 |
21 |
24 |
31 |
32 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/web/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "layout_demo_flutter",
3 | "short_name": "layout_demo_flutter",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "A new Flutter project.",
9 | "orientation": "portrait-primary",
10 | "prefer_related_applications": false,
11 | "icons": [
12 | {
13 | "src": "icons/Icon-192.png",
14 | "sizes": "192x192",
15 | "type": "image/png"
16 | },
17 | {
18 | "src": "icons/Icon-512.png",
19 | "sizes": "512x512",
20 | "type": "image/png"
21 | },
22 | {
23 | "src": "icons/Icon-maskable-192.png",
24 | "sizes": "192x192",
25 | "type": "image/png",
26 | "purpose": "maskable"
27 | },
28 | {
29 | "src": "icons/Icon-maskable-512.png",
30 | "sizes": "512x512",
31 | "type": "image/png",
32 | "purpose": "maskable"
33 | }
34 | ]
35 | }
--------------------------------------------------------------------------------