├── .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 | [![Flutter Layouts: Row, Column, Stack, Expanded, Padding](screenshots/video-poster.png)](https://www.youtube.com/watch?v=RJEnTRBxaSg) 8 | 9 | [![Flutter Layouts: PageView, ListView, GridView, Slivers, Hero Imaegs](screenshots/video-poster2.jpg)](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 | 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 | } --------------------------------------------------------------------------------