diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 65ed556ca71..9681048365d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -107,17 +107,6 @@ updates: - dependency-name: "*" update-types: ["version-update:semver-minor", "version-update:semver-patch"] - - package-ecosystem: "gradle" - directory: "/packages/dynamic_layouts/example/android/app" - commit-message: - prefix: "[dynamic_lyts]" - schedule: - interval: "weekly" - open-pull-requests-limit: 10 - ignore: - - dependency-name: "*" - update-types: ["version-update:semver-minor", "version-update:semver-patch"] - - package-ecosystem: "gradle" directory: "/packages/espresso/android" commit-message: diff --git a/.github/labeler.yml b/.github/labeler.yml index a967a52b74c..d44cb1298ec 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -23,11 +23,6 @@ - any-glob-to-any-file: - third_party/packages/cupertino_icons/**/* -'p: dynamic_layouts': - - changed-files: - - any-glob-to-any-file: - - packages/dynamic_layouts/**/* - 'p: espresso': - changed-files: - any-glob-to-any-file: diff --git a/CODEOWNERS b/CODEOWNERS index eeb05655cf0..5ff1944962c 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -8,7 +8,6 @@ packages/animations/** @goderbauer packages/camera/** @bparrishMines packages/cross_file/** @ditman packages/css_colors/** @stuartmorgan -packages/dynamic_layouts/** @Piinks packages/extension_google_sign_in_as_googleapis_auth/** @ditman packages/file_selector/** @stuartmorgan packages/flutter_adaptive_scaffold/** @gspencergoog diff --git a/packages/dynamic_layouts/.gitignore b/packages/dynamic_layouts/.gitignore deleted file mode 100644 index 96486fd9302..00000000000 --- a/packages/dynamic_layouts/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock -**/doc/api/ -.dart_tool/ -.packages -build/ diff --git a/packages/dynamic_layouts/.metadata b/packages/dynamic_layouts/.metadata deleted file mode 100644 index 1ed935450ae..00000000000 --- a/packages/dynamic_layouts/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: fe0beec6d44c689837a46cd4962a998d77e332ff - channel: master - -project_type: package diff --git a/packages/dynamic_layouts/CHANGELOG.md b/packages/dynamic_layouts/CHANGELOG.md deleted file mode 100644 index 3a254fde419..00000000000 --- a/packages/dynamic_layouts/CHANGELOG.md +++ /dev/null @@ -1,14 +0,0 @@ -## NEXT - -* Updates minimum supported SDK version to Flutter 3.16/Dart 3.2. - -## 0.0.1+1 - -* Removes obsolete null checks on non-nullable values. -* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. -* Aligns Dart and Flutter SDK constraints. -* Updates minimum Flutter version to 3.0. - -## 0.0.1 - -* Initial release diff --git a/packages/dynamic_layouts/LICENSE b/packages/dynamic_layouts/LICENSE deleted file mode 100644 index c6823b81eb8..00000000000 --- a/packages/dynamic_layouts/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/dynamic_layouts/README.md b/packages/dynamic_layouts/README.md deleted file mode 100644 index 03acc43bdba..00000000000 --- a/packages/dynamic_layouts/README.md +++ /dev/null @@ -1,78 +0,0 @@ -A package that provides two dynamic grid layouts: wrap and staggered. - -## Features -This package provides support for multi sized tiles and different layouts. -Currently the layouts that are implemented in this package are `Stagger` and -`Wrap`. - -### Stagger Features - -`DynamicGridView` is a subclass of `GridView` and gives access -to the `SliverGridDelegate`s that are already implemented in the Flutter -Framework. Some `SliverGridDelegate`s are `SliverGridDelegateWithMaxCrossAxisExtent` and -`SliverGridDelegateWithFixedCrossAxisCount`. This layout can be used with -`DynamicGridView.stagger`. - -### Wrap Features - -The Wrap layout is able to do runs of different widgets and adapt accordingly with -the sizes of the children. It can leave spacing with `mainAxisSpacing` and -`crossAxisSpacing`. - -Having different sizes in only one of the axis is possible by -changing the values of `childCrossAxisExtent` and `childMainAxisExtent`. These -values by default are set to have loose constraints, but by giving `childCrossAxisExtent` a specific value like -100 pixels, it will make all of the children 100 pixels in the main axis. -This layout can be used with `DynamicGridView.wrap` and with -`DynamicGridView.builder` and `SliverGridDelegateWithWrapping` as the delegate. - -## Getting started - -### Depend on it - -Run this command with Flutter: -```sh -$ flutter pub add dynamic_layouts -``` -### Import it - -Now in your Dart code, you can use: - -```sh -import 'package:dynamic_layouts/dynamic_layouts.dart'; -``` -## Usage - -Use `DynamicGridView`s to access these layouts. -`DynamicGridView` has some constructors that use `SliverChildListDelegate` like -`.wrap` and `.stagger`. For a more efficient option that uses `SliverChildBuilderDelegate` use -`.builder`, it works the same as `GridView.builder`. - -### Wrap - -The following are simple examples of how to use `DynamicGridView.wrap`. - -The following example uses `DynamicGridView.builder` with -`SliverGridDelegateWithWrapping`. - -By using `childCrossAxisExtent` and `childMainAxisExtent` the main axis -can be limited to have a specific size and the other can be set to loose -constraints. - - -### Stagger - -The `Stagger` layout can be used with the constructor -`DynamicGridView.stagger` and still use the delegates from `GridView` -like `SliverGridDelegateWithMaxCrossAxisExtent` and -`SliverGridDelegateWithFixedCrossAxisCount`. - -## Additional information - -The staggered layout is similar to Android's [StaggeredGridLayoutManager](https://developer.android.com/reference/androidx/recyclerview/widget/StaggeredGridLayoutManager), while the wrap layout -emulates iOS' [UICollectionView](https://developer.apple.com/documentation/uikit/uicollectionview). - -The inner functionality of this package is exposed, meaning that other dynamic layouts -can be created on top of it and added to the collection. If you want to contribute to -this package, you can open a pull request in [Flutter Packages](https://github.com/flutter/packages) -and add the tag "p: dynamic_layouts". diff --git a/packages/dynamic_layouts/example/.gitignore b/packages/dynamic_layouts/example/.gitignore deleted file mode 100644 index a8e938c0839..00000000000 --- a/packages/dynamic_layouts/example/.gitignore +++ /dev/null @@ -1,47 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -/build/ - -# Web related -lib/generated_plugin_registrant.dart - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/packages/dynamic_layouts/example/.metadata b/packages/dynamic_layouts/example/.metadata deleted file mode 100644 index ed0b5185fb8..00000000000 --- a/packages/dynamic_layouts/example/.metadata +++ /dev/null @@ -1,45 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled. - -version: - revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - channel: stable - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - - platform: android - create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - - platform: ios - create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - - platform: linux - create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - - platform: macos - create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - - platform: web - create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - - platform: windows - create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/dynamic_layouts/example/.pluginToolsConfig.yaml b/packages/dynamic_layouts/example/.pluginToolsConfig.yaml deleted file mode 100644 index 3b6017b7609..00000000000 --- a/packages/dynamic_layouts/example/.pluginToolsConfig.yaml +++ /dev/null @@ -1,4 +0,0 @@ -buildFlags: - _pluginToolsConfigGlobalKey: - - "--no-tree-shake-icons" - - "--dart-define=buildmode=testing" diff --git a/packages/dynamic_layouts/example/README.md b/packages/dynamic_layouts/example/README.md deleted file mode 100644 index 8017af06b81..00000000000 --- a/packages/dynamic_layouts/example/README.md +++ /dev/null @@ -1 +0,0 @@ -# An example app for staggered & wrap layout diff --git a/packages/dynamic_layouts/example/android/.gitignore b/packages/dynamic_layouts/example/android/.gitignore deleted file mode 100644 index 6f568019d3c..00000000000 --- a/packages/dynamic_layouts/example/android/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java - -# Remember to never publicly share your keystore. -# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app -key.properties -**/*.keystore -**/*.jks diff --git a/packages/dynamic_layouts/example/android/app/build.gradle b/packages/dynamic_layouts/example/android/app/build.gradle deleted file mode 100644 index f2293865f2f..00000000000 --- a/packages/dynamic_layouts/example/android/app/build.gradle +++ /dev/null @@ -1,73 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - namespace 'dev.flutter.packages.animations.example' - compileSdk flutter.compileSdkVersion - ndkVersion flutter.ndkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.example" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. - minSdkVersion flutter.minSdkVersion - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } - namespace 'com.example.example' -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/packages/dynamic_layouts/example/android/app/src/debug/AndroidManifest.xml b/packages/dynamic_layouts/example/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index 399f6981d5d..00000000000 --- a/packages/dynamic_layouts/example/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/packages/dynamic_layouts/example/android/app/src/main/AndroidManifest.xml b/packages/dynamic_layouts/example/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index e76d500db84..00000000000 --- a/packages/dynamic_layouts/example/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - diff --git a/packages/dynamic_layouts/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt b/packages/dynamic_layouts/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt deleted file mode 100644 index b18c9dbb16a..00000000000 --- a/packages/dynamic_layouts/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -package com.example.example - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity : FlutterActivity() {} diff --git a/packages/dynamic_layouts/example/android/app/src/main/res/drawable-v21/launch_background.xml b/packages/dynamic_layouts/example/android/app/src/main/res/drawable-v21/launch_background.xml deleted file mode 100644 index f74085f3f6a..00000000000 --- a/packages/dynamic_layouts/example/android/app/src/main/res/drawable-v21/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/packages/dynamic_layouts/example/android/app/src/main/res/drawable/launch_background.xml b/packages/dynamic_layouts/example/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f8842..00000000000 --- a/packages/dynamic_layouts/example/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db77bb4b7b0..00000000000 Binary files a/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b79bb8..00000000000 Binary files a/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 09d4391482b..00000000000 Binary files a/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5f1c8d34e7..00000000000 Binary files a/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d6372eebdb..00000000000 Binary files a/packages/dynamic_layouts/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/android/app/src/main/res/values-night/styles.xml b/packages/dynamic_layouts/example/android/app/src/main/res/values-night/styles.xml deleted file mode 100644 index 06952be745f..00000000000 --- a/packages/dynamic_layouts/example/android/app/src/main/res/values-night/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/packages/dynamic_layouts/example/android/app/src/main/res/values/styles.xml b/packages/dynamic_layouts/example/android/app/src/main/res/values/styles.xml deleted file mode 100644 index cb1ef88056e..00000000000 --- a/packages/dynamic_layouts/example/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/packages/dynamic_layouts/example/android/app/src/profile/AndroidManifest.xml b/packages/dynamic_layouts/example/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index 399f6981d5d..00000000000 --- a/packages/dynamic_layouts/example/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/packages/dynamic_layouts/example/android/build.gradle b/packages/dynamic_layouts/example/android/build.gradle deleted file mode 100644 index d13ef556e26..00000000000 --- a/packages/dynamic_layouts/example/android/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -buildscript { - ext.kotlin_version = '1.7.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. - def artifactRepoKey = 'ARTIFACT_HUB_REPOSITORY' - if (System.getenv().containsKey(artifactRepoKey)) { - println "Using artifact hub" - maven { url System.getenv(artifactRepoKey) } - } - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/packages/dynamic_layouts/example/android/gradle.properties b/packages/dynamic_layouts/example/android/gradle.properties deleted file mode 100644 index 94adc3a3f97..00000000000 --- a/packages/dynamic_layouts/example/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true diff --git a/packages/dynamic_layouts/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/dynamic_layouts/example/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index aeaff6f869f..00000000000 --- a/packages/dynamic_layouts/example/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Jun 23 08:50:38 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip diff --git a/packages/dynamic_layouts/example/android/settings.gradle b/packages/dynamic_layouts/example/android/settings.gradle deleted file mode 100644 index f246a74091b..00000000000 --- a/packages/dynamic_layouts/example/android/settings.gradle +++ /dev/null @@ -1,24 +0,0 @@ -include ':app' - -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() - -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } - -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" - -// See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. -buildscript { - repositories { - maven { - url "https://plugins.gradle.org/m2/" - } - } - dependencies { - classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.1" - } -} -apply plugin: "com.google.cloud.artifactregistry.gradle-plugin" diff --git a/packages/dynamic_layouts/example/ios/.gitignore b/packages/dynamic_layouts/example/ios/.gitignore deleted file mode 100644 index 7a7f9873ad7..00000000000 --- a/packages/dynamic_layouts/example/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/packages/dynamic_layouts/example/ios/Flutter/AppFrameworkInfo.plist b/packages/dynamic_layouts/example/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 7c569640062..00000000000 --- a/packages/dynamic_layouts/example/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 12.0 - - diff --git a/packages/dynamic_layouts/example/ios/Flutter/Debug.xcconfig b/packages/dynamic_layouts/example/ios/Flutter/Debug.xcconfig deleted file mode 100644 index 592ceee85b8..00000000000 --- a/packages/dynamic_layouts/example/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/packages/dynamic_layouts/example/ios/Flutter/Release.xcconfig b/packages/dynamic_layouts/example/ios/Flutter/Release.xcconfig deleted file mode 100644 index 592ceee85b8..00000000000 --- a/packages/dynamic_layouts/example/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.pbxproj b/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 3ffa6ecd866..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,484 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1430; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6254..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d6..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea1..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/dynamic_layouts/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/dynamic_layouts/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index a6b826db27d..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/dynamic_layouts/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/dynamic_layouts/example/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16ed0..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/packages/dynamic_layouts/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/dynamic_layouts/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d6..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/dynamic_layouts/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/dynamic_layouts/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea1..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/dynamic_layouts/example/ios/Runner/AppDelegate.swift b/packages/dynamic_layouts/example/ios/Runner/AppDelegate.swift deleted file mode 100644 index d83c0ff0bee..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import Flutter -import UIKit - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fab2d9..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725e..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 28c6bf03016..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 2ccbfd967d9..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b0bca..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cde12118dd..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e7edb..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index dcdc2306c28..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 2ccbfd967d9..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8f5ce..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b8609df..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b8609df..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d164a5a..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d39da..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 6a84f41e14e..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index d0e1f585360..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2fd46..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad3..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3..00000000000 Binary files a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b70f..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/packages/dynamic_layouts/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/dynamic_layouts/example/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7c93..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/dynamic_layouts/example/ios/Runner/Base.lproj/Main.storyboard b/packages/dynamic_layouts/example/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516fb3..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/dynamic_layouts/example/ios/Runner/Info.plist b/packages/dynamic_layouts/example/ios/Runner/Info.plist deleted file mode 100644 index 5458fc4188b..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Example - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - example - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - - diff --git a/packages/dynamic_layouts/example/ios/Runner/Runner-Bridging-Header.h b/packages/dynamic_layouts/example/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index be4faecf516..00000000000 --- a/packages/dynamic_layouts/example/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#import "GeneratedPluginRegistrant.h" diff --git a/packages/dynamic_layouts/example/lib/main.dart b/packages/dynamic_layouts/example/lib/main.dart deleted file mode 100644 index 18a2c20e407..00000000000 --- a/packages/dynamic_layouts/example/lib/main.dart +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -import 'staggered_layout_example.dart'; -import 'wrap_layout_example.dart'; - -void main() { - runApp(const MyApp()); -} - -/// Main example -class MyApp extends StatelessWidget { - /// Main example constructor. - const MyApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: const MyHomePage(), - ); - } -} - -/// The home page -class MyHomePage extends StatelessWidget { - /// The home page constructor. - const MyHomePage({super.key}); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Demo App'), - ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - ElevatedButton( - onPressed: () => Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => const WrapExample(), - ), - ), - child: const Text('Wrap Demo'), - ), - const SizedBox(height: 20), - ElevatedButton( - onPressed: () => Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => const StaggeredExample(), - ), - ), - child: const Text('Staggered Demo'), - ), - ], - ), - ), - ); - } -} diff --git a/packages/dynamic_layouts/example/lib/staggered_layout_example.dart b/packages/dynamic_layouts/example/lib/staggered_layout_example.dart deleted file mode 100644 index 95b30203e24..00000000000 --- a/packages/dynamic_layouts/example/lib/staggered_layout_example.dart +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:dynamic_layouts/dynamic_layouts.dart'; -import 'package:flutter/material.dart'; - -void main() { - runApp(const StaggeredExample()); -} - -/// A staggered layout example. Clicking the upper-right button will change -/// between a grid with a fixed cross axis count and one with a main axis -/// extent. -class StaggeredExample extends StatefulWidget { - /// Creates a [StaggeredExample]. - const StaggeredExample({super.key}); - - @override - State createState() => _StaggeredExampleState(); -} - -class _StaggeredExampleState extends State { - final List children = List.generate( - 50, - (int index) => _DynamicSizedTile(index: index), - ); - - bool fixedCrossAxisCount = true; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Staggered Layout Example'), - actions: [ - Padding( - padding: const EdgeInsets.only(right: 50.0), - child: TextButton( - onPressed: () { - setState(() { - fixedCrossAxisCount = !fixedCrossAxisCount; - }); - }, - child: Text( - fixedCrossAxisCount ? 'FIXED' : 'MAX', - style: const TextStyle(color: Colors.white), - ), - ), - ), - ], - ), - floatingActionButton: FloatingActionButton( - onPressed: () { - setState(() { - children.add(_DynamicSizedTile(index: children.length)); - }); - }, - child: const Icon(Icons.plus_one), - ), - body: fixedCrossAxisCount - ? DynamicGridView.staggered( - crossAxisCount: 4, - children: [...children], - ) - : DynamicGridView.staggered( - maxCrossAxisExtent: 100, - children: [...children], - ), - ); - } -} - -class _DynamicSizedTile extends StatelessWidget { - const _DynamicSizedTile({required this.index}); - - final int index; - - @override - Widget build(BuildContext context) { - return Container( - height: index % 3 * 50 + 20, - color: Colors.amber[(index % 8 + 1) * 100], - child: Text('Index $index'), - ); - } -} diff --git a/packages/dynamic_layouts/example/lib/wrap_layout_example.dart b/packages/dynamic_layouts/example/lib/wrap_layout_example.dart deleted file mode 100644 index 06ee311bac6..00000000000 --- a/packages/dynamic_layouts/example/lib/wrap_layout_example.dart +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:dynamic_layouts/dynamic_layouts.dart'; -import 'package:flutter/material.dart'; - -/// The wrap example -class WrapExample extends StatelessWidget { - /// The constructor for the wrap example - const WrapExample({super.key}); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Wrap demo'), - ), - body: DynamicGridView.builder( - gridDelegate: const SliverGridDelegateWithWrapping(), - itemCount: 20, - itemBuilder: (BuildContext context, int index) { - return Container( - height: index.isEven ? index % 7 * 50 + 150 : index % 4 * 50 + 100, - width: index.isEven ? index % 5 * 20 + 40 : index % 3 * 50 + 100, - color: index.isEven - ? Colors.red[(index % 7 + 1) * 100] - : Colors.blue[(index % 7 + 1) * 100], - child: Center( - child: Text('Index $index'), - ), - ); - }, - ), - ); - } -} diff --git a/packages/dynamic_layouts/example/linux/.gitignore b/packages/dynamic_layouts/example/linux/.gitignore deleted file mode 100644 index d3896c98444..00000000000 --- a/packages/dynamic_layouts/example/linux/.gitignore +++ /dev/null @@ -1 +0,0 @@ -flutter/ephemeral diff --git a/packages/dynamic_layouts/example/linux/CMakeLists.txt b/packages/dynamic_layouts/example/linux/CMakeLists.txt deleted file mode 100644 index 74c66dd4463..00000000000 --- a/packages/dynamic_layouts/example/linux/CMakeLists.txt +++ /dev/null @@ -1,138 +0,0 @@ -# Project-level configuration. -cmake_minimum_required(VERSION 3.10) -project(runner LANGUAGES CXX) - -# The name of the executable created for the application. Change this to change -# the on-disk name of your application. -set(BINARY_NAME "example") -# The unique GTK application identifier for this application. See: -# https://wiki.gnome.org/HowDoI/ChooseApplicationID -set(APPLICATION_ID "com.example.example") - -# Explicitly opt in to modern CMake behaviors to avoid warnings with recent -# versions of CMake. -cmake_policy(SET CMP0063 NEW) - -# Load bundled libraries from the lib/ directory relative to the binary. -set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") - -# Root filesystem for cross-building. -if(FLUTTER_TARGET_PLATFORM_SYSROOT) - set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) - set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) - set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) - set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) - set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) - set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -endif() - -# Define build configuration options. -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Debug" CACHE - STRING "Flutter build mode" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Profile" "Release") -endif() - -# Compilation settings that should be applied to most targets. -# -# Be cautious about adding new options here, as plugins use this function by -# default. In most cases, you should add new options to specific targets instead -# of modifying this function. -function(APPLY_STANDARD_SETTINGS TARGET) - target_compile_features(${TARGET} PUBLIC cxx_std_14) - target_compile_options(${TARGET} PRIVATE -Wall -Werror) - target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") - target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") -endfunction() - -# Flutter library and tool build rules. -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") -add_subdirectory(${FLUTTER_MANAGED_DIR}) - -# System-level dependencies. -find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) - -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -# Run the Flutter tool portions of the build. This must not be removed. -add_dependencies(${BINARY_NAME} flutter_assemble) - -# Only the install-generated bundle's copy of the executable will launch -# correctly, since the resources must in the right relative locations. To avoid -# people trying to run the unbundled copy, put it in a subdirectory instead of -# the default top-level location. -set_target_properties(${BINARY_NAME} - PROPERTIES - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" -) - -# Generated plugin build rules, which manage building the plugins and adding -# them to the application. -include(flutter/generated_plugins.cmake) - - -# === Installation === -# By default, "installing" just makes a relocatable bundle in the build -# directory. -set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) -endif() - -# Start with a clean build bundle directory every time. -install(CODE " - file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") - " COMPONENT Runtime) - -set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") -set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") - -install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) - -foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) - install(FILES "${bundled_library}" - DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) -endforeach(bundled_library) - -# Fully re-copy the assets directory on each build to avoid having stale files -# from a previous install. -set(FLUTTER_ASSET_DIR_NAME "flutter_assets") -install(CODE " - file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") - " COMPONENT Runtime) -install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" - DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) - -# Install the AOT library on non-Debug builds only. -if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") - install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) -endif() diff --git a/packages/dynamic_layouts/example/linux/flutter/CMakeLists.txt b/packages/dynamic_layouts/example/linux/flutter/CMakeLists.txt deleted file mode 100644 index d5bd01648a9..00000000000 --- a/packages/dynamic_layouts/example/linux/flutter/CMakeLists.txt +++ /dev/null @@ -1,88 +0,0 @@ -# This file controls Flutter-level build steps. It should not be edited. -cmake_minimum_required(VERSION 3.10) - -set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") - -# Configuration provided via flutter tool. -include(${EPHEMERAL_DIR}/generated_config.cmake) - -# TODO: Move the rest of this into files in ephemeral. See -# https://github.com/flutter/flutter/issues/57146. - -# Serves the same purpose as list(TRANSFORM ... PREPEND ...), -# which isn't available in 3.10. -function(list_prepend LIST_NAME PREFIX) - set(NEW_LIST "") - foreach(element ${${LIST_NAME}}) - list(APPEND NEW_LIST "${PREFIX}${element}") - endforeach(element) - set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) -endfunction() - -# === Flutter Library === -# System-level dependencies. -find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) -pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) - -set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") - -# Published to parent scope for install step. -set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) -set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) -set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) -set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) - -list(APPEND FLUTTER_LIBRARY_HEADERS - "fl_basic_message_channel.h" - "fl_binary_codec.h" - "fl_binary_messenger.h" - "fl_dart_project.h" - "fl_engine.h" - "fl_json_message_codec.h" - "fl_json_method_codec.h" - "fl_message_codec.h" - "fl_method_call.h" - "fl_method_channel.h" - "fl_method_codec.h" - "fl_method_response.h" - "fl_plugin_registrar.h" - "fl_plugin_registry.h" - "fl_standard_message_codec.h" - "fl_standard_method_codec.h" - "fl_string_codec.h" - "fl_value.h" - "fl_view.h" - "flutter_linux.h" -) -list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") -add_library(flutter INTERFACE) -target_include_directories(flutter INTERFACE - "${EPHEMERAL_DIR}" -) -target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") -target_link_libraries(flutter INTERFACE - PkgConfig::GTK - PkgConfig::GLIB - PkgConfig::GIO -) -add_dependencies(flutter flutter_assemble) - -# === Flutter tool backend === -# _phony_ is a non-existent file to force this command to run every time, -# since currently there's no way to get a full input/output list from the -# flutter tool. -add_custom_command( - OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} - ${CMAKE_CURRENT_BINARY_DIR}/_phony_ - COMMAND ${CMAKE_COMMAND} -E env - ${FLUTTER_TOOL_ENVIRONMENT} - "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" - ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} - VERBATIM -) -add_custom_target(flutter_assemble DEPENDS - "${FLUTTER_LIBRARY}" - ${FLUTTER_LIBRARY_HEADERS} -) diff --git a/packages/dynamic_layouts/example/linux/flutter/generated_plugins.cmake b/packages/dynamic_layouts/example/linux/flutter/generated_plugins.cmake deleted file mode 100644 index 2e1de87a7eb..00000000000 --- a/packages/dynamic_layouts/example/linux/flutter/generated_plugins.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# -# Generated file, do not edit. -# - -list(APPEND FLUTTER_PLUGIN_LIST -) - -list(APPEND FLUTTER_FFI_PLUGIN_LIST -) - -set(PLUGIN_BUNDLED_LIBRARIES) - -foreach(plugin ${FLUTTER_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) - target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) - list(APPEND PLUGIN_BUNDLED_LIBRARIES $) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) -endforeach(plugin) - -foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) -endforeach(ffi_plugin) diff --git a/packages/dynamic_layouts/example/linux/main.cc b/packages/dynamic_layouts/example/linux/main.cc deleted file mode 100644 index 95e17142fc0..00000000000 --- a/packages/dynamic_layouts/example/linux/main.cc +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/packages/dynamic_layouts/example/linux/my_application.cc b/packages/dynamic_layouts/example/linux/my_application.cc deleted file mode 100644 index 3fba4a13441..00000000000 --- a/packages/dynamic_layouts/example/linux/my_application.cc +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "example"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "example"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments( - project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, - gchar*** arguments, - int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = - my_application_local_command_line; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, "flags", - G_APPLICATION_NON_UNIQUE, nullptr)); -} diff --git a/packages/dynamic_layouts/example/linux/my_application.h b/packages/dynamic_layouts/example/linux/my_application.h deleted file mode 100644 index df30cf703a7..00000000000 --- a/packages/dynamic_layouts/example/linux/my_application.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/packages/dynamic_layouts/example/macos/.gitignore b/packages/dynamic_layouts/example/macos/.gitignore deleted file mode 100644 index 746adbb6b9e..00000000000 --- a/packages/dynamic_layouts/example/macos/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Flutter-related -**/Flutter/ephemeral/ -**/Pods/ - -# Xcode-related -**/dgph -**/xcuserdata/ diff --git a/packages/dynamic_layouts/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/dynamic_layouts/example/macos/Flutter/Flutter-Debug.xcconfig deleted file mode 100644 index c2efd0b608b..00000000000 --- a/packages/dynamic_layouts/example/macos/Flutter/Flutter-Debug.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/dynamic_layouts/example/macos/Flutter/Flutter-Release.xcconfig b/packages/dynamic_layouts/example/macos/Flutter/Flutter-Release.xcconfig deleted file mode 100644 index c2efd0b608b..00000000000 --- a/packages/dynamic_layouts/example/macos/Flutter/Flutter-Release.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/dynamic_layouts/example/macos/Runner.xcodeproj/project.pbxproj b/packages/dynamic_layouts/example/macos/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index d9333e4704c..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,573 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXAggregateTarget section */ - 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; - buildPhases = ( - 33CC111E2044C6BF0003C045 /* ShellScript */, - ); - dependencies = ( - ); - name = "Flutter Assemble"; - productName = FLX; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; - 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; - 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; - 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; - 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 33CC10E52044A3C60003C045 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 33CC111A2044C6BA0003C045; - remoteInfo = FLX; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 33CC110E2044A8840003C045 /* Bundle Framework */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Bundle Framework"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; - 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; - 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; - 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; - 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; - 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; - 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; - 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; - 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 33CC10EA2044A3C60003C045 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 33BA886A226E78AF003329D5 /* Configs */ = { - isa = PBXGroup; - children = ( - 33E5194F232828860026EE4D /* AppInfo.xcconfig */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, - ); - path = Configs; - sourceTree = ""; - }; - 33CC10E42044A3C60003C045 = { - isa = PBXGroup; - children = ( - 33FAB671232836740065AC1E /* Runner */, - 33CEB47122A05771004F2AC0 /* Flutter */, - 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - ); - sourceTree = ""; - }; - 33CC10EE2044A3C60003C045 /* Products */ = { - isa = PBXGroup; - children = ( - 33CC10ED2044A3C60003C045 /* example.app */, - ); - name = Products; - sourceTree = ""; - }; - 33CC11242044D66E0003C045 /* Resources */ = { - isa = PBXGroup; - children = ( - 33CC10F22044A3C60003C045 /* Assets.xcassets */, - 33CC10F42044A3C60003C045 /* MainMenu.xib */, - 33CC10F72044A3C60003C045 /* Info.plist */, - ); - name = Resources; - path = ..; - sourceTree = ""; - }; - 33CEB47122A05771004F2AC0 /* Flutter */ = { - isa = PBXGroup; - children = ( - 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, - 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, - 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, - 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, - ); - path = Flutter; - sourceTree = ""; - }; - 33FAB671232836740065AC1E /* Runner */ = { - isa = PBXGroup; - children = ( - 33CC10F02044A3C60003C045 /* AppDelegate.swift */, - 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, - 33E51913231747F40026EE4D /* DebugProfile.entitlements */, - 33E51914231749380026EE4D /* Release.entitlements */, - 33CC11242044D66E0003C045 /* Resources */, - 33BA886A226E78AF003329D5 /* Configs */, - ); - path = Runner; - sourceTree = ""; - }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 33CC10EC2044A3C60003C045 /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 33CC10E92044A3C60003C045 /* Sources */, - 33CC10EA2044A3C60003C045 /* Frameworks */, - 33CC10EB2044A3C60003C045 /* Resources */, - 33CC110E2044A8840003C045 /* Bundle Framework */, - 3399D490228B24CF009A79C7 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - 33CC11202044C79F0003C045 /* PBXTargetDependency */, - ); - name = Runner; - productName = Runner; - productReference = 33CC10ED2044A3C60003C045 /* example.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 33CC10E52044A3C60003C045 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1300; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 33CC10EC2044A3C60003C045 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1100; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.Sandbox = { - enabled = 1; - }; - }; - }; - 33CC111A2044C6BA0003C045 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 33CC10E42044A3C60003C045; - productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 33CC10EC2044A3C60003C045 /* Runner */, - 33CC111A2044C6BA0003C045 /* Flutter Assemble */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 33CC10EB2044A3C60003C045 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, - 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; - }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, - ); - outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 33CC10E92044A3C60003C045 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, - 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, - 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; - targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - 33CC10F52044A3C60003C045 /* Base */, - ); - name = MainMenu.xib; - path = Runner; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 338D0CE9231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Profile; - }; - 338D0CEA231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Profile; - }; - 338D0CEB231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Manual; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Profile; - }; - 33CC10F92044A3C60003C045 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 33CC10FA2044A3C60003C045 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Release; - }; - 33CC10FC2044A3C60003C045 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 33CC10FD2044A3C60003C045 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 33CC111C2044C6BA0003C045 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Manual; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 33CC111D2044C6BA0003C045 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC10F92044A3C60003C045 /* Debug */, - 33CC10FA2044A3C60003C045 /* Release */, - 338D0CE9231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC10FC2044A3C60003C045 /* Debug */, - 33CC10FD2044A3C60003C045 /* Release */, - 338D0CEA231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC111C2044C6BA0003C045 /* Debug */, - 33CC111D2044C6BA0003C045 /* Release */, - 338D0CEB231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 33CC10E52044A3C60003C045 /* Project object */; -} diff --git a/packages/dynamic_layouts/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/dynamic_layouts/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d6..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/dynamic_layouts/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/dynamic_layouts/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index fb7259e1778..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/dynamic_layouts/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/packages/dynamic_layouts/example/macos/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16ed0..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/packages/dynamic_layouts/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/dynamic_layouts/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d6..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/dynamic_layouts/example/macos/Runner/AppDelegate.swift b/packages/dynamic_layouts/example/macos/Runner/AppDelegate.swift deleted file mode 100644 index 805f1339ed8..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/AppDelegate.swift +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -import Cocoa -import FlutterMacOS - -@NSApplicationMain -class AppDelegate: FlutterAppDelegate { - override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { - return true - } -} diff --git a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index a2ec33f19f1..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" - }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png deleted file mode 100644 index 3c4935a7ca8..00000000000 Binary files a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png deleted file mode 100644 index ed4cc164216..00000000000 Binary files a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png deleted file mode 100644 index 483be613897..00000000000 Binary files a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png deleted file mode 100644 index bcbf36df2f2..00000000000 Binary files a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png deleted file mode 100644 index 9c0a6528647..00000000000 Binary files a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png deleted file mode 100644 index e71a726136a..00000000000 Binary files a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png deleted file mode 100644 index 8a31fe2dd3f..00000000000 Binary files a/packages/dynamic_layouts/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/macos/Runner/Base.lproj/MainMenu.xib b/packages/dynamic_layouts/example/macos/Runner/Base.lproj/MainMenu.xib deleted file mode 100644 index 80e867a4e06..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/Base.lproj/MainMenu.xib +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/dynamic_layouts/example/macos/Runner/Configs/AppInfo.xcconfig b/packages/dynamic_layouts/example/macos/Runner/Configs/AppInfo.xcconfig deleted file mode 100644 index 8b42559e875..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/Configs/AppInfo.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -// Application-level settings for the Runner target. -// -// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the -// future. If not, the values below would default to using the project name when this becomes a -// 'flutter create' template. - -// The application's name. By default this is also the title of the Flutter window. -PRODUCT_NAME = example - -// The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.example.example - -// The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. diff --git a/packages/dynamic_layouts/example/macos/Runner/Configs/Debug.xcconfig b/packages/dynamic_layouts/example/macos/Runner/Configs/Debug.xcconfig deleted file mode 100644 index 36b0fd9464f..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/Configs/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "../../Flutter/Flutter-Debug.xcconfig" -#include "Warnings.xcconfig" diff --git a/packages/dynamic_layouts/example/macos/Runner/Configs/Release.xcconfig b/packages/dynamic_layouts/example/macos/Runner/Configs/Release.xcconfig deleted file mode 100644 index dff4f49561c..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/Configs/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "../../Flutter/Flutter-Release.xcconfig" -#include "Warnings.xcconfig" diff --git a/packages/dynamic_layouts/example/macos/Runner/Configs/Warnings.xcconfig b/packages/dynamic_layouts/example/macos/Runner/Configs/Warnings.xcconfig deleted file mode 100644 index 42bcbf4780b..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/Configs/Warnings.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings -GCC_WARN_UNDECLARED_SELECTOR = YES -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE -CLANG_WARN__DUPLICATE_METHOD_MATCH = YES -CLANG_WARN_PRAGMA_PACK = YES -CLANG_WARN_STRICT_PROTOTYPES = YES -CLANG_WARN_COMMA = YES -GCC_WARN_STRICT_SELECTOR_MATCH = YES -CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES -CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES -GCC_WARN_SHADOW = YES -CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/packages/dynamic_layouts/example/macos/Runner/DebugProfile.entitlements b/packages/dynamic_layouts/example/macos/Runner/DebugProfile.entitlements deleted file mode 100644 index dddb8a30c85..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/DebugProfile.entitlements +++ /dev/null @@ -1,12 +0,0 @@ - - - - - com.apple.security.app-sandbox - - com.apple.security.cs.allow-jit - - com.apple.security.network.server - - - diff --git a/packages/dynamic_layouts/example/macos/Runner/Info.plist b/packages/dynamic_layouts/example/macos/Runner/Info.plist deleted file mode 100644 index 4789daa6a44..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/Info.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSHumanReadableCopyright - $(PRODUCT_COPYRIGHT) - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/packages/dynamic_layouts/example/macos/Runner/MainFlutterWindow.swift b/packages/dynamic_layouts/example/macos/Runner/MainFlutterWindow.swift deleted file mode 100644 index 9e87efa5a14..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/MainFlutterWindow.swift +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -import Cocoa -import FlutterMacOS - -class MainFlutterWindow: NSWindow { - override func awakeFromNib() { - let flutterViewController = FlutterViewController.init() - let windowFrame = self.frame - self.contentViewController = flutterViewController - self.setFrame(windowFrame, display: true) - - RegisterGeneratedPlugins(registry: flutterViewController) - - super.awakeFromNib() - } -} diff --git a/packages/dynamic_layouts/example/macos/Runner/Release.entitlements b/packages/dynamic_layouts/example/macos/Runner/Release.entitlements deleted file mode 100644 index 852fa1a4728..00000000000 --- a/packages/dynamic_layouts/example/macos/Runner/Release.entitlements +++ /dev/null @@ -1,8 +0,0 @@ - - - - - com.apple.security.app-sandbox - - - diff --git a/packages/dynamic_layouts/example/pubspec.yaml b/packages/dynamic_layouts/example/pubspec.yaml deleted file mode 100644 index 2c0371268d1..00000000000 --- a/packages/dynamic_layouts/example/pubspec.yaml +++ /dev/null @@ -1,24 +0,0 @@ -name: example -description: A new Flutter project. - -publish_to: 'none' - -version: 1.0.0+1 - -environment: - sdk: ^3.2.0 - -dependencies: - cupertino_icons: ^1.0.5 - dynamic_layouts: - path: ../ - flutter: - sdk: flutter - -dev_dependencies: - flutter_lints: ^2.0.0 - flutter_test: - sdk: flutter - -flutter: - uses-material-design: true diff --git a/packages/dynamic_layouts/example/test/staggered_example_test.dart b/packages/dynamic_layouts/example/test/staggered_example_test.dart deleted file mode 100644 index c43b4ff413d..00000000000 --- a/packages/dynamic_layouts/example/test/staggered_example_test.dart +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:example/staggered_layout_example.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('StaggeredExample lays out children correctly', - (WidgetTester tester) async { - tester.view.physicalSize = const Size(400, 200); - tester.view.devicePixelRatio = 1.0; - addTearDown(tester.view.reset); - - await tester.pumpWidget( - const MaterialApp( - home: StaggeredExample(), - ), - ); - await tester.pumpAndSettle(); - - expect(find.text('Index 0'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 0')), const Offset(0.0, 56.0)); - expect(find.text('Index 8'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 8')), const Offset(100.0, 146.0)); - expect(find.text('Index 10'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 10')), - const Offset(200.0, 196.0), - ); - }); -} diff --git a/packages/dynamic_layouts/example/test/wrap_example_test.dart b/packages/dynamic_layouts/example/test/wrap_example_test.dart deleted file mode 100644 index 1179ea29433..00000000000 --- a/packages/dynamic_layouts/example/test/wrap_example_test.dart +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:example/wrap_layout_example.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('Check wrap layout', (WidgetTester tester) async { - const MaterialApp app = MaterialApp( - home: WrapExample(), - ); - await tester.pumpWidget(app); - await tester.pumpAndSettle(); - - // Validate which children are laid out. - for (int i = 0; i <= 12; i++) { - expect(find.text('Index $i'), findsOneWidget); - } - for (int i = 13; i < 19; i++) { - expect(find.text('Index $i'), findsNothing); - } - - // Validate with the position of the box, not the text. - Finder getContainer(String text) { - return find.ancestor( - of: find.text(text), - matching: find.byType(Container), - ); - } - - // Validate layout position. - expect( - tester.getTopLeft(getContainer('Index 0')), - const Offset(0.0, 56.0), - ); - expect( - tester.getTopLeft(getContainer('Index 1')), - const Offset(40.0, 56.0), - ); - expect( - tester.getTopLeft(getContainer('Index 2')), - const Offset(190.0, 56.0), - ); - expect( - tester.getTopLeft(getContainer('Index 3')), - const Offset(270.0, 56.0), - ); - expect( - tester.getTopLeft(getContainer('Index 4')), - const Offset(370.0, 56.0), - ); - expect( - tester.getTopLeft(getContainer('Index 5')), - const Offset(490.0, 56.0), - ); - expect( - tester.getTopLeft(getContainer('Index 6')), - const Offset(690.0, 56.0), - ); - expect( - tester.getTopLeft(getContainer('Index 7')), - const Offset(0.0, 506.0), - ); - expect( - tester.getTopLeft(getContainer('Index 8')), - const Offset(150.0, 506.0), - ); - expect( - tester.getTopLeft(getContainer('Index 9')), - const Offset(250.0, 506.0), - ); - expect( - tester.getTopLeft(getContainer('Index 10')), - const Offset(350.0, 506.0), - ); - expect( - tester.getTopLeft(getContainer('Index 11')), - const Offset(390.0, 506.0), - ); - expect( - tester.getTopLeft(getContainer('Index 12')), - const Offset(590.0, 506.0), - ); - }); -} diff --git a/packages/dynamic_layouts/example/web/favicon.png b/packages/dynamic_layouts/example/web/favicon.png deleted file mode 100644 index 8aaa46ac1ae..00000000000 Binary files a/packages/dynamic_layouts/example/web/favicon.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/web/icons/Icon-192.png b/packages/dynamic_layouts/example/web/icons/Icon-192.png deleted file mode 100644 index b749bfef074..00000000000 Binary files a/packages/dynamic_layouts/example/web/icons/Icon-192.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/web/icons/Icon-512.png b/packages/dynamic_layouts/example/web/icons/Icon-512.png deleted file mode 100644 index 88cfd48dff1..00000000000 Binary files a/packages/dynamic_layouts/example/web/icons/Icon-512.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/web/icons/Icon-maskable-192.png b/packages/dynamic_layouts/example/web/icons/Icon-maskable-192.png deleted file mode 100644 index eb9b4d76e52..00000000000 Binary files a/packages/dynamic_layouts/example/web/icons/Icon-maskable-192.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/web/icons/Icon-maskable-512.png b/packages/dynamic_layouts/example/web/icons/Icon-maskable-512.png deleted file mode 100644 index d69c56691fb..00000000000 Binary files a/packages/dynamic_layouts/example/web/icons/Icon-maskable-512.png and /dev/null differ diff --git a/packages/dynamic_layouts/example/web/index.html b/packages/dynamic_layouts/example/web/index.html deleted file mode 100644 index 74802adda60..00000000000 --- a/packages/dynamic_layouts/example/web/index.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - example - - - - - - - - - - diff --git a/packages/dynamic_layouts/example/web/manifest.json b/packages/dynamic_layouts/example/web/manifest.json deleted file mode 100644 index 096edf8fe4c..00000000000 --- a/packages/dynamic_layouts/example/web/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "example", - "short_name": "example", - "start_url": ".", - "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", - "description": "A new Flutter project.", - "orientation": "portrait-primary", - "prefer_related_applications": false, - "icons": [ - { - "src": "icons/Icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "icons/Icon-512.png", - "sizes": "512x512", - "type": "image/png" - }, - { - "src": "icons/Icon-maskable-192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "maskable" - }, - { - "src": "icons/Icon-maskable-512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "maskable" - } - ] -} diff --git a/packages/dynamic_layouts/example/windows/.gitignore b/packages/dynamic_layouts/example/windows/.gitignore deleted file mode 100644 index d492d0d98c8..00000000000 --- a/packages/dynamic_layouts/example/windows/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -flutter/ephemeral/ - -# Visual Studio user-specific files. -*.suo -*.user -*.userosscache -*.sln.docstates - -# Visual Studio build-related files. -x64/ -x86/ - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ diff --git a/packages/dynamic_layouts/example/windows/CMakeLists.txt b/packages/dynamic_layouts/example/windows/CMakeLists.txt deleted file mode 100644 index c0270746b1b..00000000000 --- a/packages/dynamic_layouts/example/windows/CMakeLists.txt +++ /dev/null @@ -1,101 +0,0 @@ -# Project-level configuration. -cmake_minimum_required(VERSION 3.14) -project(example LANGUAGES CXX) - -# The name of the executable created for the application. Change this to change -# the on-disk name of your application. -set(BINARY_NAME "example") - -# Explicitly opt in to modern CMake behaviors to avoid warnings with recent -# versions of CMake. -cmake_policy(SET CMP0063 NEW) - -# Define build configuration option. -get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(IS_MULTICONFIG) - set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" - CACHE STRING "" FORCE) -else() - if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Debug" CACHE - STRING "Flutter build mode" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Profile" "Release") - endif() -endif() -# Define settings for the Profile build mode. -set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") -set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") -set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") -set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") - -# Use Unicode for all projects. -add_definitions(-DUNICODE -D_UNICODE) - -# Compilation settings that should be applied to most targets. -# -# Be cautious about adding new options here, as plugins use this function by -# default. In most cases, you should add new options to specific targets instead -# of modifying this function. -function(APPLY_STANDARD_SETTINGS TARGET) - target_compile_features(${TARGET} PUBLIC cxx_std_17) - target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") - target_compile_options(${TARGET} PRIVATE /EHsc) - target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") - target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") -endfunction() - -# Flutter library and tool build rules. -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") -add_subdirectory(${FLUTTER_MANAGED_DIR}) - -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") - -# Generated plugin build rules, which manage building the plugins and adding -# them to the application. -include(flutter/generated_plugins.cmake) - - -# === Installation === -# Support files are copied into place next to the executable, so that it can -# run in place. This is done instead of making a separate bundle (as on Linux) -# so that building and running from within Visual Studio will work. -set(BUILD_BUNDLE_DIR "$") -# Make the "install" step default, as it's required to run. -set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) -endif() - -set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") -set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") - -install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) - -if(PLUGIN_BUNDLED_LIBRARIES) - install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" - DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) -endif() - -# Fully re-copy the assets directory on each build to avoid having stale files -# from a previous install. -set(FLUTTER_ASSET_DIR_NAME "flutter_assets") -install(CODE " - file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") - " COMPONENT Runtime) -install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" - DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) - -# Install the AOT library on non-Debug builds only. -install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - CONFIGURATIONS Profile;Release - COMPONENT Runtime) diff --git a/packages/dynamic_layouts/example/windows/flutter/CMakeLists.txt b/packages/dynamic_layouts/example/windows/flutter/CMakeLists.txt deleted file mode 100644 index 903f4899d6f..00000000000 --- a/packages/dynamic_layouts/example/windows/flutter/CMakeLists.txt +++ /dev/null @@ -1,109 +0,0 @@ -# This file controls Flutter-level build steps. It should not be edited. -cmake_minimum_required(VERSION 3.14) - -set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") - -# Configuration provided via flutter tool. -include(${EPHEMERAL_DIR}/generated_config.cmake) - -# TODO: Move the rest of this into files in ephemeral. See -# https://github.com/flutter/flutter/issues/57146. -set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") - -# Set fallback configurations for older versions of the flutter tool. -if (NOT DEFINED FLUTTER_TARGET_PLATFORM) - set(FLUTTER_TARGET_PLATFORM "windows-x64") -endif() - -# === Flutter Library === -set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") - -# Published to parent scope for install step. -set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) -set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) -set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) -set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) - -list(APPEND FLUTTER_LIBRARY_HEADERS - "flutter_export.h" - "flutter_windows.h" - "flutter_messenger.h" - "flutter_plugin_registrar.h" - "flutter_texture_registrar.h" -) -list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") -add_library(flutter INTERFACE) -target_include_directories(flutter INTERFACE - "${EPHEMERAL_DIR}" -) -target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") -add_dependencies(flutter flutter_assemble) - -# === Wrapper === -list(APPEND CPP_WRAPPER_SOURCES_CORE - "core_implementations.cc" - "standard_codec.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") -list(APPEND CPP_WRAPPER_SOURCES_PLUGIN - "plugin_registrar.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") -list(APPEND CPP_WRAPPER_SOURCES_APP - "flutter_engine.cc" - "flutter_view_controller.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") - -# Wrapper sources needed for a plugin. -add_library(flutter_wrapper_plugin STATIC - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_PLUGIN} -) -apply_standard_settings(flutter_wrapper_plugin) -set_target_properties(flutter_wrapper_plugin PROPERTIES - POSITION_INDEPENDENT_CODE ON) -set_target_properties(flutter_wrapper_plugin PROPERTIES - CXX_VISIBILITY_PRESET hidden) -target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) -target_include_directories(flutter_wrapper_plugin PUBLIC - "${WRAPPER_ROOT}/include" -) -add_dependencies(flutter_wrapper_plugin flutter_assemble) - -# Wrapper sources needed for the runner. -add_library(flutter_wrapper_app STATIC - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_APP} -) -apply_standard_settings(flutter_wrapper_app) -target_link_libraries(flutter_wrapper_app PUBLIC flutter) -target_include_directories(flutter_wrapper_app PUBLIC - "${WRAPPER_ROOT}/include" -) -add_dependencies(flutter_wrapper_app flutter_assemble) - -# === Flutter tool backend === -# _phony_ is a non-existent file to force this command to run every time, -# since currently there's no way to get a full input/output list from the -# flutter tool. -set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") -set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) -add_custom_command( - OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} - ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} - ${CPP_WRAPPER_SOURCES_APP} - ${PHONY_OUTPUT} - COMMAND ${CMAKE_COMMAND} -E env - ${FLUTTER_TOOL_ENVIRONMENT} - "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" - ${FLUTTER_TARGET_PLATFORM} $ - VERBATIM -) -add_custom_target(flutter_assemble DEPENDS - "${FLUTTER_LIBRARY}" - ${FLUTTER_LIBRARY_HEADERS} - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_PLUGIN} - ${CPP_WRAPPER_SOURCES_APP} -) diff --git a/packages/dynamic_layouts/example/windows/flutter/generated_plugins.cmake b/packages/dynamic_layouts/example/windows/flutter/generated_plugins.cmake deleted file mode 100644 index b93c4c30c16..00000000000 --- a/packages/dynamic_layouts/example/windows/flutter/generated_plugins.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# -# Generated file, do not edit. -# - -list(APPEND FLUTTER_PLUGIN_LIST -) - -list(APPEND FLUTTER_FFI_PLUGIN_LIST -) - -set(PLUGIN_BUNDLED_LIBRARIES) - -foreach(plugin ${FLUTTER_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) - target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) - list(APPEND PLUGIN_BUNDLED_LIBRARIES $) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) -endforeach(plugin) - -foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) -endforeach(ffi_plugin) diff --git a/packages/dynamic_layouts/example/windows/runner/CMakeLists.txt b/packages/dynamic_layouts/example/windows/runner/CMakeLists.txt deleted file mode 100644 index 17411a8ab8e..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/CMakeLists.txt +++ /dev/null @@ -1,39 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} WIN32 - "flutter_window.cpp" - "main.cpp" - "utils.cpp" - "win32_window.cpp" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" - "Runner.rc" - "runner.exe.manifest" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the build version. -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") - -# Disable Windows macros that collide with C++ standard library functions. -target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") - -# Add dependency libraries and include directories. Add any application-specific -# dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") - -# Run the Flutter tool portions of the build. This must not be removed. -add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/packages/dynamic_layouts/example/windows/runner/Runner.rc b/packages/dynamic_layouts/example/windows/runner/Runner.rc deleted file mode 100644 index 0f5c0857111..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/Runner.rc +++ /dev/null @@ -1,121 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#pragma code_page(65001) -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_APP_ICON ICON "resources\\app_icon.ico" - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) -#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD -#else -#define VERSION_AS_NUMBER 1,0,0,0 -#endif - -#if defined(FLUTTER_VERSION) -#define VERSION_AS_STRING FLUTTER_VERSION -#else -#define VERSION_AS_STRING "1.0.0" -#endif - -VS_VERSION_INFO VERSIONINFO - FILEVERSION VERSION_AS_NUMBER - PRODUCTVERSION VERSION_AS_NUMBER - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904e4" - BEGIN - VALUE "CompanyName", "com.example" "\0" - VALUE "FileDescription", "example" "\0" - VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "example" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" - VALUE "OriginalFilename", "example.exe" "\0" - VALUE "ProductName", "example" "\0" - VALUE "ProductVersion", VERSION_AS_STRING "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1252 - END -END - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED diff --git a/packages/dynamic_layouts/example/windows/runner/flutter_window.cpp b/packages/dynamic_layouts/example/windows/runner/flutter_window.cpp deleted file mode 100644 index 217bf9b69e6..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/flutter_window.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#include "flutter_window.h" - -#include - -#include "flutter/generated_plugin_registrant.h" - -FlutterWindow::FlutterWindow(const flutter::DartProject& project) - : project_(project) {} - -FlutterWindow::~FlutterWindow() {} - -bool FlutterWindow::OnCreate() { - if (!Win32Window::OnCreate()) { - return false; - } - - RECT frame = GetClientArea(); - - // The size here must match the window dimensions to avoid unnecessary surface - // creation / destruction in the startup path. - flutter_controller_ = std::make_unique( - frame.right - frame.left, frame.bottom - frame.top, project_); - // Ensure that basic setup of the controller was successful. - if (!flutter_controller_->engine() || !flutter_controller_->view()) { - return false; - } - RegisterPlugins(flutter_controller_->engine()); - SetChildContent(flutter_controller_->view()->GetNativeWindow()); - return true; -} - -void FlutterWindow::OnDestroy() { - if (flutter_controller_) { - flutter_controller_ = nullptr; - } - - Win32Window::OnDestroy(); -} - -LRESULT -FlutterWindow::MessageHandler(HWND hwnd, UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - // Give Flutter, including plugins, an opportunity to handle window messages. - if (flutter_controller_) { - std::optional result = - flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, - lparam); - if (result) { - return *result; - } - } - - switch (message) { - case WM_FONTCHANGE: - flutter_controller_->engine()->ReloadSystemFonts(); - break; - } - - return Win32Window::MessageHandler(hwnd, message, wparam, lparam); -} diff --git a/packages/dynamic_layouts/example/windows/runner/flutter_window.h b/packages/dynamic_layouts/example/windows/runner/flutter_window.h deleted file mode 100644 index 7cbf3d3ebbb..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/flutter_window.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#ifndef RUNNER_FLUTTER_WINDOW_H_ -#define RUNNER_FLUTTER_WINDOW_H_ - -#include -#include - -#include - -#include "win32_window.h" - -// A window that does nothing but host a Flutter view. -class FlutterWindow : public Win32Window { - public: - // Creates a new FlutterWindow hosting a Flutter view running |project|. - explicit FlutterWindow(const flutter::DartProject& project); - virtual ~FlutterWindow(); - - protected: - // Win32Window: - bool OnCreate() override; - void OnDestroy() override; - LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, - LPARAM const lparam) noexcept override; - - private: - // The project to run. - flutter::DartProject project_; - - // The Flutter instance hosted by this window. - std::unique_ptr flutter_controller_; -}; - -#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/packages/dynamic_layouts/example/windows/runner/main.cpp b/packages/dynamic_layouts/example/windows/runner/main.cpp deleted file mode 100644 index 1285aabf714..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/main.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#include -#include -#include - -#include "flutter_window.h" -#include "utils.h" - -int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, - _In_ wchar_t* command_line, _In_ int show_command) { - // Attach to console when present (e.g., 'flutter run') or create a - // new console when running with a debugger. - if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { - CreateAndAttachConsole(); - } - - // Initialize COM, so that it is available for use in the library and/or - // plugins. - ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); - - flutter::DartProject project(L"data"); - - std::vector command_line_arguments = GetCommandLineArguments(); - - project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); - - FlutterWindow window(project); - Win32Window::Point origin(10, 10); - Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"example", origin, size)) { - return EXIT_FAILURE; - } - window.SetQuitOnClose(true); - - ::MSG msg; - while (::GetMessage(&msg, nullptr, 0, 0)) { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - } - - ::CoUninitialize(); - return EXIT_SUCCESS; -} diff --git a/packages/dynamic_layouts/example/windows/runner/resource.h b/packages/dynamic_layouts/example/windows/runner/resource.h deleted file mode 100644 index d5d958dc425..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/resource.h +++ /dev/null @@ -1,16 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by Runner.rc -// -#define IDI_APP_ICON 101 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 102 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/packages/dynamic_layouts/example/windows/runner/resources/app_icon.ico b/packages/dynamic_layouts/example/windows/runner/resources/app_icon.ico deleted file mode 100644 index c04e20caf63..00000000000 Binary files a/packages/dynamic_layouts/example/windows/runner/resources/app_icon.ico and /dev/null differ diff --git a/packages/dynamic_layouts/example/windows/runner/runner.exe.manifest b/packages/dynamic_layouts/example/windows/runner/runner.exe.manifest deleted file mode 100644 index c977c4a4258..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/runner.exe.manifest +++ /dev/null @@ -1,20 +0,0 @@ - - - - - PerMonitorV2 - - - - - - - - - - - - - - - diff --git a/packages/dynamic_layouts/example/windows/runner/utils.cpp b/packages/dynamic_layouts/example/windows/runner/utils.cpp deleted file mode 100644 index 3bb0097f92d..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/utils.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#include "utils.h" - -#include -#include -#include -#include - -#include - -void CreateAndAttachConsole() { - if (::AllocConsole()) { - FILE* unused; - if (freopen_s(&unused, "CONOUT$", "w", stdout)) { - _dup2(_fileno(stdout), 1); - } - if (freopen_s(&unused, "CONOUT$", "w", stderr)) { - _dup2(_fileno(stdout), 2); - } - std::ios::sync_with_stdio(); - FlutterDesktopResyncOutputStreams(); - } -} - -std::vector GetCommandLineArguments() { - // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. - int argc; - wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); - if (argv == nullptr) { - return std::vector(); - } - - std::vector command_line_arguments; - - // Skip the first argument as it's the binary name. - for (int i = 1; i < argc; i++) { - command_line_arguments.push_back(Utf8FromUtf16(argv[i])); - } - - ::LocalFree(argv); - - return command_line_arguments; -} - -std::string Utf8FromUtf16(const wchar_t* utf16_string) { - if (utf16_string == nullptr) { - return std::string(); - } - int target_length = - ::WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, -1, - nullptr, 0, nullptr, nullptr); - std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { - return utf8_string; - } - utf8_string.resize(target_length); - int converted_length = ::WideCharToMultiByte( - CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, -1, utf8_string.data(), - target_length, nullptr, nullptr); - if (converted_length == 0) { - return std::string(); - } - return utf8_string; -} diff --git a/packages/dynamic_layouts/example/windows/runner/utils.h b/packages/dynamic_layouts/example/windows/runner/utils.h deleted file mode 100644 index 6d1cc48f042..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/utils.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#ifndef RUNNER_UTILS_H_ -#define RUNNER_UTILS_H_ - -#include -#include - -// Creates a console for the process, and redirects stdout and stderr to -// it for both the runner and the Flutter library. -void CreateAndAttachConsole(); - -// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string -// encoded in UTF-8. Returns an empty std::string on failure. -std::string Utf8FromUtf16(const wchar_t* utf16_string); - -// Gets the command line arguments passed in as a std::vector, -// encoded in UTF-8. Returns an empty std::vector on failure. -std::vector GetCommandLineArguments(); - -#endif // RUNNER_UTILS_H_ diff --git a/packages/dynamic_layouts/example/windows/runner/win32_window.cpp b/packages/dynamic_layouts/example/windows/runner/win32_window.cpp deleted file mode 100644 index 34738de2d35..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/win32_window.cpp +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#include "win32_window.h" - -#include - -#include "resource.h" - -namespace { - -constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; - -// The number of Win32Window objects that currently exist. -static int g_active_window_count = 0; - -using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); - -// Scale helper to convert logical scaler values to physical using passed in -// scale factor -int Scale(int source, double scale_factor) { - return static_cast(source * scale_factor); -} - -// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. -// This API is only needed for PerMonitor V1 awareness mode. -void EnableFullDpiSupportIfAvailable(HWND hwnd) { - HMODULE user32_module = LoadLibraryA("User32.dll"); - if (!user32_module) { - return; - } - auto enable_non_client_dpi_scaling = - reinterpret_cast( - GetProcAddress(user32_module, "EnableNonClientDpiScaling")); - if (enable_non_client_dpi_scaling != nullptr) { - enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); - } -} - -} // namespace - -// Manages the Win32Window's window class registration. -class WindowClassRegistrar { - public: - ~WindowClassRegistrar() = default; - - // Returns the singleton registar instance. - static WindowClassRegistrar* GetInstance() { - if (!instance_) { - instance_ = new WindowClassRegistrar(); - } - return instance_; - } - - // Returns the name of the window class, registering the class if it hasn't - // previously been registered. - const wchar_t* GetWindowClass(); - - // Unregisters the window class. Should only be called if there are no - // instances of the window. - void UnregisterWindowClass(); - - private: - WindowClassRegistrar() = default; - - static WindowClassRegistrar* instance_; - - bool class_registered_ = false; -}; - -WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; - -const wchar_t* WindowClassRegistrar::GetWindowClass() { - if (!class_registered_) { - WNDCLASS window_class{}; - window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); - window_class.lpszClassName = kWindowClassName; - window_class.style = CS_HREDRAW | CS_VREDRAW; - window_class.cbClsExtra = 0; - window_class.cbWndExtra = 0; - window_class.hInstance = GetModuleHandle(nullptr); - window_class.hIcon = - LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); - window_class.hbrBackground = 0; - window_class.lpszMenuName = nullptr; - window_class.lpfnWndProc = Win32Window::WndProc; - RegisterClass(&window_class); - class_registered_ = true; - } - return kWindowClassName; -} - -void WindowClassRegistrar::UnregisterWindowClass() { - UnregisterClass(kWindowClassName, nullptr); - class_registered_ = false; -} - -Win32Window::Win32Window() { ++g_active_window_count; } - -Win32Window::~Win32Window() { - --g_active_window_count; - Destroy(); -} - -bool Win32Window::CreateAndShow(const std::wstring& title, const Point& origin, - const Size& size) { - Destroy(); - - const wchar_t* window_class = - WindowClassRegistrar::GetInstance()->GetWindowClass(); - - const POINT target_point = {static_cast(origin.x), - static_cast(origin.y)}; - HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); - UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); - double scale_factor = dpi / 96.0; - - HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, - Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), - Scale(size.width, scale_factor), Scale(size.height, scale_factor), - nullptr, nullptr, GetModuleHandle(nullptr), this); - - if (!window) { - return false; - } - - return OnCreate(); -} - -// static -LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - if (message == WM_NCCREATE) { - auto window_struct = reinterpret_cast(lparam); - SetWindowLongPtr(window, GWLP_USERDATA, - reinterpret_cast(window_struct->lpCreateParams)); - - auto that = static_cast(window_struct->lpCreateParams); - EnableFullDpiSupportIfAvailable(window); - that->window_handle_ = window; - } else if (Win32Window* that = GetThisFromHandle(window)) { - return that->MessageHandler(window, message, wparam, lparam); - } - - return DefWindowProc(window, message, wparam, lparam); -} - -LRESULT -Win32Window::MessageHandler(HWND hwnd, UINT const message, WPARAM const wparam, - LPARAM const lparam) noexcept { - switch (message) { - case WM_DESTROY: - window_handle_ = nullptr; - Destroy(); - if (quit_on_close_) { - PostQuitMessage(0); - } - return 0; - - case WM_DPICHANGED: { - auto newRectSize = reinterpret_cast(lparam); - LONG newWidth = newRectSize->right - newRectSize->left; - LONG newHeight = newRectSize->bottom - newRectSize->top; - - SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, - newHeight, SWP_NOZORDER | SWP_NOACTIVATE); - - return 0; - } - case WM_SIZE: { - RECT rect = GetClientArea(); - if (child_content_ != nullptr) { - // Size and position the child window. - MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, - rect.bottom - rect.top, TRUE); - } - return 0; - } - - case WM_ACTIVATE: - if (child_content_ != nullptr) { - SetFocus(child_content_); - } - return 0; - } - - return DefWindowProc(window_handle_, message, wparam, lparam); -} - -void Win32Window::Destroy() { - OnDestroy(); - - if (window_handle_) { - DestroyWindow(window_handle_); - window_handle_ = nullptr; - } - if (g_active_window_count == 0) { - WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); - } -} - -Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { - return reinterpret_cast( - GetWindowLongPtr(window, GWLP_USERDATA)); -} - -void Win32Window::SetChildContent(HWND content) { - child_content_ = content; - SetParent(content, window_handle_); - RECT frame = GetClientArea(); - - MoveWindow(content, frame.left, frame.top, frame.right - frame.left, - frame.bottom - frame.top, true); - - SetFocus(child_content_); -} - -RECT Win32Window::GetClientArea() { - RECT frame; - GetClientRect(window_handle_, &frame); - return frame; -} - -HWND Win32Window::GetHandle() { return window_handle_; } - -void Win32Window::SetQuitOnClose(bool quit_on_close) { - quit_on_close_ = quit_on_close; -} - -bool Win32Window::OnCreate() { - // No-op; provided for subclasses. - return true; -} - -void Win32Window::OnDestroy() { - // No-op; provided for subclasses. -} diff --git a/packages/dynamic_layouts/example/windows/runner/win32_window.h b/packages/dynamic_layouts/example/windows/runner/win32_window.h deleted file mode 100644 index 0f8bd1b7f92..00000000000 --- a/packages/dynamic_layouts/example/windows/runner/win32_window.h +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#ifndef RUNNER_WIN32_WINDOW_H_ -#define RUNNER_WIN32_WINDOW_H_ - -#include - -#include -#include -#include - -// A class abstraction for a high DPI-aware Win32 Window. Intended to be -// inherited from by classes that wish to specialize with custom -// rendering and input handling -class Win32Window { - public: - struct Point { - unsigned int x; - unsigned int y; - Point(unsigned int x, unsigned int y) : x(x), y(y) {} - }; - - struct Size { - unsigned int width; - unsigned int height; - Size(unsigned int width, unsigned int height) - : width(width), height(height) {} - }; - - Win32Window(); - virtual ~Win32Window(); - - // Creates and shows a win32 window with |title| and position and size using - // |origin| and |size|. New windows are created on the default monitor. Window - // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, const Point& origin, - const Size& size); - - // Release OS resources associated with window. - void Destroy(); - - // Inserts |content| into the window tree. - void SetChildContent(HWND content); - - // Returns the backing Window handle to enable clients to set icon and other - // window properties. Returns nullptr if the window has been destroyed. - HWND GetHandle(); - - // If true, closing this window will quit the application. - void SetQuitOnClose(bool quit_on_close); - - // Return a RECT representing the bounds of the current client area. - RECT GetClientArea(); - - protected: - // Processes and route salient window messages for mouse handling, - // size change and DPI. Delegates handling of these to member overloads that - // inheriting classes can handle. - virtual LRESULT MessageHandler(HWND window, UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept; - - // Called when CreateAndShow is called, allowing subclass window-related - // setup. Subclasses should return false if setup fails. - virtual bool OnCreate(); - - // Called when Destroy is called. - virtual void OnDestroy(); - - private: - friend class WindowClassRegistrar; - - // OS callback called by message pump. Handles the WM_NCCREATE message which - // is passed when the non-client area is being created and enables automatic - // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by - // MessageHandler. - static LRESULT CALLBACK WndProc(HWND const window, UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept; - - // Retrieves a class instance pointer for |window| - static Win32Window* GetThisFromHandle(HWND const window) noexcept; - - bool quit_on_close_ = false; - - // window handle for top level window. - HWND window_handle_ = nullptr; - - // window handle for hosted content. - HWND child_content_ = nullptr; -}; - -#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/packages/dynamic_layouts/lib/dynamic_layouts.dart b/packages/dynamic_layouts/lib/dynamic_layouts.dart deleted file mode 100644 index de26b07b37b..00000000000 --- a/packages/dynamic_layouts/lib/dynamic_layouts.dart +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -export 'src/base_grid_layout.dart'; -export 'src/dynamic_grid.dart'; -export 'src/render_dynamic_grid.dart'; -export 'src/staggered_layout.dart'; -export 'src/wrap_layout.dart'; diff --git a/packages/dynamic_layouts/lib/src/base_grid_layout.dart b/packages/dynamic_layouts/lib/src/base_grid_layout.dart deleted file mode 100644 index df78c45b082..00000000000 --- a/packages/dynamic_layouts/lib/src/base_grid_layout.dart +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/foundation.dart'; -import 'package:flutter/rendering.dart'; - -/// Describes the placement of a child in a [RenderDynamicSliverGrid]. -class DynamicSliverGridGeometry extends SliverGridGeometry { - /// Creates an object that describes the placement of a child in a - /// [RenderDynamicSliverGrid]. - const DynamicSliverGridGeometry({ - required super.scrollOffset, - required super.crossAxisOffset, - required super.mainAxisExtent, - required super.crossAxisExtent, - }); - - /// Returns [BoxConstraints] that will be tight if the - /// [DynamicSliverGridLayout] has provided fixed extents, forcing the child to - /// have the required size. - /// - /// If the [mainAxisExtent] is [double.infinity] the child will be allowed to - /// choose its own size in the main axis. Similarly, an infinite - /// [crossAxisExtent] will result in the child sizing itself in the cross - /// axis. Otherwise, the provided cross axis size or the - /// [SliverConstraints.crossAxisExtent] will be used to create tight - /// constraints in the cross axis. - /// - /// This differs from [SliverGridGeometry.getBoxConstraints] in that it allows - /// loose constraints, allowing the child to be its preferred size, or within - /// a range of minimum and maximum extents. - @override - BoxConstraints getBoxConstraints(SliverConstraints constraints) { - final double mainMinExtent = mainAxisExtent.isFinite ? mainAxisExtent : 0; - final double crossMinExtent = - crossAxisExtent.isInfinite ? 0.0 : crossAxisExtent; - - switch (constraints.axis) { - case Axis.vertical: - return BoxConstraints( - minHeight: mainMinExtent, - maxHeight: mainAxisExtent, - minWidth: crossMinExtent, - maxWidth: crossAxisExtent, - ); - case Axis.horizontal: - return BoxConstraints( - minHeight: crossMinExtent, - maxHeight: crossAxisExtent, - minWidth: mainMinExtent, - maxWidth: mainAxisExtent, - ); - } - } -} - -/// Manages the size and position of all the tiles in a [RenderSliverGrid]. -/// -/// Rather than providing a grid with a [SliverGridLayout] directly, you instead -/// provide the grid with a [SliverGridDelegate], which can compute a -/// [SliverGridLayout] given the current [SliverConstraints]. -/// -/// {@template dynamicLayouts.garbageCollection} -/// This grid does not currently collect leading garbage as the user scrolls -/// further down. This is because the current implementation requires the -/// leading tiles to maintain the current layout. Follow -/// [this github issue](https://github.com/flutter/flutter/issues/112234) for -/// tracking progress on dynamic leading garbage collection. -/// {@endtemplate} -abstract class DynamicSliverGridLayout extends SliverGridLayout { - /// The estimated size and position of the child with the given index. - /// - /// The [DynamicSliverGridGeometry] that is returned will - /// provide looser constraints to the child, whose size after layout can be - /// reported back to the layout object in [updateGeometryForChildIndex]. - @override - DynamicSliverGridGeometry getGeometryForChildIndex(int index); - - /// Update the size and position of the child with the given index, - /// considering the size of the child after layout. - /// - /// This is used to update the layout object after the child has laid out, - /// allowing the layout pattern to adapt to the child's size. - DynamicSliverGridGeometry updateGeometryForChildIndex( - int index, - Size childSize, - ); - - /// Called by [RenderDynamicSliverGrid] to validate the layout pattern has - /// filled the screen. - /// - /// A given child may have reached the target scroll offset of the current - /// layout pass, but there may still be more children to lay out based on the - /// pattern. - bool reachedTargetScrollOffset(double targetOffset); - - // These methods are not relevant to dynamic grid building, but extending the - // base [SliverGridLayout] class allows us to re-use existing - // [SliverGridDelegate]s like [SliverGridDelegateWithFixedCrossAxisCount] and - // [SliverGridDelegateWithMaxCrossAxisExtent]. - @override - @mustCallSuper - double computeMaxScrollOffset(int childCount) => throw UnimplementedError(); - @override - @mustCallSuper - int getMaxChildIndexForScrollOffset(double scrollOffset) => - throw UnimplementedError(); - @override - @mustCallSuper - int getMinChildIndexForScrollOffset(double scrollOffset) => - throw UnimplementedError(); -} diff --git a/packages/dynamic_layouts/lib/src/dynamic_grid.dart b/packages/dynamic_layouts/lib/src/dynamic_grid.dart deleted file mode 100644 index 8eedfe40c31..00000000000 --- a/packages/dynamic_layouts/lib/src/dynamic_grid.dart +++ /dev/null @@ -1,256 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/widgets.dart'; - -import 'render_dynamic_grid.dart'; -import 'staggered_layout.dart'; -import 'wrap_layout.dart'; - -/// A scrollable grid of widgets, capable of dynamically positioning tiles based -/// on different aspects of the children's size when laid out with loose -/// constraints. -/// -/// Three [SliverGridDelegate]s support wrapping or staggering the dynamically -/// sized children of the grid. Staggering children can use -/// [SliverGridDelegateWithFixedCrossAxisCount] or -/// [SliverGridDelegateWithMaxCrossAxisExtent], while wrapping uses its own -/// [SliverGridDelegateWithWrapping]. -/// -/// {@macro dynamicLayouts.garbageCollection} -/// -/// The following example shows how to use the [DynamicGridView.wrap] -/// constructor. -/// -/// ```dart -/// DynamicGridView.wrap( -/// mainAxisSpacing: 10, -/// crossAxisSpacing: 20, -/// children: [ -/// Container( -/// height: 100, -/// width: 200, -/// color: Colors.amberAccent[100], -/// child: const Center(child: Text('Item 1') -/// ), -/// ), -/// Container( -/// height: 50, -/// width: 70, -/// color: Colors.blue[100], -/// child: const Center(child: Text('Item 2'), -/// ), -/// ), -/// Container( -/// height: 82, -/// width: 300, -/// color: Colors.pink[100], -/// child: const Center(child: Text('Item 3'), -/// ), -/// ), -/// Container( -/// color: Colors.green[100], -/// child: const Center(child: Text('Item 3'), -/// ), -/// ), -/// ], -/// ), -/// ``` -/// -/// This sample code shows how to use the [DynamicGridView.staggered] -/// constructor with a [maxCrossAxisExtent]: -/// -/// ```dart -/// DynamicGridView.staggered( -/// maxCrossAxisExtent: 100, -/// crossAxisSpacing: 2, -/// mainAxisSpacing: 2, -/// children: List.generate( -/// 50, -/// (int index) => Container( -/// height: index % 3 * 50 + 20, -/// color: Colors.amber[index % 9 * 100], -/// child: Center(child: Text("Index $index")), -/// ), -/// ), -/// ); -/// ``` -class DynamicGridView extends GridView { - /// Creates a scrollable, 2D array of widgets with a custom - /// [SliverGridDelegate]. - DynamicGridView({ - super.key, - super.scrollDirection, - super.reverse, - required super.gridDelegate, - // This creates a SliverChildListDelegate in the super class. - super.children = const [], - }); - - /// Creates a scrollable, 2D array of widgets that are created on demand. - DynamicGridView.builder({ - super.key, - super.scrollDirection, - super.reverse, - required super.gridDelegate, - // This creates a SliverChildBuilderDelegate in the super class. - required super.itemBuilder, - super.itemCount, - }) : super.builder(); - - /// Creates a scrollable, 2D array of widgets with tiles where each tile can - /// have its own size. - /// - /// Uses a [SliverGridDelegateWithWrapping] as the [gridDelegate]. - /// - /// The following example shows how to use the DynamicGridView.wrap constructor. - /// - /// ```dart - /// DynamicGridView.wrap( - /// mainAxisSpacing: 10, - /// crossAxisSpacing: 20, - /// children: [ - /// Container( - /// height: 100, - /// width: 200, - /// color: Colors.amberAccent[100], - /// child: const Center(child: Text('Item 1') - /// ), - /// ), - /// Container( - /// height: 50, - /// width: 70, - /// color: Colors.blue[100], - /// child: const Center(child: Text('Item 2'), - /// ), - /// ), - /// Container( - /// height: 82, - /// width: 300, - /// color: Colors.pink[100], - /// child: const Center(child: Text('Item 3'), - /// ), - /// ), - /// Container( - /// color: Colors.green[100], - /// child: const Center(child: Text('Item 3'), - /// ), - /// ), - /// ], - /// ), - /// ``` - /// - /// See also: - /// - /// * [SliverGridDelegateWithWrapping] to see a more detailed explanation of - /// how the wrapping works. - DynamicGridView.wrap({ - super.key, - super.scrollDirection, - super.reverse, - double mainAxisSpacing = 0.0, - double crossAxisSpacing = 0.0, - double childCrossAxisExtent = double.infinity, - double childMainAxisExtent = double.infinity, - super.children = const [], - }) : super( - gridDelegate: SliverGridDelegateWithWrapping( - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - childCrossAxisExtent: childCrossAxisExtent, - childMainAxisExtent: childMainAxisExtent, - ), - ); - - /// Creates a scrollable, 2D array of widgets where each tile's main axis - /// extent will be determined by the child's corresponding finite size and - /// the cross axis extent will be fixed, generating a staggered layout. - /// - /// Either a [crossAxisCount] or a [maxCrossAxisExtent] must be provided. - /// The constructor will then use a - /// [DynamicSliverGridDelegateWithFixedCrossAxisCount] or a - /// [DynamicSliverGridDelegateWithMaxCrossAxisExtent] as its [gridDelegate], - /// respectively. - /// - /// This sample code shows how to use the constructor with a - /// [maxCrossAxisExtent] and a simple layout: - /// - /// ```dart - /// DynamicGridView.staggered( - /// maxCrossAxisExtent: 100, - /// crossAxisSpacing: 2, - /// mainAxisSpacing: 2, - /// children: List.generate( - /// 50, - /// (int index) => Container( - /// height: index % 3 * 50 + 20, - /// color: Colors.amber[index % 9 * 100], - /// child: Center(child: Text("Index $index")), - /// ), - /// ), - /// ); - /// ``` - DynamicGridView.staggered({ - super.key, - super.scrollDirection, - super.reverse, - int? crossAxisCount, - double? maxCrossAxisExtent, - double mainAxisSpacing = 0.0, - double crossAxisSpacing = 0.0, - super.children = const [], - }) : assert(crossAxisCount != null || maxCrossAxisExtent != null), - assert(crossAxisCount == null || maxCrossAxisExtent == null), - super( - gridDelegate: crossAxisCount != null - ? DynamicSliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - ) - : DynamicSliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: maxCrossAxisExtent!, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - ), - ); - - @override - Widget buildChildLayout(BuildContext context) { - return DynamicSliverGrid( - delegate: childrenDelegate, - gridDelegate: gridDelegate, - ); - } -} - -/// A sliver that places multiple box children in a two dimensional arrangement. -class DynamicSliverGrid extends SliverMultiBoxAdaptorWidget { - /// Creates a sliver that places multiple box children in a two dimensional - /// arrangement. - const DynamicSliverGrid({ - super.key, - required super.delegate, - required this.gridDelegate, - }); - - /// The delegate that manages the size and position of the children. - final SliverGridDelegate gridDelegate; - - @override - RenderDynamicSliverGrid createRenderObject(BuildContext context) { - final SliverMultiBoxAdaptorElement element = - context as SliverMultiBoxAdaptorElement; - return RenderDynamicSliverGrid( - childManager: element, gridDelegate: gridDelegate); - } - - @override - void updateRenderObject( - BuildContext context, - RenderDynamicSliverGrid renderObject, - ) { - renderObject.gridDelegate = gridDelegate; - } -} diff --git a/packages/dynamic_layouts/lib/src/render_dynamic_grid.dart b/packages/dynamic_layouts/lib/src/render_dynamic_grid.dart deleted file mode 100644 index 468348dc1cf..00000000000 --- a/packages/dynamic_layouts/lib/src/render_dynamic_grid.dart +++ /dev/null @@ -1,402 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:math' as math; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/rendering.dart'; - -import 'base_grid_layout.dart'; - -/// A sliver that places multiple box children in a two dimensional arrangement. -/// -/// [RenderDynamicSliverGrid] places its children in arbitrary positions determined by -/// the [DynamicSliverGridLayout] provided by the [gridDelegate]. -/// -/// {@macro dynamicLayouts.garbageCollection} -class RenderDynamicSliverGrid extends RenderSliverGrid { - /// Creates a sliver that contains multiple box children whose size and - /// position are managed by a delegate. - /// - /// The [childManager] and [gridDelegate] arguments must not be null. - RenderDynamicSliverGrid({ - required super.childManager, - required super.gridDelegate, - }); - - @override - void performLayout() { - final SliverConstraints constraints = this.constraints; - childManager.didStartLayout(); - childManager.setDidUnderflow(false); - - final double scrollOffset = - constraints.scrollOffset + constraints.cacheOrigin; - assert(scrollOffset >= 0.0); - final double remainingExtent = constraints.remainingCacheExtent; - assert(remainingExtent >= 0.0); - final double targetEndScrollOffset = scrollOffset + remainingExtent; - final DynamicSliverGridLayout layout = - gridDelegate.getLayout(constraints) as DynamicSliverGridLayout; - int leadingGarbage = 0; - int trailingGarbage = 0; - bool reachedEnd = false; - - // This algorithm in principle is straight-forward: find the first child - // that overlaps the given scrollOffset, creating more children at the top - // of the grid if necessary, then walk through the grid updating and laying - // out each child and adding more at the end if necessary until we have - // enough children to cover the entire viewport. - // - // It is complicated by one minor issue, which is that any time you update - // or create a child, it's possible that some of the children that - // haven't yet been laid out will be removed, leaving the list in an - // inconsistent state, and requiring that missing nodes be recreated. - // - // To keep this mess tractable, this algorithm starts from what is currently - // the first child, if any, and then walks up and/or down from there, so - // that the nodes that might get removed are always at the edges of what has - // already been laid out. - - // Make sure we have at least one child to start from. - if (firstChild == null && !addInitialChild()) { - // There are no children. - geometry = SliverGeometry.zero; - childManager.didFinishLayout(); - return; - } - - // We have at least one child. - assert(firstChild != null); - - // These variables track the range of children that we have laid out. Within - // this range, the children have consecutive indices. Outside this range, - // it's possible for a child to get removed without notice. - RenderBox? leadingChildWithLayout, trailingChildWithLayout; - RenderBox? earliestUsefulChild = firstChild; - - // A firstChild with null layout offset is likely a result of children - // reordering. - // - // We rely on firstChild to have accurate layout offset. In the case of null - // layout offset, we have to find the first child that has valid layout - // offset. - if (childScrollOffset(firstChild!) == null) { - int leadingChildrenWithoutLayoutOffset = 0; - while (earliestUsefulChild != null && - childScrollOffset(earliestUsefulChild) == null) { - earliestUsefulChild = childAfter(earliestUsefulChild); - leadingChildrenWithoutLayoutOffset += 1; - } - // We should be able to destroy children with null layout offset safely, - // because they are likely outside of viewport - collectGarbage(leadingChildrenWithoutLayoutOffset, 0); - // If we cannot find a valid layout offset, start from the initial child. - if (firstChild == null && !addInitialChild()) { - // There are no children. - geometry = SliverGeometry.zero; - childManager.didFinishLayout(); - return; - } - } - - // Find the last child that is at or before the scrollOffset. - earliestUsefulChild = firstChild; - assert(earliestUsefulChild != null); - for (int index = indexOf(earliestUsefulChild!) - 1; - childScrollOffset(earliestUsefulChild!)! > scrollOffset; - --index) { - final double earliestScrollOffset = - childScrollOffset(earliestUsefulChild)!; - // We have to add children before the earliestUsefulChild. - SliverGridGeometry gridGeometry = layout.getGeometryForChildIndex(index); - earliestUsefulChild = insertAndLayoutLeadingChild( - gridGeometry.getBoxConstraints(constraints), - parentUsesSize: true, - ); - // There are no more preceding children. - if (earliestUsefulChild == null) { - final SliverGridParentData childParentData = - firstChild!.parentData! as SliverGridParentData; - childParentData.layoutOffset = gridGeometry.scrollOffset; - childParentData.crossAxisOffset = gridGeometry.crossAxisOffset; - - if (scrollOffset == 0.0) { - // insertAndLayoutLeadingChild only lays out the children before - // firstChild. In this case, nothing has been laid out. We have - // to lay out firstChild manually. - gridGeometry = layout.getGeometryForChildIndex(0); - firstChild!.layout(gridGeometry.getBoxConstraints(constraints), - parentUsesSize: true); - earliestUsefulChild = firstChild; - leadingChildWithLayout = earliestUsefulChild; - trailingChildWithLayout ??= earliestUsefulChild; - break; - } else { - // We ran out of children before reaching the scroll offset. - // We must inform our parent that this sliver cannot fulfill - // its contract and that we need a scroll offset correction. - geometry = SliverGeometry( - scrollOffsetCorrection: -scrollOffset, - ); - return; - } - } - - final double firstChildScrollOffset = - earliestScrollOffset - paintExtentOf(firstChild!); - // firstChildScrollOffset may contain double precision error - if (firstChildScrollOffset < -precisionErrorTolerance) { - // Let's assume there is no child before the first child. We will - // correct it on the next layout if it is not. - geometry = SliverGeometry( - scrollOffsetCorrection: -firstChildScrollOffset, - ); - final SliverGridParentData childParentData = - firstChild!.parentData! as SliverGridParentData; - childParentData.layoutOffset = gridGeometry.scrollOffset; - childParentData.crossAxisOffset = gridGeometry.crossAxisOffset; - return; - } - - final SliverGridParentData childParentData = - earliestUsefulChild.parentData! as SliverGridParentData; - gridGeometry = layout.updateGeometryForChildIndex( - indexOf(earliestUsefulChild), earliestUsefulChild.size); - childParentData.layoutOffset = gridGeometry.scrollOffset; - childParentData.crossAxisOffset = gridGeometry.crossAxisOffset; - assert(earliestUsefulChild == firstChild); - leadingChildWithLayout = earliestUsefulChild; - trailingChildWithLayout ??= earliestUsefulChild; - } - - assert(childScrollOffset(firstChild!)! > -precisionErrorTolerance); - - // If the scroll offset is at zero, we should make sure we are - // actually at the beginning of the list. - if (scrollOffset < precisionErrorTolerance) { - // We iterate from the firstChild in case the leading child has a 0 paint - // extent. - int indexOfFirstChild = indexOf(firstChild!); - while (indexOfFirstChild > 0) { - final double earliestScrollOffset = childScrollOffset(firstChild!)!; - // We correct one child at a time. If there are more children before - // the earliestUsefulChild, we will correct it once the scroll offset - // reaches zero again. - SliverGridGeometry gridGeometry = - layout.getGeometryForChildIndex(indexOfFirstChild - 1); - earliestUsefulChild = insertAndLayoutLeadingChild( - gridGeometry.getBoxConstraints(constraints), - parentUsesSize: true, - ); - assert(earliestUsefulChild != null); - final double firstChildScrollOffset = - earliestScrollOffset - paintExtentOf(firstChild!); - final SliverGridParentData childParentData = - firstChild!.parentData! as SliverGridParentData; - gridGeometry = layout.updateGeometryForChildIndex( - indexOfFirstChild - 1, firstChild!.size); - childParentData.layoutOffset = gridGeometry.scrollOffset; - childParentData.crossAxisOffset = gridGeometry.crossAxisOffset; - // We only need to correct if the leading child actually has a - // paint extent. - if (firstChildScrollOffset < -precisionErrorTolerance) { - geometry = SliverGeometry( - scrollOffsetCorrection: -firstChildScrollOffset, - ); - return; - } - indexOfFirstChild = indexOf(firstChild!); - } - } - - // At this point, earliestUsefulChild is the first child, and is a child - // whose scrollOffset is at or before the scrollOffset, and - // leadingChildWithLayout and trailingChildWithLayout are either null or - // cover a range of render boxes that we have laid out with the first being - // the same as earliestUsefulChild and the last being either at or after the - // scroll offset. - - assert(earliestUsefulChild == firstChild); - assert(childScrollOffset(earliestUsefulChild!)! <= scrollOffset); - - // Make sure we've laid out at least one child. - if (leadingChildWithLayout == null) { - final int index = indexOf(earliestUsefulChild!); - SliverGridGeometry gridGeometry = layout.getGeometryForChildIndex(index); - earliestUsefulChild.layout( - gridGeometry.getBoxConstraints(constraints), - parentUsesSize: true, - ); - leadingChildWithLayout = earliestUsefulChild; - trailingChildWithLayout = earliestUsefulChild; - gridGeometry = - layout.updateGeometryForChildIndex(index, earliestUsefulChild.size); - final SliverGridParentData childParentData = - earliestUsefulChild.parentData! as SliverGridParentData; - childParentData.layoutOffset = gridGeometry.scrollOffset; - childParentData.crossAxisOffset = gridGeometry.crossAxisOffset; - } - - // Here, earliestUsefulChild is still the first child, it's got a - // scrollOffset that is at or before our actual scrollOffset, and it has - // been laid out, and is in fact our leadingChildWithLayout. It's possible - // that some children beyond that one have also been laid out. - - bool inLayoutRange = true; - RenderBox? child = earliestUsefulChild; - int index = indexOf(child!); - double endScrollOffset = childScrollOffset(child)! + paintExtentOf(child); - bool advance() { - // returns true if we advanced, false if we have no more children - // This function is used in two different places below, to avoid code duplication. - late SliverGridGeometry gridGeometry; - assert(child != null); - if (child == trailingChildWithLayout) { - inLayoutRange = false; - } - child = childAfter(child!); - if (child == null) { - inLayoutRange = false; - } - index += 1; - if (!inLayoutRange) { - if (child == null || indexOf(child!) != index) { - // We are missing a child. Insert it (and lay it out) if possible. - gridGeometry = layout - .getGeometryForChildIndex(indexOf(trailingChildWithLayout!) + 1); - child = insertAndLayoutChild( - gridGeometry.getBoxConstraints(constraints), - after: trailingChildWithLayout, - parentUsesSize: true, - ); - if (child == null) { - // We have run out of children. - return false; - } - } else { - // Lay out the child. - assert(indexOf(child!) == index); - gridGeometry = layout.getGeometryForChildIndex(index); - child!.layout( - gridGeometry.getBoxConstraints(constraints), - parentUsesSize: true, - ); - } - trailingChildWithLayout = child; - } - assert(child != null); - final SliverGridParentData childParentData = - child!.parentData! as SliverGridParentData; - gridGeometry = layout.updateGeometryForChildIndex(index, child!.size); - childParentData.layoutOffset = gridGeometry.scrollOffset; - childParentData.crossAxisOffset = gridGeometry.crossAxisOffset; - assert(childParentData.index == index); - // The current child may not extend past a previously laid out child. - endScrollOffset = math.max( - endScrollOffset, - childScrollOffset(child!)! + paintExtentOf(child!), - ); - return true; - } - - // Find the first child that ends after the scroll offset. - while (endScrollOffset < scrollOffset) { - leadingGarbage += 1; - if (!advance()) { - assert(leadingGarbage == childCount); - assert(child == null); - // we want to make sure we keep the last child around so we know the end - // scroll offset - collectGarbage(leadingGarbage - 1, 0); - assert(firstChild == lastChild); - final double extent = - childScrollOffset(lastChild!)! + paintExtentOf(lastChild!); - geometry = SliverGeometry( - scrollExtent: extent, - maxPaintExtent: extent, - ); - return; - } - } - - // Now find the first child that ends after our end. - while (endScrollOffset < targetEndScrollOffset || - !layout.reachedTargetScrollOffset(targetEndScrollOffset)) { - if (!advance()) { - reachedEnd = true; - break; - } - } - - // Finally count up all the remaining children and label them as garbage. - if (child != null) { - child = childAfter(child!); - while (child != null) { - trailingGarbage += 1; - child = childAfter(child!); - } - } - - // At this point everything should be good to go, we just have to clean up - // the garbage and report the geometry. - // We only collect trailing garbage because - // - // 1 - dynamic tile placement is dependent on the preceding tile, - // potentially, the SliverGridLayout could cache the placement of each - // tile to refer back to, but that would mean tiles could not change in - // size or be added/removed without having to recompute the whole layout. - // - // 2 - Currently, Flutter only supports collecting garbage in sequential - // order. Dynamic layout patterns can break this assumption. In order to - // truly collect garbage efficiently, support for non-sequential garbage - // collection is necessary. - // TODO(all): https://github.com/flutter/flutter/issues/112234 - collectGarbage(0, trailingGarbage); - - assert(debugAssertChildListIsNonEmptyAndContiguous()); - final double estimatedMaxScrollOffset; - if (reachedEnd) { - estimatedMaxScrollOffset = endScrollOffset; - } else { - estimatedMaxScrollOffset = childManager.estimateMaxScrollOffset( - constraints, - firstIndex: indexOf(firstChild!), - lastIndex: indexOf(lastChild!), - leadingScrollOffset: childScrollOffset(firstChild!), - trailingScrollOffset: endScrollOffset, - ); - assert(estimatedMaxScrollOffset >= - endScrollOffset - childScrollOffset(firstChild!)!); - } - final double paintExtent = calculatePaintOffset( - constraints, - from: childScrollOffset(firstChild!)!, - to: endScrollOffset, - ); - final double cacheExtent = calculateCacheOffset( - constraints, - from: childScrollOffset(firstChild!)!, - to: endScrollOffset, - ); - final double targetEndScrollOffsetForPaint = - constraints.scrollOffset + constraints.remainingPaintExtent; - geometry = SliverGeometry( - scrollExtent: estimatedMaxScrollOffset, - paintExtent: paintExtent, - cacheExtent: cacheExtent, - maxPaintExtent: estimatedMaxScrollOffset, - // Conservative to avoid flickering away the clip during scroll. - hasVisualOverflow: endScrollOffset > targetEndScrollOffsetForPaint || - constraints.scrollOffset > 0.0, - ); - - // We may have started the layout while scrolled to the end, which would not - // expose a new child. - if (estimatedMaxScrollOffset == endScrollOffset) { - childManager.setDidUnderflow(true); - } - childManager.didFinishLayout(); - } -} diff --git a/packages/dynamic_layouts/lib/src/staggered_layout.dart b/packages/dynamic_layouts/lib/src/staggered_layout.dart deleted file mode 100644 index f5fb4fb86a0..00000000000 --- a/packages/dynamic_layouts/lib/src/staggered_layout.dart +++ /dev/null @@ -1,318 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:math' as math; - -import 'package:flutter/rendering.dart'; - -import 'base_grid_layout.dart'; -import 'render_dynamic_grid.dart'; -import 'wrap_layout.dart'; - -/// A [DynamicSliverGridLayout] that creates tiles with varying main axis -/// sizes and fixed cross axis sizes, generating a staggered layout. The extent -/// in the main axis will be defined by the child's size and must be finite. -/// Similar to Android's StaggeredGridLayoutManager: -/// [https://developer.android.com/reference/androidx/recyclerview/widget/StaggeredGridLayoutManager]. -/// -/// The tiles are placed in the column (or row in case [scrollDirection] is set -/// to [Axis.horizontal]) with the minimum extent, which means children are not -/// necessarily laid out in sequential order. -/// -/// See also: -/// -/// * [SliverGridWrappingTileLayout], a similar layout that allows tiles to be -/// freely sized in the main and cross axis. -/// * [DynamicSliverGridDelegateWithMaxCrossAxisExtent], which creates -/// staggered layouts with a maximum extent in the cross axis. -/// * [DynamicSliverGridDelegateWithFixedCrossAxisCount], which creates -/// staggered layouts with a consistent amount of tiles in the cross axis. -/// * [DynamicGridView.staggered], which uses these delegates to create -/// staggered layouts. -/// * [DynamicSliverGridGeometry], which establishes the position of a child -/// and pass the child's desired proportions to a [DynamicSliverGridLayout]. -/// * [RenderDynamicSliverGrid], which is the sliver where the dynamic sized -/// tiles are positioned. -class SliverGridStaggeredTileLayout extends DynamicSliverGridLayout { - /// Creates a layout with dynamic main axis extents determined by the child's - /// size and fixed cross axis extents. - /// - /// All arguments must be not null. The [crossAxisCount] argument must be - /// greater than zero. The [mainAxisSpacing], [crossAxisSpacing] and - /// [childCrossAxisExtent] arguments must not be negative. - SliverGridStaggeredTileLayout({ - required this.crossAxisCount, - required this.mainAxisSpacing, - required this.crossAxisSpacing, - required this.childCrossAxisExtent, - required this.scrollDirection, - }) : assert(crossAxisCount > 0), - assert(crossAxisSpacing >= 0), - assert(childCrossAxisExtent >= 0); - - /// The number of children in the cross axis. - final int crossAxisCount; - - /// The number of logical pixels between each child along the main axis. - final double mainAxisSpacing; - - /// The number of logical pixels between each child along the cross axis. - final double crossAxisSpacing; - - /// The number of pixels from the leading edge of one tile to the trailing - /// edge of the same tile in the cross axis. - final double childCrossAxisExtent; - - /// The axis along which the scroll view scrolls. - final Axis scrollDirection; - - /// The collection of scroll offsets for every row or column across the main - /// axis. It includes the tiles' sizes and the spacing between them. - final List _scrollOffsetForMainAxis = []; - - /// The amount of tiles in every row or column across the main axis. - final List _mainAxisCount = []; - - /// Returns the row or column with the minimum extent for the next child to - /// be laid out. - int _getNextCrossAxisSlot() { - int nextCrossAxisSlot = 0; - double minScrollOffset = double.infinity; - - if (_scrollOffsetForMainAxis.length < crossAxisCount) { - nextCrossAxisSlot = _scrollOffsetForMainAxis.length; - _scrollOffsetForMainAxis.add(0.0); - return nextCrossAxisSlot; - } - - for (int i = 0; i < crossAxisCount; i++) { - if (_scrollOffsetForMainAxis[i] < minScrollOffset) { - nextCrossAxisSlot = i; - minScrollOffset = _scrollOffsetForMainAxis[i]; - } - } - return nextCrossAxisSlot; - } - - @override - bool reachedTargetScrollOffset(double targetOffset) { - for (final double scrollOffset in _scrollOffsetForMainAxis) { - if (scrollOffset < targetOffset) { - return false; - } - } - return true; - } - - @override - DynamicSliverGridGeometry getGeometryForChildIndex(int index) { - return DynamicSliverGridGeometry( - scrollOffset: 0.0, - crossAxisOffset: 0.0, - mainAxisExtent: double.infinity, - crossAxisExtent: childCrossAxisExtent, - ); - } - - @override - DynamicSliverGridGeometry updateGeometryForChildIndex( - int index, - Size childSize, - ) { - final int crossAxisSlot = _getNextCrossAxisSlot(); - final double currentScrollOffset = _scrollOffsetForMainAxis[crossAxisSlot]; - final double childMainAxisExtent = - scrollDirection == Axis.vertical ? childSize.height : childSize.width; - final double scrollOffset = currentScrollOffset + - (_mainAxisCount.length >= crossAxisCount - ? _mainAxisCount[crossAxisSlot] - : 0) * - mainAxisSpacing; - final double crossAxisOffset = - crossAxisSlot * (childCrossAxisExtent + crossAxisSpacing); - final double mainAxisExtent = - scrollDirection == Axis.vertical ? childSize.height : childSize.width; - _scrollOffsetForMainAxis[crossAxisSlot] = - childMainAxisExtent + _scrollOffsetForMainAxis[crossAxisSlot]; - _mainAxisCount.length >= crossAxisCount - ? _mainAxisCount[crossAxisSlot] += 1 - : _mainAxisCount.add(1); - - return DynamicSliverGridGeometry( - scrollOffset: scrollOffset, - crossAxisOffset: crossAxisOffset, - mainAxisExtent: mainAxisExtent, - crossAxisExtent: childCrossAxisExtent, - ); - } -} - -/// Creates dynamic grid layouts with a fixed number of tiles in the cross axis -/// and varying main axis size dependent on the child's corresponding finite -/// extent. It uses the same logic as -/// [SliverGridDelegateWithFixedCrossAxisCount] where the total extent in the -/// cross axis is distributed equally between the specified amount of tiles, -/// but with a [SliverGridStaggeredTileLayout]. -/// -/// For example, if the grid is vertical, this delegate will create a layout -/// with a fixed number of columns. If the grid is horizontal, this delegate -/// will create a layout with a fixed number of rows. -/// -/// This sample code shows how to use it independently with a [DynamicGridView] -/// constructor: -/// -/// ```dart -/// DynamicGridView( -/// gridDelegate: const DynamicSliverGridDelegateWithFixedCrossAxisCount( -/// crossAxisCount: 4, -/// ), -/// children: List.generate( -/// 50, -/// (int index) => SizedBox( -/// height: index % 2 * 20 + 20, -/// child: Text('Index $index'), -/// ), -/// ), -/// ); -/// ``` -/// -/// See also: -/// -/// * [DynamicSliverGridDelegateWithMaxCrossAxisExtent], which creates a -/// dynamic layout with tiles that have a maximum cross-axis extent -/// and varying main axis size. -/// * [DynamicGridView], which can use this delegate to control the layout of -/// its tiles. -/// * [DynamicSliverGridGeometry], which establishes the position of a child -/// and pass the child's desired proportions to [DynamicSliverGridLayout]. -/// * [RenderDynamicSliverGrid], which is the sliver where the dynamic sized -/// tiles are positioned. -class DynamicSliverGridDelegateWithFixedCrossAxisCount - extends SliverGridDelegateWithFixedCrossAxisCount { - /// Creates a delegate that makes grid layouts with a fixed number of tiles - /// in the cross axis and varying main axis size dependent on the child's - /// corresponding finite extent. - /// - /// Only the [crossAxisCount] argument needs to be greater than zero. All of - /// them must be not null. - const DynamicSliverGridDelegateWithFixedCrossAxisCount({ - required super.crossAxisCount, - super.mainAxisSpacing = 0.0, - super.crossAxisSpacing = 0.0, - }) : assert(crossAxisCount > 0), - assert(mainAxisSpacing >= 0), - assert(crossAxisSpacing >= 0); - - bool _debugAssertIsValid() { - assert(crossAxisCount > 0); - assert(mainAxisSpacing >= 0.0); - assert(crossAxisSpacing >= 0.0); - assert(childAspectRatio > 0.0); - return true; - } - - @override - DynamicSliverGridLayout getLayout(SliverConstraints constraints) { - assert(_debugAssertIsValid()); - final double usableCrossAxisExtent = math.max( - 0.0, - constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1), - ); - final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount; - return SliverGridStaggeredTileLayout( - crossAxisCount: crossAxisCount, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - childCrossAxisExtent: childCrossAxisExtent, - scrollDirection: axisDirectionToAxis(constraints.axisDirection), - ); - } -} - -/// Creates dynamic grid layouts with tiles that each have a maximum cross-axis -/// extent and varying main axis size dependent on the child's corresponding -/// finite extent. It uses the same logic as -/// [SliverGridDelegateWithMaxCrossAxisExtent] where every tile has the same -/// cross axis size and does not exceed the provided max extent, but with a -/// [SliverGridStaggeredTileLayout]. -/// -/// This delegate will select a cross-axis extent for the tiles that is as -/// large as possible subject to the following conditions: -/// -/// * The extent evenly divides the cross-axis extent of the grid. -/// * The extent is at most [maxCrossAxisExtent]. -/// -/// This sample code shows how to use it independently with a [DynamicGridView] -/// constructor: -/// -/// ```dart -/// DynamicGridView( -/// gridDelegate: const DynamicSliverGridDelegateWithMaxCrossAxisExtent( -/// maxCrossAxisExtent: 100, -/// ), -/// children: List.generate( -/// 50, -/// (int index) => SizedBox( -/// height: index % 2 * 20 + 20, -/// child: Text('Index $index'), -/// ), -/// ), -/// ); -/// ``` -/// -/// See also: -/// -/// * [DynamicSliverGridDelegateWithFixedCrossAxisCount], which creates a -/// layout with a fixed number of tiles in the cross axis. -/// * [DynamicGridView], which can use this delegate to control the layout of -/// its tiles. -/// * [DynamicSliverGridGeometry], which establishes the position of a child -/// and pass the child's desired proportions to [DynamicSliverGridLayout]. -/// * [RenderDynamicSliverGrid], which is the sliver where the dynamic sized -/// tiles are positioned. -class DynamicSliverGridDelegateWithMaxCrossAxisExtent - extends SliverGridDelegateWithMaxCrossAxisExtent { - /// Creates a delegate that makes grid layouts with tiles that have a maximum - /// cross-axis extent and varying main axis size dependent on the child's - /// corresponding finite extent. - /// - /// Only the [maxCrossAxisExtent] argument needs to be greater than zero. - /// All of them must be not null. - const DynamicSliverGridDelegateWithMaxCrossAxisExtent({ - required super.maxCrossAxisExtent, - super.mainAxisSpacing = 0.0, - super.crossAxisSpacing = 0.0, - }) : assert(maxCrossAxisExtent > 0), - assert(mainAxisSpacing >= 0), - assert(crossAxisSpacing >= 0); - - bool _debugAssertIsValid(double crossAxisExtent) { - assert(crossAxisExtent > 0.0); - assert(maxCrossAxisExtent > 0.0); - assert(mainAxisSpacing >= 0.0); - assert(crossAxisSpacing >= 0.0); - assert(childAspectRatio > 0.0); - return true; - } - - @override - DynamicSliverGridLayout getLayout(SliverConstraints constraints) { - assert(_debugAssertIsValid(constraints.crossAxisExtent)); - final int crossAxisCount = - (constraints.crossAxisExtent / (maxCrossAxisExtent + crossAxisSpacing)) - .ceil(); - final double usableCrossAxisExtent = math.max( - 0.0, - constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1), - ); - final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount; - return SliverGridStaggeredTileLayout( - crossAxisCount: crossAxisCount, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - childCrossAxisExtent: childCrossAxisExtent, - scrollDirection: axisDirectionToAxis(constraints.axisDirection), - ); - } -} diff --git a/packages/dynamic_layouts/lib/src/wrap_layout.dart b/packages/dynamic_layouts/lib/src/wrap_layout.dart deleted file mode 100644 index 917680b2a74..00000000000 --- a/packages/dynamic_layouts/lib/src/wrap_layout.dart +++ /dev/null @@ -1,261 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/rendering.dart'; - -import 'base_grid_layout.dart'; - -// The model that tracks the current max size of the Sliver in the mainAxis and -// tracks if there is still space on the crossAxis. -class _RunMetrics { - _RunMetrics({ - required this.maxSliver, - required this.currentSizeUsed, - required this.scrollOffset, - }); - - /// The biggest sliver size for the current run. - double maxSliver; - - /// The current size that has been used in the current run. - double currentSizeUsed; - - /// The scroll offset in the current run. - double scrollOffset; -} - -/// A [DynamicSliverGridLayout] that uses dynamically sized tiles. -/// -/// Rather that providing a grid with a [DynamicSliverGridLayout] directly, instead -/// provide the grid a [SliverGridDelegate], which can compute a -/// [DynamicSliverGridLayout] given the current [SliverConstraints]. -/// -/// This layout is used by [SliverGridDelegateWithWrapping]. -/// -/// See also: -/// -/// * [SliverGridDelegateWithWrapping], which uses this layout. -/// * [DynamicSliverGridLayout], which represents an arbitrary dynamic tile layout. -/// * [DynamicSliverGridGeometry], which represents the size and position of a -/// single tile in a grid. -/// * [SliverGridDelegate.getLayout], which returns this object to describe the -/// delegate's layout. -/// * [RenderDynamicSliverGrid], which uses this class during its -/// [RenderDynamicSliverGrid.performLayout] method. -class SliverGridWrappingTileLayout extends DynamicSliverGridLayout { - /// Creates a layout that uses dynamic sized and spaced tiles. - /// - /// All of the arguments must not be null and must not be negative. - SliverGridWrappingTileLayout({ - required this.mainAxisSpacing, - required this.crossAxisSpacing, - required this.childMainAxisExtent, - required this.childCrossAxisExtent, - required this.crossAxisExtent, - required this.scrollDirection, - }) : assert(mainAxisSpacing >= 0), - assert(crossAxisSpacing >= 0), - assert(childMainAxisExtent >= 0), - assert(childCrossAxisExtent >= 0), - assert(crossAxisExtent >= 0), - assert(scrollDirection == Axis.horizontal || - scrollDirection == Axis.vertical); - - /// The direction in which the layout should be built. - final Axis scrollDirection; - - /// The extent of the child in the non-scrolling axis. - final double crossAxisExtent; - - /// The number of logical pixels between each child along the main axis. - final double mainAxisSpacing; - - /// The number of logical pixels between each child along the cross axis. - final double crossAxisSpacing; - - /// The number of pixels from the leading edge of one tile to the trailing - /// edge of the same tile in the main axis. - final double childMainAxisExtent; - - /// The number of pixels from the leading edge of one tile to the trailing - /// edge of the same tile in the cross axis. - final double childCrossAxisExtent; - - /// The model that is used internally to keep track of how much space is left - /// and how much has been used. - final List<_RunMetrics> _model = <_RunMetrics>[ - _RunMetrics(maxSliver: 0.0, currentSizeUsed: 0.0, scrollOffset: 0.0) - ]; - - // This method provides the initial constraints for the child to layout, - // and then it is updated with the final size later in - // updateGeometryForChildIndex. - @override - DynamicSliverGridGeometry getGeometryForChildIndex(int index) { - return DynamicSliverGridGeometry( - scrollOffset: 0, - crossAxisOffset: 0, - mainAxisExtent: childMainAxisExtent, - crossAxisExtent: childCrossAxisExtent, - ); - } - - @override - DynamicSliverGridGeometry updateGeometryForChildIndex( - int index, - Size childSize, - ) { - final double scrollOffset = _model.last.scrollOffset; - final double currentSizeUsed = _model.last.currentSizeUsed; - late final double addedSize; - - switch (scrollDirection) { - case Axis.vertical: - addedSize = currentSizeUsed + childSize.width + crossAxisSpacing; - case Axis.horizontal: - addedSize = currentSizeUsed + childSize.height + mainAxisSpacing; - } - - if (addedSize > crossAxisExtent && _model.last.currentSizeUsed > 0.0) { - switch (scrollDirection) { - case Axis.vertical: - _model.add( - _RunMetrics( - maxSliver: childSize.height + mainAxisSpacing, - currentSizeUsed: childSize.width + crossAxisSpacing, - scrollOffset: - scrollOffset + _model.last.maxSliver + mainAxisSpacing, - ), - ); - case Axis.horizontal: - _model.add( - _RunMetrics( - maxSliver: childSize.width + crossAxisSpacing, - currentSizeUsed: childSize.height + mainAxisSpacing, - scrollOffset: - scrollOffset + _model.last.maxSliver + crossAxisSpacing, - ), - ); - } - - return DynamicSliverGridGeometry( - scrollOffset: _model.last.scrollOffset, - crossAxisOffset: 0.0, - mainAxisExtent: childSize.height + mainAxisSpacing, - crossAxisExtent: childSize.width + crossAxisSpacing, - ); - } else { - _model.last.currentSizeUsed = addedSize; - } - - switch (scrollDirection) { - case Axis.vertical: - if (childSize.height + mainAxisSpacing > _model.last.maxSliver) { - _model.last.maxSliver = childSize.height + mainAxisSpacing; - } - case Axis.horizontal: - if (childSize.width + crossAxisSpacing > _model.last.maxSliver) { - _model.last.maxSliver = childSize.width + crossAxisSpacing; - } - } - - return DynamicSliverGridGeometry( - scrollOffset: scrollOffset, - crossAxisOffset: currentSizeUsed, - mainAxisExtent: childSize.height, - crossAxisExtent: childSize.width, - ); - } - - @override - bool reachedTargetScrollOffset(double targetOffset) { - return _model.last.scrollOffset > targetOffset; - } -} - -/// A [SliverGridDelegate] for creating grids that wrap variably sized tiles. -/// -/// For example, if the grid is vertical, this delegate will create a layout -/// where the children are laid out until they fill the horizontal axis and then -/// they continue in the next row. If the grid is horizontal, this delegate will -/// do the same but it will fill the vertical axis and will pass to another -/// column until it finishes. -/// -/// This delegate creates grids with different sized tiles. Tiles -/// can have fixed dimensions if [childCrossAxisExtent] or -/// [childMainAxisExtent] are provided. -/// -/// See also: -/// * [DynamicGridView.wrap], a constructor to use with this [SliverGridDelegate], -/// like `GridView.extent`. -/// * [DynamicGridView], which can use this delegate to control the layout of its -/// tiles. -/// * [RenderDynamicSliverGrid], which can use this delegate to control the -/// layout of its tiles. -class SliverGridDelegateWithWrapping extends SliverGridDelegate { - /// Create a delegate that wraps variably sized tiles. - /// - /// The children widgets are provided with loose constraints, and if any of the - /// extent parameters are set, the children are given tight constraints. - /// The way that children are made to have loose constraints is by assigning - /// the value of [double.infinity] to [childMainAxisExtent] and - /// [childCrossAxisExtent]. - /// To have same sized tiles with the wrapping, specify the [childCrossAxisExtent] - /// and the [childMainAxisExtent] to be the same size. Or only one of them to - /// be of a certain size in one of the axis. - const SliverGridDelegateWithWrapping({ - this.mainAxisSpacing = 0.0, - this.crossAxisSpacing = 0.0, - this.childCrossAxisExtent = double.infinity, - this.childMainAxisExtent = double.infinity, - }) : assert(mainAxisSpacing >= 0), - assert(crossAxisSpacing >= 0); - - /// The number of pixels from the leading edge of one tile to the trailing - /// edge of the same tile in the main axis. - /// - /// Defaults to [double.infinity] to provide the child with loose constraints. - final double childMainAxisExtent; - - /// The number of pixels from the leading edge of one tile to the trailing - /// edge of the same tile in the cross axis. - /// - /// Defaults to [double.infinity] to provide the child with loose constraints. - final double childCrossAxisExtent; - - /// The number of logical pixels between each child along the main axis. - /// - /// Defaults to 0.0 - final double mainAxisSpacing; - - /// The number of logical pixels between each child along the cross axis. - /// - /// Defaults to 0.0 - final double crossAxisSpacing; - - bool _debugAssertIsValid() { - assert(mainAxisSpacing >= 0.0); - assert(crossAxisSpacing >= 0.0); - return true; - } - - @override - SliverGridLayout getLayout(SliverConstraints constraints) { - assert(_debugAssertIsValid()); - return SliverGridWrappingTileLayout( - childMainAxisExtent: childMainAxisExtent, - childCrossAxisExtent: childCrossAxisExtent, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - scrollDirection: axisDirectionToAxis(constraints.axisDirection), - crossAxisExtent: constraints.crossAxisExtent, - ); - } - - @override - bool shouldRelayout(SliverGridDelegateWithWrapping oldDelegate) { - return oldDelegate.mainAxisSpacing != mainAxisSpacing || - oldDelegate.crossAxisSpacing != crossAxisSpacing; - } -} diff --git a/packages/dynamic_layouts/pubspec.yaml b/packages/dynamic_layouts/pubspec.yaml deleted file mode 100644 index a1b8f84b469..00000000000 --- a/packages/dynamic_layouts/pubspec.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: dynamic_layouts -description: Widgets for building dynamic grid layouts. -version: 0.0.1+1 -issue_tracker: https://github.com/flutter/flutter/labels/p%3A%20dynamic_layouts -repository: https://github.com/flutter/packages/tree/main/packages/dynamic_layouts -# Temporarily unpublished while in process of releasing full package in multiple stages. -publish_to: none - -environment: - sdk: ^3.2.0 - flutter: ">=3.16.0" - -dependencies: - flutter: - sdk: flutter - -dev_dependencies: - flutter_test: - sdk: flutter diff --git a/packages/dynamic_layouts/test/base_grid_layout_test.dart b/packages/dynamic_layouts/test/base_grid_layout_test.dart deleted file mode 100644 index 59e6bd5564b..00000000000 --- a/packages/dynamic_layouts/test/base_grid_layout_test.dart +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:dynamic_layouts/dynamic_layouts.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - test('DynamicSliverGridGeometry returns tight constraints for finite extents', - () { - const DynamicSliverGridGeometry geometry = DynamicSliverGridGeometry( - scrollOffset: 0, - crossAxisOffset: 0, - crossAxisExtent: 150.0, - mainAxisExtent: 50.0, - ); - - // Vertical - SliverConstraints sliverConstraints = const SliverConstraints( - axisDirection: AxisDirection.down, - growthDirection: GrowthDirection.forward, - userScrollDirection: ScrollDirection.forward, - scrollOffset: 0, - precedingScrollExtent: 0, - overlap: 0, - remainingPaintExtent: 600, - crossAxisExtent: 300, - crossAxisDirection: AxisDirection.left, - viewportMainAxisExtent: 1000, - remainingCacheExtent: 600, - cacheOrigin: 0.0, - ); - BoxConstraints constraints = geometry.getBoxConstraints(sliverConstraints); - expect(constraints, BoxConstraints.tight(const Size(150.0, 50.0))); - - // Horizontal - sliverConstraints = const SliverConstraints( - axisDirection: AxisDirection.left, - growthDirection: GrowthDirection.forward, - userScrollDirection: ScrollDirection.forward, - scrollOffset: 0, - precedingScrollExtent: 0, - overlap: 0, - remainingPaintExtent: 600, - crossAxisExtent: 300, - crossAxisDirection: AxisDirection.down, - viewportMainAxisExtent: 1000, - remainingCacheExtent: 600, - cacheOrigin: 0.0, - ); - constraints = geometry.getBoxConstraints(sliverConstraints); - expect(constraints, BoxConstraints.tight(const Size(50.0, 150.0))); - }); - - test( - 'DynamicSliverGridGeometry returns loose constraints for infinite extents', - () { - const DynamicSliverGridGeometry geometry = DynamicSliverGridGeometry( - scrollOffset: 0, - crossAxisOffset: 0, - mainAxisExtent: double.infinity, - crossAxisExtent: double.infinity, - ); - - // Vertical - SliverConstraints sliverConstraints = const SliverConstraints( - axisDirection: AxisDirection.down, - growthDirection: GrowthDirection.forward, - userScrollDirection: ScrollDirection.forward, - scrollOffset: 0, - precedingScrollExtent: 0, - overlap: 0, - remainingPaintExtent: 600, - crossAxisExtent: 300, - crossAxisDirection: AxisDirection.left, - viewportMainAxisExtent: 1000, - remainingCacheExtent: 600, - cacheOrigin: 0.0, - ); - BoxConstraints constraints = geometry.getBoxConstraints(sliverConstraints); - expect(constraints, const BoxConstraints()); - - // Horizontal - sliverConstraints = const SliverConstraints( - axisDirection: AxisDirection.left, - growthDirection: GrowthDirection.forward, - userScrollDirection: ScrollDirection.forward, - scrollOffset: 0, - precedingScrollExtent: 0, - overlap: 0, - remainingPaintExtent: 600, - crossAxisExtent: 300, - crossAxisDirection: AxisDirection.down, - viewportMainAxisExtent: 1000, - remainingCacheExtent: 600, - cacheOrigin: 0.0, - ); - constraints = geometry.getBoxConstraints(sliverConstraints); - expect(constraints, const BoxConstraints()); - }); -} diff --git a/packages/dynamic_layouts/test/dynamic_grid_test.dart b/packages/dynamic_layouts/test/dynamic_grid_test.dart deleted file mode 100644 index a4005d3c9e4..00000000000 --- a/packages/dynamic_layouts/test/dynamic_grid_test.dart +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:dynamic_layouts/dynamic_layouts.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('DynamicGridView works with simple layout', - (WidgetTester tester) async { - // Can have no children - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView( - gridDelegate: TestDelegate(crossAxisCount: 2), - ), - ), - ), - ); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView( - gridDelegate: TestDelegate(crossAxisCount: 2), - children: List.generate( - 50, - (int index) => SizedBox.square( - dimension: TestSimpleLayout.childExtent, - child: Text('Index $index'), - ), - ), - ), - ), - ), - ); - - // Only the visible tiles have been laid out. - expect(find.text('Index 0'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 0')), Offset.zero); - expect(find.text('Index 1'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 1')), const Offset(50.0, 0.0)); - expect(find.text('Index 2'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 2')), const Offset(0.0, 50.0)); - expect(find.text('Index 47'), findsNothing); - expect(find.text('Index 48'), findsNothing); - expect(find.text('Index 49'), findsNothing); - }); - testWidgets('DynamicGridView.builder works with simple layout', - (WidgetTester tester) async { - // Only a few number of tiles - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.builder( - gridDelegate: TestDelegate(crossAxisCount: 2), - itemCount: 3, - itemBuilder: (BuildContext context, int index) { - return SizedBox.square( - dimension: TestSimpleLayout.childExtent, - child: Text('Index $index'), - ); - }, - ), - ), - ), - ); - - // Only the visible tiles have been laid out, up to itemCount. - expect(find.text('Index 0'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 0')), Offset.zero); - expect(find.text('Index 1'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 1')), const Offset(50.0, 0.0)); - expect(find.text('Index 2'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 2')), const Offset(0.0, 50.0)); - expect(find.text('Index 3'), findsNothing); - expect(find.text('Index 4'), findsNothing); - expect(find.text('Index 5'), findsNothing); - - // Infinite number of tiles - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.builder( - gridDelegate: TestDelegate(crossAxisCount: 2), - itemBuilder: (BuildContext context, int index) { - return SizedBox.square( - dimension: TestSimpleLayout.childExtent, - child: Text('Index $index'), - ); - }, - ), - ), - ), - ); - - // Only the visible tiles have been laid out. - expect(find.text('Index 0'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 0')), Offset.zero); - expect(find.text('Index 1'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 1')), const Offset(50.0, 0.0)); - expect(find.text('Index 2'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 2')), const Offset(0.0, 50.0)); - expect(find.text('Index 47'), findsNothing); - expect(find.text('Index 48'), findsNothing); - expect(find.text('Index 49'), findsNothing); - }); -} - -class TestSimpleLayout extends DynamicSliverGridLayout { - TestSimpleLayout({ - required this.crossAxisCount, - }); - - final int crossAxisCount; - static const double childExtent = 50.0; - - @override - DynamicSliverGridGeometry getGeometryForChildIndex(int index) { - final double crossAxisStart = (index % crossAxisCount) * childExtent; - return DynamicSliverGridGeometry( - scrollOffset: (index ~/ crossAxisCount) * childExtent, - crossAxisOffset: crossAxisStart, - mainAxisExtent: childExtent, - crossAxisExtent: childExtent, - ); - } - - @override - bool reachedTargetScrollOffset(double targetOffset) => true; - - @override - DynamicSliverGridGeometry updateGeometryForChildIndex( - int index, - Size childSize, - ) { - return getGeometryForChildIndex(index); - } -} - -class TestDelegate extends SliverGridDelegateWithFixedCrossAxisCount { - TestDelegate({required super.crossAxisCount}); - - @override - DynamicSliverGridLayout getLayout(SliverConstraints constraints) { - return TestSimpleLayout(crossAxisCount: crossAxisCount); - } -} diff --git a/packages/dynamic_layouts/test/staggered_layout_test.dart b/packages/dynamic_layouts/test/staggered_layout_test.dart deleted file mode 100644 index e86b2b4e3db..00000000000 --- a/packages/dynamic_layouts/test/staggered_layout_test.dart +++ /dev/null @@ -1,436 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:dynamic_layouts/dynamic_layouts.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - group('DynamicGridView', () { - testWidgets( - 'DynamicGridView works when using DynamicSliverGridDelegateWithFixedCrossAxisCount', - (WidgetTester tester) async { - tester.view.physicalSize = const Size(400, 100); - tester.view.devicePixelRatio = 1.0; - addTearDown(tester.view.reset); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView( - gridDelegate: - const DynamicSliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 4, - ), - children: List.generate( - 50, - (int index) => SizedBox( - height: index % 2 * 20 + 20, - child: Text('Index $index'), - ), - ), - ), - ), - ), - ); - - expect(find.text('Index 0'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 0')), Offset.zero); - expect(find.text('Index 1'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 1')), const Offset(100.0, 0.0)); - expect(find.text('Index 2'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 2')), const Offset(200.0, 0.0)); - expect(find.text('Index 3'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 3')), const Offset(300.0, 0.0)); - expect(find.text('Index 4'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 4')), const Offset(0.0, 20.0)); - - expect(find.text('Index 14'), findsNothing); - expect(find.text('Index 47'), findsNothing); - expect(find.text('Index 48'), findsNothing); - expect(find.text('Index 49'), findsNothing); - }); - - testWidgets( - 'DynamicGridView works when using DynamicSliverGridDelegateWithMaxCrossAxisExtent', - (WidgetTester tester) async { - tester.view.physicalSize = const Size(440, 100); - tester.view.devicePixelRatio = 1.0; - addTearDown(tester.view.reset); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView( - gridDelegate: - const DynamicSliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: 100, - ), - children: List.generate( - 50, - (int index) => SizedBox( - height: index % 2 * 20 + 20, - child: Text('Index $index'), - ), - ), - ), - ), - ), - ); - - expect(find.text('Index 0'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 0')), Offset.zero); - expect(find.text('Index 1'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 1')), const Offset(88.0, 0.0)); - expect(find.text('Index 2'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 2')), const Offset(176.0, 0.0)); - expect(find.text('Index 3'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 3')), const Offset(264.0, 0.0)); - expect(find.text('Index 4'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 4')), const Offset(352.0, 0.0)); - - expect(find.text('Index 47'), findsNothing); - expect(find.text('Index 48'), findsNothing); - expect(find.text('Index 49'), findsNothing); - }); - }); - group('DynamicGridView.staggered', () { - testWidgets('DynamicGridView.staggered works with simple layout', - (WidgetTester tester) async { - tester.view.physicalSize = const Size(400, 100); - tester.view.devicePixelRatio = 1.0; - addTearDown(tester.view.reset); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.staggered( - crossAxisCount: 4, - children: List.generate( - 50, - (int index) => SizedBox( - height: index % 2 * 50 + 20, - child: Text('Index $index'), - ), - ), - ), - ), - ), - ); - - expect(find.text('Index 0'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 0')), Offset.zero); - expect(find.text('Index 1'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 1')), const Offset(100.0, 0.0)); - expect(find.text('Index 2'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 2')), const Offset(200.0, 0.0)); - expect(find.text('Index 3'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 3')), const Offset(300.0, 0.0)); - expect(find.text('Index 4'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 4')), const Offset(0.0, 20.0)); - expect(find.text('Index 5'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 5')), - const Offset(200.0, 20.0), - ); - expect(find.text('Index 6'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 6')), const Offset(0.0, 40.0)); - expect(find.text('Index 7'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 7')), const Offset(0.0, 60.0)); - - expect(find.text('Index 12'), findsNothing); // 100 - 120 - expect(find.text('Index 47'), findsNothing); - expect(find.text('Index 48'), findsNothing); - expect(find.text('Index 49'), findsNothing); - }); - testWidgets('DynamicGridView.staggered works with a horizontal grid', - (WidgetTester tester) async { - tester.view.physicalSize = const Size(100, 500); - tester.view.devicePixelRatio = 1.0; - addTearDown(tester.view.reset); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.staggered( - crossAxisCount: 4, - scrollDirection: Axis.horizontal, - children: List.generate( - 50, - (int index) => SizedBox( - width: index % 3 * 50 + 20, - child: Text('Index $index'), - ), - ), - ), - ), - ), - ); - - expect(find.text('Index 0'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 0')), Offset.zero); - expect(find.text('Index 1'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 1')), const Offset(0.0, 125.0)); - expect(find.text('Index 2'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 2')), const Offset(0.0, 250.0)); - expect(find.text('Index 3'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 3')), const Offset(0.0, 375.0)); - expect(find.text('Index 4'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 4')), const Offset(20.0, 0.0)); - expect(find.text('Index 5'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 5')), - const Offset(20.0, 375.0), - ); - expect(find.text('Index 6'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 6')), - const Offset(70.0, 125.0), - ); - expect(find.text('Index 7'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 7')), - const Offset(90.0, 0.0), - ); - - expect(find.text('Index 47'), findsNothing); - expect(find.text('Index 48'), findsNothing); - expect(find.text('Index 49'), findsNothing); - }); - testWidgets('DynamicGridView.staggered works with a reversed grid', - (WidgetTester tester) async { - tester.view.physicalSize = const Size(600, 200); - tester.view.devicePixelRatio = 1.0; - addTearDown(tester.view.reset); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.staggered( - crossAxisCount: 4, - reverse: true, - children: List.generate( - 50, - (int index) => SizedBox( - height: index % 3 * 50 + 20, - child: Text('Index $index'), - ), - ), - ), - ), - ), - ); - - expect(find.text('Index 0'), findsOneWidget); - expect( - tester.getBottomLeft(find.text('Index 0')), - const Offset(0.0, 200.0), - ); - expect(find.text('Index 1'), findsOneWidget); - expect( - tester.getBottomLeft(find.text('Index 1')), - const Offset(150.0, 200.0), - ); - expect(find.text('Index 2'), findsOneWidget); - expect( - tester.getBottomLeft(find.text('Index 2')), - const Offset(300.0, 200.0), - ); - expect(find.text('Index 3'), findsOneWidget); - expect( - tester.getBottomLeft(find.text('Index 3')), - const Offset(450.0, 200.0), - ); - expect(find.text('Index 4'), findsOneWidget); - expect( - tester.getBottomLeft(find.text('Index 4')), - const Offset(0.0, 180.0), - ); - expect(find.text('Index 5'), findsOneWidget); - expect( - tester.getBottomLeft(find.text('Index 5')), - const Offset(450.0, 180.0), - ); - expect(find.text('Index 6'), findsOneWidget); - expect( - tester.getBottomLeft(find.text('Index 6')), - const Offset(150.0, 130.0), - ); - expect(find.text('Index 7'), findsOneWidget); - expect( - tester.getBottomLeft(find.text('Index 7')), - const Offset(0.0, 110.0), - ); - - expect(find.text('Index 47'), findsNothing); - expect(find.text('Index 48'), findsNothing); - expect(find.text('Index 49'), findsNothing); - }); - - testWidgets('DynamicGridView.staggered deletes children appropriately', - (WidgetTester tester) async { - tester.view.physicalSize = const Size(600, 1000); - tester.view.devicePixelRatio = 1.0; - addTearDown(tester.view.reset); - - final List children = List.generate( - 50, - (int index) => SizedBox( - height: index % 3 * 50 + 20, - child: Text('Index $index'), - ), - ); - late StateSetter stateSetter; - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: StatefulBuilder( - builder: (BuildContext context, StateSetter setState) { - stateSetter = setState; - return DynamicGridView.staggered( - maxCrossAxisExtent: 150, - children: [...children], - ); - }), - ), - ), - ); - - expect(find.text('Index 0'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 0')), Offset.zero); - expect(find.text('Index 7'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 7')), const Offset(0.0, 90.0)); - expect(find.text('Index 8'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 8')), - const Offset(150.0, 90.0), - ); - expect(find.text('Index 27'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 27')), - const Offset(300.0, 420.0), - ); - expect(find.text('Index 28'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 28')), - const Offset(300.0, 440.0), - ); - expect(find.text('Index 32'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 32')), - const Offset(300.0, 510.0), - ); - expect(find.text('Index 33'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 33')), - const Offset(150.0, 540.0), - ); - - stateSetter(() { - children.removeAt(0); - }); - - await tester.pump(); - expect(find.text('Index 0'), findsNothing); - - expect( - tester.getTopLeft(find.text('Index 8')), - const Offset(0.0, 90.0), - ); - expect( - tester.getTopLeft(find.text('Index 28')), - const Offset(150.0, 440.0), - ); - expect( - tester.getTopLeft(find.text('Index 33')), - const Offset(0.0, 540.0), - ); - }); - }); - group('DynamicGridView.builder', () { - testWidgets('DynamicGridView.builder works with a staggered layout', - (WidgetTester tester) async { - tester.view.physicalSize = const Size(400, 100); - tester.view.devicePixelRatio = 1.0; - addTearDown(tester.view.reset); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.builder( - gridDelegate: - const DynamicSliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 4, - ), - itemBuilder: (BuildContext context, int index) => SizedBox( - height: index % 2 * 50 + 20, - child: Text('Index $index'), - ), - itemCount: 50, - ), - ), - ), - ); - - expect(find.text('Index 0'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 0')), Offset.zero); - expect(find.text('Index 1'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 1')), const Offset(100.0, 0.0)); - expect(find.text('Index 2'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 2')), const Offset(200.0, 0.0)); - expect(find.text('Index 3'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 3')), const Offset(300.0, 0.0)); - expect(find.text('Index 4'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 4')), const Offset(0.0, 20.0)); - expect(find.text('Index 5'), findsOneWidget); - expect( - tester.getTopLeft(find.text('Index 5')), - const Offset(200.0, 20.0), - ); - expect(find.text('Index 6'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 6')), const Offset(0.0, 40.0)); - expect(find.text('Index 7'), findsOneWidget); - expect(tester.getTopLeft(find.text('Index 7')), const Offset(0.0, 60.0)); - - expect(find.text('Index 12'), findsNothing); // 100 - 120 - expect(find.text('Index 47'), findsNothing); - expect(find.text('Index 48'), findsNothing); - expect(find.text('Index 49'), findsNothing); - }); - - testWidgets( - 'DynamicGridView.builder works with an infinite grid using a staggered layout', - (WidgetTester tester) async { - tester.view.physicalSize = const Size(400, 100); - tester.view.devicePixelRatio = 1.0; - addTearDown(tester.view.reset); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.builder( - gridDelegate: - const DynamicSliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 4, - ), - itemBuilder: (BuildContext context, int index) => SizedBox( - height: index % 2 * 50 + 20, - child: Text('Index $index'), - ), - ), - ), - ), - ); - - expect(find.text('Index 0'), findsOneWidget); - expect(find.text('Index 1'), findsOneWidget); - expect(find.text('Index 2'), findsOneWidget); - await tester.scrollUntilVisible(find.text('Index 500'), 500.0); - await tester.pumpAndSettle(); - expect(find.text('Index 501'), findsOneWidget); - expect(find.text('Index 502'), findsOneWidget); - }); - }); -} diff --git a/packages/dynamic_layouts/test/wrap_layout_test.dart b/packages/dynamic_layouts/test/wrap_layout_test.dart deleted file mode 100644 index 31daa8b3476..00000000000 --- a/packages/dynamic_layouts/test/wrap_layout_test.dart +++ /dev/null @@ -1,636 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:dynamic_layouts/dynamic_layouts.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets( - 'DynamicGridView generates children and checks if they are layed out', - (WidgetTester tester) async { - final List children = List.generate( - 10, - (int index) => SizedBox( - height: index.isEven ? 100 : 50, - width: index.isEven ? 95 : 180, - child: Text('Item $index'), - ), - ); - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView( - gridDelegate: const SliverGridDelegateWithWrapping(), - children: children, - ), - ), - ), - ); - - // Check that the children are in the tree - for (int i = 0; i < 10; i++) { - expect(find.text('Item $i'), findsOneWidget); - } - // Check that the children are in the right position - expect(tester.getTopLeft(find.text('Item 0')), Offset.zero); - expect(tester.getTopLeft(find.text('Item 1')), const Offset(95.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 2')), const Offset(275.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 3')), const Offset(370.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 4')), const Offset(550.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 5')), const Offset(0.0, 100.0)); - expect(tester.getTopLeft(find.text('Item 6')), const Offset(180.0, 100.0)); - expect(tester.getTopLeft(find.text('Item 7')), const Offset(275.0, 100.0)); - expect(tester.getTopLeft(find.text('Item 8')), const Offset(455.0, 100.0)); - expect(tester.getTopLeft(find.text('Item 9')), const Offset(550.0, 100.0)); - }); - - testWidgets( - 'Test for wrap that generates children and checks if they are layed out', - (WidgetTester tester) async { - final List children = List.generate( - 10, - (int index) => SizedBox( - height: index.isEven ? 100 : 50, - width: index.isEven ? 95 : 180, - child: Text('Item $index'), - ), - ); - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.wrap( - children: children, - ), - ), - ), - ); - for (int i = 0; i < 10; i++) { - expect(find.text('Item $i'), findsOneWidget); - } - // Check that the children are in the right position - expect(tester.getTopLeft(find.text('Item 0')), Offset.zero); - expect(tester.getTopLeft(find.text('Item 1')), const Offset(95.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 2')), const Offset(275.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 3')), const Offset(370.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 4')), const Offset(550.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 5')), const Offset(0.0, 100.0)); - expect(tester.getTopLeft(find.text('Item 6')), const Offset(180.0, 100.0)); - expect(tester.getTopLeft(find.text('Item 7')), const Offset(275.0, 100.0)); - expect(tester.getTopLeft(find.text('Item 8')), const Offset(455.0, 100.0)); - expect(tester.getTopLeft(find.text('Item 9')), const Offset(550.0, 100.0)); - }); - - testWidgets('Test for wrap to be laying child dynamically', - (WidgetTester tester) async { - final List children = List.generate( - 20, - (int index) => SizedBox( - height: index.isEven ? 1000 : 50, - width: index.isEven ? 95 : 180, - child: Text('Item $index'), - ), - ); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.builder( - itemCount: children.length, - gridDelegate: const SliverGridDelegateWithWrapping(), - itemBuilder: (BuildContext context, int index) => children[index], - ), - ), - ), - ); - for (int i = 0; i < 5; i++) { - expect(find.text('Item $i'), findsOneWidget); - } - // Check that the children are in the right position - expect(tester.getTopLeft(find.text('Item 0')), Offset.zero); - expect(tester.getTopLeft(find.text('Item 1')), const Offset(95.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 2')), const Offset(275.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 3')), const Offset(370.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 4')), const Offset(550.0, 0.0)); - expect(find.text('Item 5'), findsNothing); - await tester.scrollUntilVisible(find.text('Item 19'), 500.0); - await tester.pumpAndSettle(); - - expect(find.text('Item 18'), findsOneWidget); - expect(tester.getTopLeft(find.text('Item 18')), const Offset(455.0, 0.0)); - - expect(find.text('Item 0'), findsNothing); - expect(find.text('Item 1'), findsNothing); - expect(find.text('Item 2'), findsNothing); - expect(find.text('Item 3'), findsNothing); - }); - - testWidgets( - 'Test for DynamicGridView.wrap to scrollDirection Axis.horizontal', - (WidgetTester tester) async { - final List children = List.generate( - 20, - (int index) => SizedBox( - height: index.isEven ? 100 : 50, - width: index.isEven ? 100 : 180, - child: Text('Item $index'), - ), - ); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.wrap( - scrollDirection: Axis.horizontal, - children: children, - ), - ), - ), - ); - for (int i = 0; i < 20; i++) { - expect(find.text('Item $i'), findsOneWidget); - } - // Check that the children are in the right position - double dy = 0, dx = 0; - for (int i = 0; i < 20; i++) { - if (dy >= 600.0) { - dy = 0.0; - dx += 180.0; - } - expect(tester.getTopLeft(find.text('Item $i')), Offset(dx, dy)); - dy += i.isEven ? 100 : 50; - } - }); - - testWidgets('Test DynamicGridView.builder for GridView.reverse to true', - (WidgetTester tester) async { - final List children = List.generate( - 10, - (int index) => SizedBox( - height: index.isEven ? 100 : 50, - width: index.isEven ? 100 : 180, - child: Text('Item $index'), - ), - ); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.builder( - reverse: true, - itemCount: children.length, - gridDelegate: const SliverGridDelegateWithWrapping(), - itemBuilder: (BuildContext context, int index) => children[index], - ), - ), - ), - ); - for (int i = 0; i < 10; i++) { - expect(find.text('Item $i'), findsOneWidget); - } - double dx = 0.0, dy = 600.0; - for (int i = 0; i < 10; i++) { - if (dx >= 600.0) { - dx = 0.0; - dy -= 100.0; - } - expect(tester.getBottomLeft(find.text('Item $i')), Offset(dx, dy)); - dx += i.isEven ? 100 : 180; - } - }); - - testWidgets('DynamicGridView.wrap for GridView.reverse to true', - (WidgetTester tester) async { - final List children = List.generate( - 20, - (int index) => SizedBox( - height: index.isEven ? 100 : 50, - width: index.isEven ? 100 : 180, - child: Text('Item $index'), - ), - ); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.wrap( - reverse: true, - children: children, - ), - ), - ), - ); - for (int i = 0; i < 20; i++) { - expect(find.text('Item $i'), findsOneWidget); - } - // Check that the children are in the right position - double dx = 0.0, dy = 600.0; - for (int i = 0; i < 20; i++) { - if (dx >= 600.0) { - dx = 0.0; - dy -= 100.0; - } - expect(tester.getBottomLeft(find.text('Item $i')), Offset(dx, dy)); - dx += i.isEven ? 100 : 180; - } - }); - - testWidgets('DynamicGridView.wrap dismiss keyboard onDrag test', - (WidgetTester tester) async { - final List focusNodes = - List.generate(50, (int i) => FocusNode()); - - await tester.pumpWidget( - textFieldBoilerplate( - child: GridView.extent( - padding: EdgeInsets.zero, - maxCrossAxisExtent: 300, - keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag, - children: focusNodes.map((FocusNode focusNode) { - return Container( - height: 50, - color: Colors.green, - child: TextField( - focusNode: focusNode, - style: const TextStyle( - fontSize: 24, - fontWeight: FontWeight.bold, - ), - ), - ); - }).toList(), - ), - ), - ); - - final Finder finder = find.byType(TextField).first; - final TextField textField = tester.widget(finder); - await tester.showKeyboard(finder); - expect(textField.focusNode!.hasFocus, isTrue); - - await tester.drag(finder, const Offset(0.0, -40.0)); - await tester.pumpAndSettle(); - expect(textField.focusNode!.hasFocus, isFalse); - }); - - testWidgets('ChildMainAxisExtent & childCrossAxisExtent are respected', - (WidgetTester tester) async { - final List children = List.generate( - 10, - (int index) => SizedBox( - key: Key(index.toString()), - child: Text('Item $index'), - ), - ); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.builder( - gridDelegate: const SliverGridDelegateWithWrapping( - childMainAxisExtent: 150, - childCrossAxisExtent: 200, - ), - itemCount: children.length, - itemBuilder: (BuildContext context, int index) => children[index], - ), - ), - ), - ); - - for (int i = 0; i < 10; i++) { - final Size sizeOfCurrent = tester.getSize(find.byKey(Key('$i'))); - expect(sizeOfCurrent.width, equals(200)); - expect(sizeOfCurrent.height, equals(150)); - } - // Check that the children are in the right position - double dy = 0, dx = 0; - for (int i = 0; i < 10; i++) { - if (dx > 600.0) { - dx = 0.0; - dy += 150.0; - } - expect(tester.getTopLeft(find.text('Item $i')), Offset(dx, dy)); - dx += 200; - } - }); - - testWidgets('ChildMainAxisExtent is respected', (WidgetTester tester) async { - final List children = List.generate( - 10, - (int index) => SizedBox( - key: Key(index.toString()), - width: index.isEven ? 100 : 180, - child: Text('Item $index'), - ), - ); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.builder( - gridDelegate: const SliverGridDelegateWithWrapping( - childMainAxisExtent: 200, - ), - itemCount: children.length, - itemBuilder: (BuildContext context, int index) => children[index], - ), - ), - ), - ); - - for (int i = 0; i < 10; i++) { - final Size sizeOfCurrent = tester.getSize(find.byKey(Key('$i'))); - expect(sizeOfCurrent.height, equals(200)); - } - // Check that the children are in the right position - double dy = 0, dx = 0; - for (int i = 0; i < 10; i++) { - if (dx >= 600.0) { - dx = 0.0; - dy += 200.0; - } - expect(tester.getTopLeft(find.text('Item $i')), Offset(dx, dy)); - dx += i.isEven ? 100 : 180; - } - }); - - testWidgets('ChildCrossAxisExtent is respected', (WidgetTester tester) async { - final List children = List.generate( - 10, - (int index) => SizedBox( - height: index.isEven ? 100 : 50, - key: Key(index.toString()), - child: Text('Item $index'), - ), - ); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.builder( - gridDelegate: const SliverGridDelegateWithWrapping( - childCrossAxisExtent: 150, - ), - itemCount: children.length, - itemBuilder: (BuildContext context, int index) => children[index], - ), - ), - ), - ); - - for (int i = 0; i < 10; i++) { - final Size sizeOfCurrent = tester.getSize(find.byKey(Key('$i'))); - expect(sizeOfCurrent.width, equals(150)); - } - // Check that the children are in the right position - double dy = 0, dx = 0; - for (int i = 0; i < 10; i++) { - if (dx >= 750.0) { - dx = 0.0; - dy += 100.0; - } - expect(tester.getTopLeft(find.text('Item $i')), Offset(dx, dy)); - dx += 150; - } - }); - - testWidgets('Test wrap to see nothing affected if elements are deleted.', - (WidgetTester tester) async { - late StateSetter stateSetter; - final List children = List.generate( - 10, - (int index) => SizedBox( - height: index.isEven ? 100 : 50, - width: index.isEven ? 100 : 180, - child: Text('Item $index'), - ), - ); - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: StatefulBuilder( - builder: (BuildContext context, StateSetter setState) { - stateSetter = setState; - return DynamicGridView.builder( - gridDelegate: const SliverGridDelegateWithWrapping(), - itemCount: children.length, - itemBuilder: (BuildContext context, int index) => children[index], - ); - }), - ), - ), - ); - // See if the children are in the tree. - for (int i = 0; i < 10; i++) { - expect(find.text('Item $i'), findsOneWidget); - } - // See if they are layed properly. - double dx = 0.0, dy = 0.0; - for (int i = 0; i < 10; i++) { - if (dx >= 600) { - dx = 0.0; - dy += 100; - } - expect(tester.getTopLeft(find.text('Item $i')), Offset(dx, dy)); - dx += i.isEven ? 100 : 180; - } - stateSetter(() { - // Remove children - children.removeAt(0); - children.removeAt(8); - children.removeAt(5); - }); - - await tester.pump(); - - // See if the proper widgets are in the tree. - expect(find.text('Item 0'), findsNothing); - expect(find.text('Item 6'), findsNothing); - expect(find.text('Item 9'), findsNothing); - expect(find.text('Item 1'), findsOneWidget); - expect(find.text('Item 2'), findsOneWidget); - expect(find.text('Item 3'), findsOneWidget); - expect(find.text('Item 4'), findsOneWidget); - expect(find.text('Item 5'), findsOneWidget); - expect(find.text('Item 7'), findsOneWidget); - expect(find.text('Item 8'), findsOneWidget); - - // See if the proper widgets are in the tree. - expect(tester.getTopLeft(find.text('Item 1')), Offset.zero); - expect(tester.getTopLeft(find.text('Item 2')), const Offset(180.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 3')), const Offset(280.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 4')), const Offset(460.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 5')), const Offset(560.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 7')), const Offset(0.0, 100.0)); - expect(tester.getTopLeft(find.text('Item 8')), const Offset(180.0, 100.0)); - }); - - testWidgets('Test wrap in Axis.vertical direction', - (WidgetTester tester) async { - final List children = List.generate( - 5, - (int index) => SizedBox( - height: index.isEven ? 100 : 50, - width: index.isEven ? 100 : 180, - child: Text('Item $index'), - ), - ); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.builder( - itemCount: children.length, - gridDelegate: const SliverGridDelegateWithWrapping(), - itemBuilder: (BuildContext context, int index) => children[index], - ), - ), - ), - ); - - // Change the size of the screen - await tester.binding.setSurfaceSize(const Size(500, 100)); - await tester.pumpAndSettle(); - expect(find.text('Item 0'), findsOneWidget); - expect(find.text('Item 1'), findsOneWidget); - expect(find.text('Item 2'), findsOneWidget); - expect(tester.getTopLeft(find.text('Item 0')), Offset.zero); - expect(tester.getTopLeft(find.text('Item 1')), const Offset(100.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 2')), const Offset(280.0, 0.0)); - expect(find.text('Item 3'), findsNothing); - expect(find.text('Item 4'), findsNothing); - await tester.binding.setSurfaceSize(const Size(560, 100)); - await tester.pumpAndSettle(); - expect(find.text('Item 3'), findsOneWidget); - expect(tester.getTopLeft(find.text('Item 3')), const Offset(380.0, 0.0)); - expect(find.text('Item 4'), findsNothing); - await tester.binding.setSurfaceSize(const Size(280, 100)); - // resets the screen to its original size after the test end - addTearDown(tester.view.resetPhysicalSize); - await tester.pumpAndSettle(); - expect(find.text('Item 0'), findsOneWidget); - expect(find.text('Item 1'), findsOneWidget); - expect(tester.getTopLeft(find.text('Item 0')), Offset.zero); - expect(tester.getTopLeft(find.text('Item 1')), const Offset(100.0, 0.0)); - expect(find.text('Item 2'), findsNothing); - expect(find.text('Item 3'), findsNothing); - expect(find.text('Item 4'), findsNothing); - }); - - testWidgets('Test wrap in Axis.horizontal direction', - (WidgetTester tester) async { - final List children = List.generate( - 5, - (int index) => SizedBox( - height: index.isEven ? 100 : 50, - width: index.isEven ? 100 : 180, - child: Text('Item $index'), - ), - ); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DynamicGridView.wrap( - scrollDirection: Axis.horizontal, - children: children, - ), - ), - ), - ); - - // Change the size of the screen - await tester.binding.setSurfaceSize(const Size(180, 150)); - await tester.pumpAndSettle(); - - expect(find.text('Item 0'), findsOneWidget); - expect(find.text('Item 1'), findsOneWidget); - expect(tester.getTopLeft(find.text('Item 0')), Offset.zero); - expect(tester.getTopLeft(find.text('Item 1')), const Offset(0.0, 100.0)); - - expect(find.text('Item 2'), findsNothing); - expect(find.text('Item 3'), findsNothing); - - await tester.binding.setSurfaceSize(const Size(180, 400)); - await tester.pumpAndSettle(); - - expect(find.text('Item 0'), findsOneWidget); - expect(find.text('Item 1'), findsOneWidget); - expect(find.text('Item 2'), findsOneWidget); - expect(find.text('Item 3'), findsOneWidget); - expect(find.text('Item 4'), findsOneWidget); - - expect(tester.getTopLeft(find.text('Item 0')), Offset.zero); - expect(tester.getTopLeft(find.text('Item 1')), const Offset(0.0, 100.0)); - expect(tester.getTopLeft(find.text('Item 2')), const Offset(0.0, 150.0)); - expect(tester.getTopLeft(find.text('Item 3')), const Offset(0.0, 250.0)); - expect(tester.getTopLeft(find.text('Item 4')), const Offset(0.0, 300.0)); - - await tester.binding.setSurfaceSize(const Size(560, 100)); - // resets the screen to its original size after the test end - addTearDown(tester.view.resetPhysicalSize); - await tester.pumpAndSettle(); - - expect(find.text('Item 0'), findsOneWidget); - expect(find.text('Item 1'), findsOneWidget); - expect(find.text('Item 2'), findsOneWidget); - expect(find.text('Item 3'), findsOneWidget); - expect(find.text('Item 4'), findsNothing); - - expect(tester.getTopLeft(find.text('Item 0')), Offset.zero); - expect(tester.getTopLeft(find.text('Item 1')), const Offset(100.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 2')), const Offset(280.0, 0.0)); - expect(tester.getTopLeft(find.text('Item 3')), const Offset(380.0, 0.0)); - }); -} - -Widget textFieldBoilerplate({required Widget child}) { - return MaterialApp( - home: Localizations( - locale: const Locale('en', 'US'), - delegates: >[ - WidgetsLocalizationsDelegate(), - MaterialLocalizationsDelegate(), - ], - child: Directionality( - textDirection: TextDirection.ltr, - child: MediaQuery( - data: const MediaQueryData(size: Size(800.0, 600.0)), - child: Center( - child: Material( - child: child, - ), - ), - ), - ), - ), - ); -} - -class MaterialLocalizationsDelegate - extends LocalizationsDelegate { - @override - bool isSupported(Locale locale) => true; - - @override - Future load(Locale locale) => - DefaultMaterialLocalizations.load(locale); - - @override - bool shouldReload(MaterialLocalizationsDelegate old) => false; -} - -class WidgetsLocalizationsDelegate - extends LocalizationsDelegate { - @override - bool isSupported(Locale locale) => true; - - @override - Future load(Locale locale) => - DefaultWidgetsLocalizations.load(locale); - - @override - bool shouldReload(WidgetsLocalizationsDelegate old) => false; -}