From e69292dd3037d413e8f1a41a39ac86c268ba5228 Mon Sep 17 00:00:00 2001 From: Jacek Nowosielski Date: Wed, 3 May 2023 16:00:46 +0200 Subject: [PATCH 1/2] Setup corect scrollOffsets when on beggining of the list This prevents messing up elements that causes holes in view --- lib/src/rendering/sliver_masonry_grid.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/src/rendering/sliver_masonry_grid.dart b/lib/src/rendering/sliver_masonry_grid.dart index 189f0bd..7485f93 100644 --- a/lib/src/rendering/sliver_masonry_grid.dart +++ b/lib/src/rendering/sliver_masonry_grid.dart @@ -367,10 +367,14 @@ class RenderSliverMasonryGrid extends RenderSliverMultiBoxAdaptor { RenderBox? child = firstChild; // If a new child is inserted and does not have a valid crossAxisIndex, we - // have to set it. + // have to set it. If we are on begginig of the list also set scrollOffset to 0. if (child != null && indexOf(child) == 0) { final firstChildParentData = _getParentData(child); firstChildParentData.crossAxisIndex = 0; + final secondChild = childAfter(child); + if (secondChild != null && indexOf(secondChild) == 1) { + scrollOffsets.fillRange(0, crossAxisCount, 0); + } } // We populate our earliestScrollOffsets list. From ace0573cbca40da4aad95a5320c11b9ffc5049ef Mon Sep 17 00:00:00 2001 From: Jacek Nowosielski Date: Sat, 18 Oct 2025 20:11:53 +0200 Subject: [PATCH 2/2] Remove all stuff we do not need --- CHANGELOG.md | 146 ----- docs/images/aligned.png | Bin 767 -> 0 bytes docs/images/aligned_example.png | Bin 30772 -> 0 bytes docs/images/masonry.png | Bin 898 -> 0 bytes docs/images/masonry_example.png | Bin 21913 -> 0 bytes docs/images/quilted.png | Bin 749 -> 0 bytes docs/images/quilted_example.png | Bin 27970 -> 0 bytes docs/images/staggered.png | Bin 760 -> 0 bytes docs/images/staggered_example.png | Bin 10259 -> 0 bytes docs/images/staired.png | Bin 673 -> 0 bytes docs/images/staired_example.png | Bin 12151 -> 0 bytes docs/images/woven.png | Bin 804 -> 0 bytes docs/images/woven_example.png | Bin 13490 -> 0 bytes example/README.md | 0 examples/.gitignore | 46 -- examples/.metadata | 10 - examples/README.md | 16 - examples/analysis_options.yaml | 29 - examples/android/.gitignore | 13 - examples/android/app/build.gradle | 68 --- .../android/app/src/debug/AndroidManifest.xml | 7 - .../android/app/src/main/AndroidManifest.xml | 41 -- .../com/example/examples/MainActivity.kt | 6 - .../res/drawable-v21/launch_background.xml | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 0 bytes .../app/src/main/res/values-night/styles.xml | 18 - .../app/src/main/res/values/styles.xml | 18 - .../app/src/profile/AndroidManifest.xml | 7 - examples/android/build.gradle | 29 - examples/android/gradle.properties | 3 - .../gradle/wrapper/gradle-wrapper.properties | 6 - examples/android/settings.gradle | 11 - examples/assets/aligned.png | Bin 767 -> 0 bytes examples/assets/masonry.png | Bin 898 -> 0 bytes examples/assets/quilted.png | Bin 749 -> 0 bytes examples/assets/staggered.png | Bin 760 -> 0 bytes examples/assets/staired.png | Bin 673 -> 0 bytes examples/assets/woven.png | Bin 804 -> 0 bytes examples/ios/.gitignore | 34 -- examples/ios/Flutter/AppFrameworkInfo.plist | 26 - examples/ios/Flutter/Debug.xcconfig | 1 - examples/ios/Flutter/Release.xcconfig | 1 - examples/ios/Runner.xcodeproj/project.pbxproj | 474 --------------- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../xcshareddata/xcschemes/Runner.xcscheme | 91 --- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - examples/ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 122 ---- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 564 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1588 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1025 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1716 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1920 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1895 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3831 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1888 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 3294 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 -- .../ios/Runner/Base.lproj/Main.storyboard | 26 - examples/ios/Runner/Info.plist | 49 -- examples/ios/Runner/Runner-Bridging-Header.h | 1 - examples/lib/common.dart | 139 ----- examples/lib/examples/aligned.dart | 27 - examples/lib/examples/masonry.dart | 28 - examples/lib/examples/quilted.dart | 33 - examples/lib/examples/staggered.dart | 50 -- examples/lib/examples/staired.dart | 31 - examples/lib/examples/woven.dart | 34 -- examples/lib/main.dart | 137 ----- examples/lib/main_examples.dart | 137 ----- examples/lib/pages/aligned.dart | 48 -- examples/lib/pages/masonry.dart | 48 -- examples/lib/pages/quilted.dart | 42 -- examples/lib/pages/staggered.dart | 56 -- examples/lib/pages/staired.dart | 44 -- examples/lib/pages/woven.dart | 43 -- examples/macos/.gitignore | 7 - .../macos/Runner.xcodeproj/project.pbxproj | 572 ------------------ .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/xcschemes/Runner.xcscheme | 89 --- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - examples/macos/Runner/AppDelegate.swift | 9 - .../AppIcon.appiconset/Contents.json | 68 --- .../AppIcon.appiconset/app_icon_1024.png | Bin 46993 -> 0 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 3276 -> 0 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 1429 -> 0 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 5933 -> 0 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 1243 -> 0 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 14800 -> 0 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 1874 -> 0 bytes examples/macos/Runner/Base.lproj/MainMenu.xib | 339 ----------- .../macos/Runner/Configs/AppInfo.xcconfig | 14 - examples/macos/Runner/Configs/Debug.xcconfig | 2 - .../macos/Runner/Configs/Release.xcconfig | 2 - .../macos/Runner/Configs/Warnings.xcconfig | 13 - .../macos/Runner/DebugProfile.entitlements | 14 - examples/macos/Runner/Info.plist | 32 - examples/macos/Runner/MainFlutterWindow.swift | 15 - examples/macos/Runner/Release.entitlements | 10 - examples/pubspec.yaml | 24 - examples/web/favicon.png | Bin 917 -> 0 bytes examples/web/icons/Icon-192.png | Bin 5292 -> 0 bytes examples/web/icons/Icon-512.png | Bin 8252 -> 0 bytes examples/web/icons/Icon-maskable-192.png | Bin 5594 -> 0 bytes examples/web/icons/Icon-maskable-512.png | Bin 20998 -> 0 bytes examples/web/index.html | 101 ---- examples/web/manifest.json | 35 -- lib/flutter_staggered_grid_view.dart | 5 - lib/src/layouts/quilted.dart | 448 -------------- .../sliver_patterned_grid_delegate.dart | 223 ------- lib/src/layouts/staired.dart | 141 ----- lib/src/layouts/woven.dart | 142 ----- lib/src/widgets/aligned_grid_view.dart | 283 --------- lib/src/widgets/sliver_aligned_grid.dart | 196 ------ test/src/layouts/quilted_test.dart | 274 --------- test/src/layouts/staired_test.dart | 59 -- test/src/layouts/woven_test.dart | 174 ------ test/src/widgets/aligned_grid_view_test.dart | 189 ------ 139 files changed, 5847 deletions(-) delete mode 100644 CHANGELOG.md delete mode 100644 docs/images/aligned.png delete mode 100644 docs/images/aligned_example.png delete mode 100644 docs/images/masonry.png delete mode 100644 docs/images/masonry_example.png delete mode 100644 docs/images/quilted.png delete mode 100644 docs/images/quilted_example.png delete mode 100644 docs/images/staggered.png delete mode 100644 docs/images/staggered_example.png delete mode 100644 docs/images/staired.png delete mode 100644 docs/images/staired_example.png delete mode 100644 docs/images/woven.png delete mode 100644 docs/images/woven_example.png delete mode 100644 example/README.md delete mode 100644 examples/.gitignore delete mode 100644 examples/.metadata delete mode 100644 examples/README.md delete mode 100644 examples/analysis_options.yaml delete mode 100644 examples/android/.gitignore delete mode 100644 examples/android/app/build.gradle delete mode 100644 examples/android/app/src/debug/AndroidManifest.xml delete mode 100644 examples/android/app/src/main/AndroidManifest.xml delete mode 100644 examples/android/app/src/main/kotlin/com/example/examples/MainActivity.kt delete mode 100644 examples/android/app/src/main/res/drawable-v21/launch_background.xml delete mode 100644 examples/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 examples/android/app/src/main/res/values-night/styles.xml delete mode 100644 examples/android/app/src/main/res/values/styles.xml delete mode 100644 examples/android/app/src/profile/AndroidManifest.xml delete mode 100644 examples/android/build.gradle delete mode 100644 examples/android/gradle.properties delete mode 100644 examples/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 examples/android/settings.gradle delete mode 100644 examples/assets/aligned.png delete mode 100644 examples/assets/masonry.png delete mode 100644 examples/assets/quilted.png delete mode 100644 examples/assets/staggered.png delete mode 100644 examples/assets/staired.png delete mode 100644 examples/assets/woven.png delete mode 100644 examples/ios/.gitignore delete mode 100644 examples/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 examples/ios/Flutter/Debug.xcconfig delete mode 100644 examples/ios/Flutter/Release.xcconfig delete mode 100644 examples/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 examples/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 examples/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 examples/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 examples/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 examples/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 examples/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 examples/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 examples/ios/Runner/AppDelegate.swift delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 examples/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 examples/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 examples/ios/Runner/Info.plist delete mode 100644 examples/ios/Runner/Runner-Bridging-Header.h delete mode 100644 examples/lib/common.dart delete mode 100644 examples/lib/examples/aligned.dart delete mode 100644 examples/lib/examples/masonry.dart delete mode 100644 examples/lib/examples/quilted.dart delete mode 100644 examples/lib/examples/staggered.dart delete mode 100644 examples/lib/examples/staired.dart delete mode 100644 examples/lib/examples/woven.dart delete mode 100644 examples/lib/main.dart delete mode 100644 examples/lib/main_examples.dart delete mode 100644 examples/lib/pages/aligned.dart delete mode 100644 examples/lib/pages/masonry.dart delete mode 100644 examples/lib/pages/quilted.dart delete mode 100644 examples/lib/pages/staggered.dart delete mode 100644 examples/lib/pages/staired.dart delete mode 100644 examples/lib/pages/woven.dart delete mode 100644 examples/macos/.gitignore delete mode 100644 examples/macos/Runner.xcodeproj/project.pbxproj delete mode 100644 examples/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 examples/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 examples/macos/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 examples/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 examples/macos/Runner/AppDelegate.swift delete mode 100644 examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png delete mode 100644 examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png delete mode 100644 examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png delete mode 100644 examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png delete mode 100644 examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png delete mode 100644 examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png delete mode 100644 examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png delete mode 100644 examples/macos/Runner/Base.lproj/MainMenu.xib delete mode 100644 examples/macos/Runner/Configs/AppInfo.xcconfig delete mode 100644 examples/macos/Runner/Configs/Debug.xcconfig delete mode 100644 examples/macos/Runner/Configs/Release.xcconfig delete mode 100644 examples/macos/Runner/Configs/Warnings.xcconfig delete mode 100644 examples/macos/Runner/DebugProfile.entitlements delete mode 100644 examples/macos/Runner/Info.plist delete mode 100644 examples/macos/Runner/MainFlutterWindow.swift delete mode 100644 examples/macos/Runner/Release.entitlements delete mode 100644 examples/pubspec.yaml delete mode 100644 examples/web/favicon.png delete mode 100644 examples/web/icons/Icon-192.png delete mode 100644 examples/web/icons/Icon-512.png delete mode 100644 examples/web/icons/Icon-maskable-192.png delete mode 100644 examples/web/icons/Icon-maskable-512.png delete mode 100644 examples/web/index.html delete mode 100644 examples/web/manifest.json delete mode 100644 lib/src/layouts/quilted.dart delete mode 100644 lib/src/layouts/sliver_patterned_grid_delegate.dart delete mode 100644 lib/src/layouts/staired.dart delete mode 100644 lib/src/layouts/woven.dart delete mode 100644 lib/src/widgets/aligned_grid_view.dart delete mode 100644 lib/src/widgets/sliver_aligned_grid.dart delete mode 100644 test/src/layouts/quilted_test.dart delete mode 100644 test/src/layouts/staired_test.dart delete mode 100644 test/src/layouts/woven_test.dart delete mode 100644 test/src/widgets/aligned_grid_view_test.dart diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index fc1bc54..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,146 +0,0 @@ -## 0.7.0 -### Changed -* Bump minimal Flutter version to 3.7.0 -### Fixed -* Warning with Scrollable.of - -## 0.6.2 -### Fixed -* Issue with Quilted layout algorithm. (https://github.com/letsar/flutter_staggered_grid_view/issues/232) - -## 0.6.1 -### Fixed -* Issue when childCount is 0 with Quilted layout. - -## 0.6.0 -### Added -* SliverAlignedGrid and AlignedGridView widgets. -### Changed -* Renamed SliverMasonryGridDelegate to SliverSimpleGridDelegate. - -## 0.5.1 -### Added -* StaggeredTile.fit constructor. - -## 0.5.0 -### Changed -* Stable release - -## 0.5.0-dev.8 -### Changed -* Make the `childCount` parameter of `SliverMasonryGrid` constructors, nullable and not required. - -## 0.5.0-dev.7 -### Fixed -* Remove position issue with staired pattern. - -## 0.5.0-dev.6 -### Fixed -* Remove extra space on fixed woven grid. - -## 0.5.0-dev.5 -### Fixed -* Remove extra space on fixed quilted grid (#216). - -## 0.5.0-dev.4 -### Fixed -* Issue with Woven pattern layout flow in second run. - -## 0.5.0-dev.3 -### Fixed -* Issue with Woven pattern and text direction. - -## 0.5.0-dev.2 -### Fixed -* Issue with Quilted pattern. - -## 0.5.0-dev.1 -### Changed -* Complete rewriting of the package. -It comes now with 5 differents grid layouts (Staggered, Masonry, Quilted, Woven, Staired). - -## 0.4.1 -### Changed -* Add option to disable keepAlives - -## 0.4.0 -### Changed -* Stable null safety version - -## 0.4.0-nullsafety.3 -### Fixed -* LateInitializationError: Local `firstIndex` has not been initialized. (https://github.com/letsar/flutter_staggered_grid_view/issues/151) - -## 0.4.0-nullsafety.2 -### Added -* Support for state restoration - -## 0.4.0-nullsafety.1 -### Added -* Null Safety Support - -## 0.3.4 -### Fixed -* KeepAliveBucket logic, should improve performances - -## 0.3.3 -### Added -* Support for state restoration. - -## 0.3.2 -### Fixed -* Flutter version dependency. - -## 0.3.1 -### Fixed -* Static analysis issues. - -## 0.3.0 -### Fixed -* Upgrade to AndroidX and fixes the BoxHitTestResult exception (https://github.com/letsar/flutter_staggered_grid_view/issues/49) - -## 0.2.7 -### Fixed -* Better fix for the bug where items are built only once. - -## 0.2.6 -### Fixed -* Fix a bug where items are built only once. - -## 0.2.5 -### Changed -* Use the new SliverWithKeepAliveWidget. - -## 0.2.4 -### Fixed -* Dart 2.1 mixin support. - -## 0.2.3 -### Fixed -* Fix the rtl support (https://github.com/letsar/flutter_staggered_grid_view/issues/17). - -## 0.2.2 -* Add Dart 2 support. - -## 0.2.1 -* Fix #10 `StatefulWidget.createState must return a subtype of State`. - -## 0.2.0 -* Add a way to let the tile's content to define the tile's extent in the main axis. -* Add `fit` constructor to `StaggeredTile`. - -## 0.1.4 -* Add `countBuilder` and `extendBuilder` constructors to `SliverStaggeredGrid` - -## 0.1.3 -* Remove Flutter SDK constraint - -## 0.1.2 -* Remove update Flutter SDK constraint - -## 0.1.1 -* Fix images in readme -* Add dynamic resizing demo - -## 0.1.0 -* Initial Open Source release \ No newline at end of file diff --git a/docs/images/aligned.png b/docs/images/aligned.png deleted file mode 100644 index 4f69871849755160d6f313d8d88f4ef8be0f0f79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>l*8o|0J?9FfdK=ba4!+V0?RbVPTddgInUeY$a!A!7B}Y z=|N61ZJw$;Z0?+rH72GmOBmaXHfA`bpkBhfG{ra}{hVK6R@tbwGpDw$h8@Ew`gQdxVVghL615ckiqbffA*N^Le zM_)U!e@5leCItZwrp7@;FfuSSs2i^J`~5p9z+Qg-<;OpF-R9YyT4`~9+a0~ziQD(A q>EEoYeBW?=ga8YZqr$)t5A`32Sl|B9SS1P!RR&L2KbLh*2~7Z36vYMr diff --git a/docs/images/aligned_example.png b/docs/images/aligned_example.png deleted file mode 100644 index 54a84b484d625c0da97d234c0ce1c19c63ade3e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30772 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 diff --git a/docs/images/masonry.png b/docs/images/masonry.png deleted file mode 100644 index da79a4a46d6991d4f5b4a6de9cb7823bcc8f4e61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>l*8o|0J?9FffaIx;TbZFuuL3=qHmX(eQAoWM}>kh9={X z$DH$8)~r^n7HV3ltWweB{+&mA$AM*X{<*hP;xFG#`FHZO#S@l$HGix(-=7m>bFY3K z+t%28zkh#zKK@yDBinLs<*(OKW#!?A<4)f^{5q*lKR)b098;r$00+gy-W6F;AR-H>loRbO3LH%n2NrO82og8*@8(LVk|Hobea4?vB1z;oy#5*O@J zgWT)V(ti{9p(Y;MvU|7GH@)XK53l|#?4H`>Ai%-WNPyT7S-7m`da9fc)aU0Ej7vXO z*uPoVp!zn-*b%Ecbzb@X`hB}wJ;71~X7i$R3j6Eo}^(=ICy#<~Q%w zwcXvH;{M5ICfr`2ezC8bVxLVu3G=BzgCbp^FYn3r89+ro6K398XFl)jEJm2Kp2R-> zTvAtQ`$paVeZGG8&)G&$|NH#A-uf428N~?%rvbo}b51U9uld|&n8iA;c#1w&{NE{c frED)!(m9m>DA_mU*P+Z71|aZs^>bP0l+XkK3`-ZY diff --git a/docs/images/masonry_example.png b/docs/images/masonry_example.png deleted file mode 100644 index 6ca30e80f56e5ed4dd22c5ad72cea8131c0f99ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21913 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�zm&E+hXMT?(;LC*JKZ;|0qNv%gWfK1M`(iRso)u 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 X|KaC}G&W*F00000NkvXXu0mjf#_l-h diff --git a/docs/images/quilted.png b/docs/images/quilted.png deleted file mode 100644 index 9e6031eaf4e5d7a62e27aaf937e21a44b72fe567..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>l*8o|0J?9FfcWFx;TbZFuuK^n8y?-;&5^1vg(Xoj4sy$ zdezq~5IY>6H@Ci$v#;jHZkg}VzaOy7R1jcca-=Kqke@eCmBFb;;yp057(8A5T-G@yGywo3 COSmWi diff --git a/docs/images/quilted_example.png b/docs/images/quilted_example.png deleted file mode 100644 index 8263e3a4ee68441b647e185501b82b394305769c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27970 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 Lx@?8CWzhctAbc_a diff --git a/docs/images/staggered.png b/docs/images/staggered.png deleted file mode 100644 index a50f0d3291e99e124baff2bbaedd4495364e4c23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>l*8o|0J?9FfjFcx;TbZFuuL6=*1c+((usw)1ufr4F^qU zyiF26k|r3gBsQC)Y~$?M=7YQ)cmJ)C`s4d4?aA+3M;_jrUwnQ`dBq;NoI9^CAO7;S z`v136JI@@r#!#msz`@k0Ku2QrL7lyGV*Q$XjU5#@SehIZZaAjBdi<}%RxIoHlXtiO zefd|j??$~LR1&O$KE$C{UtcCleP}P^%M+_U?gI^y)!(0g{+jT3+8@9FXYW1ynDl-I zCzGRs01I7-u;$2Hb~|UYNvAhC2yn18I&5e@bLIBYi&Z*T-hF+%|K@y{Yv~x3A2?sF XkXu&&*zXT8p)z>7`njxgN@xNAkXpws diff --git a/docs/images/staggered_example.png b/docs/images/staggered_example.png deleted file mode 100644 index 044d53b62f27a7c238a345b5f176e8de0c602a68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10259 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 M@@jGwugt>#4P(ynr~m)} diff --git a/docs/images/woven.png b/docs/images/woven.png deleted file mode 100644 index 9b0e317a331d4f2467a8b2f842f41066b56935f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 804 zcmeAS@N?(olHy`uVBq!ia0vp^CxG}U2OE$SJhs;XNO2Z;L>4nJa0`PlBg3pY55jgR3=A9lx&I`xGB7ah^mK6ysbGA2%P=e2k-_!i`UOUNFS5l{ z@UFWn{grX@x!x0AJyPXr58_sYzcpQQfvu(b`zfxX%m04P+1z?OH6bnRa?_o?dt;V6 z{{8tg+f?_;^W&d4?5>&JP%p&6(&!)nCnDm@`VZd=%>Q=$=swvyb~){LpVnCEq=~D; zRUp*Tm=ytZ#ML8j=J>PkKGPt~(&V7PfkXhqC@rb<_lCWG%~7A~m!5uCcq4Y&m;L8; z#Zdesz|rz`i^6>Q^M`@nxwBvIoA2}2e=~2y&QTCxVRED^k!Y)X;_TnoSxII4{{OIj zqvt2U!PKaLL;$@sqto?o?60c&U4G3{Klfky4~#RO-QCeTXev2ggZyj#>g>NAH?}w5 zZhyOB_Z*PN=o45@q_z|xVhk?>cFQ! P-!XW)`njxgN@xNAq^atS diff --git a/docs/images/woven_example.png b/docs/images/woven_example.png deleted file mode 100644 index 1f543013576eb831cfac2252d602f0ba0abc0364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13490 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 PMgSEBP5Bzx_n-b3AW?IU diff --git a/example/README.md b/example/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/examples/.gitignore b/examples/.gitignore deleted file mode 100644 index 0fa6b67..0000000 --- a/examples/.gitignore +++ /dev/null @@ -1,46 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# 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/examples/.metadata b/examples/.metadata deleted file mode 100644 index a5584fc..0000000 --- a/examples/.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: 18116933e77adc82f80866c928266a5b4f1ed645 - channel: stable - -project_type: app diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index a135626..0000000 --- a/examples/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# example - -A new Flutter project. - -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) - -For help getting started with Flutter, view our -[online documentation](https://flutter.dev/docs), which offers tutorials, -samples, guidance on mobile development, and a full API reference. diff --git a/examples/analysis_options.yaml b/examples/analysis_options.yaml deleted file mode 100644 index 61b6c4d..0000000 --- a/examples/analysis_options.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# This file configures the analyzer, which statically analyzes Dart code to -# check for errors, warnings, and lints. -# -# The issues identified by the analyzer are surfaced in the UI of Dart-enabled -# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be -# invoked from the command line by running `flutter analyze`. - -# The following line activates a set of recommended lints for Flutter apps, -# packages, and plugins designed to encourage good coding practices. -include: package:flutter_lints/flutter.yaml - -linter: - # The lint rules applied to this project can be customized in the - # section below to disable rules from the `package:flutter_lints/flutter.yaml` - # included above or to enable additional rules. A list of all available lints - # and their documentation is published at - # https://dart-lang.github.io/linter/lints/index.html. - # - # Instead of disabling a lint rule for the entire project in the - # section below, it can also be suppressed for a single line of code - # or a specific dart file by using the `// ignore: name_of_lint` and - # `// ignore_for_file: name_of_lint` syntax on the line or in the file - # producing the lint. - rules: - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/examples/android/.gitignore b/examples/android/.gitignore deleted file mode 100644 index 6f56801..0000000 --- a/examples/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/examples/android/app/build.gradle b/examples/android/app/build.gradle deleted file mode 100644 index 18f276f..0000000 --- a/examples/android/app/build.gradle +++ /dev/null @@ -1,68 +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 { - compileSdkVersion 30 - - 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.examples" - minSdkVersion 16 - targetSdkVersion 30 - 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 - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/examples/android/app/src/debug/AndroidManifest.xml b/examples/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index 1f203b3..0000000 --- a/examples/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/examples/android/app/src/main/AndroidManifest.xml b/examples/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 7234537..0000000 --- a/examples/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/examples/android/app/src/main/kotlin/com/example/examples/MainActivity.kt b/examples/android/app/src/main/kotlin/com/example/examples/MainActivity.kt deleted file mode 100644 index 275b8bf..0000000 --- a/examples/android/app/src/main/kotlin/com/example/examples/MainActivity.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.examples - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity: FlutterActivity() { -} diff --git a/examples/android/app/src/main/res/drawable-v21/launch_background.xml b/examples/android/app/src/main/res/drawable-v21/launch_background.xml deleted file mode 100644 index f74085f..0000000 --- a/examples/android/app/src/main/res/drawable-v21/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/examples/android/app/src/main/res/drawable/launch_background.xml b/examples/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f..0000000 --- a/examples/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ diff --git a/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ diff --git a/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d6372eebdb28e45604e46eeda8dd24651419bc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/examples/android/app/src/main/res/values-night/styles.xml b/examples/android/app/src/main/res/values-night/styles.xml deleted file mode 100644 index 449a9f9..0000000 --- a/examples/android/app/src/main/res/values-night/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/examples/android/app/src/main/res/values/styles.xml b/examples/android/app/src/main/res/values/styles.xml deleted file mode 100644 index d74aa35..0000000 --- a/examples/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/examples/android/app/src/profile/AndroidManifest.xml b/examples/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index 1f203b3..0000000 --- a/examples/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/examples/android/build.gradle b/examples/android/build.gradle deleted file mode 100644 index ed45c65..0000000 --- a/examples/android/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/examples/android/gradle.properties b/examples/android/gradle.properties deleted file mode 100644 index 94adc3a..0000000 --- a/examples/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true diff --git a/examples/android/gradle/wrapper/gradle-wrapper.properties b/examples/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index bc6a58a..0000000 --- a/examples/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-6.7-all.zip diff --git a/examples/android/settings.gradle b/examples/android/settings.gradle deleted file mode 100644 index 44e62bc..0000000 --- a/examples/android/settings.gradle +++ /dev/null @@ -1,11 +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" diff --git a/examples/assets/aligned.png b/examples/assets/aligned.png deleted file mode 100644 index 4f69871849755160d6f313d8d88f4ef8be0f0f79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>l*8o|0J?9FfdK=ba4!+V0?RbVPTddgInUeY$a!A!7B}Y z=|N61ZJw$;Z0?+rH72GmOBmaXHfA`bpkBhfG{ra}{hVK6R@tbwGpDw$h8@Ew`gQdxVVghL615ckiqbffA*N^Le zM_)U!e@5leCItZwrp7@;FfuSSs2i^J`~5p9z+Qg-<;OpF-R9YyT4`~9+a0~ziQD(A q>EEoYeBW?=ga8YZqr$)t5A`32Sl|B9SS1P!RR&L2KbLh*2~7Z36vYMr diff --git a/examples/assets/masonry.png b/examples/assets/masonry.png deleted file mode 100644 index da79a4a46d6991d4f5b4a6de9cb7823bcc8f4e61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>l*8o|0J?9FffaIx;TbZFuuL3=qHmX(eQAoWM}>kh9={X z$DH$8)~r^n7HV3ltWweB{+&mA$AM*X{<*hP;xFG#`FHZO#S@l$HGix(-=7m>bFY3K z+t%28zkh#zKK@yDBinLs<*(OKW#!?A<4)f^{5q*lKR)b098;r$00+gy-W6F;AR-H>loRbO3LH%n2NrO82og8*@8(LVk|Hobea4?vB1z;oy#5*O@J zgWT)V(ti{9p(Y;MvU|7GH@)XK53l|#?4H`>Ai%-WNPyT7S-7m`da9fc)aU0Ej7vXO z*uPoVp!zn-*b%Ecbzb@X`hB}wJ;71~X7i$R3j6Eo}^(=ICy#<~Q%w zwcXvH;{M5ICfr`2ezC8bVxLVu3G=BzgCbp^FYn3r89+ro6K398XFl)jEJm2Kp2R-> zTvAtQ`$paVeZGG8&)G&$|NH#A-uf428N~?%rvbo}b51U9uld|&n8iA;c#1w&{NE{c frED)!(m9m>DA_mU*P+Z71|aZs^>bP0l+XkK3`-ZY diff --git a/examples/assets/quilted.png b/examples/assets/quilted.png deleted file mode 100644 index 9e6031eaf4e5d7a62e27aaf937e21a44b72fe567..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>l*8o|0J?9FfcWFx;TbZFuuK^n8y?-;&5^1vg(Xoj4sy$ zdezq~5IY>6H@Ci$v#;jHZkg}VzaOy7R1jcca-=Kqke@eCmBFb;;yp057(8A5T-G@yGywo3 COSmWi diff --git a/examples/assets/staggered.png b/examples/assets/staggered.png deleted file mode 100644 index a50f0d3291e99e124baff2bbaedd4495364e4c23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>l*8o|0J?9FfjFcx;TbZFuuL6=*1c+((usw)1ufr4F^qU zyiF26k|r3gBsQC)Y~$?M=7YQ)cmJ)C`s4d4?aA+3M;_jrUwnQ`dBq;NoI9^CAO7;S z`v136JI@@r#!#msz`@k0Ku2QrL7lyGV*Q$XjU5#@SehIZZaAjBdi<}%RxIoHlXtiO zefd|j??$~LR1&O$KE$C{UtcCleP}P^%M+_U?gI^y)!(0g{+jT3+8@9FXYW1ynDl-I zCzGRs01I7-u;$2Hb~|UYNvAhC2yn18I&5e@bLIBYi&Z*T-hF+%|K@y{Yv~x3A2?sF XkXu&&*zXT8p)z>7`njxgN@xNAkXpws diff --git a/examples/assets/staired.png b/examples/assets/staired.png deleted file mode 100644 index 1622356c326da5d5f26d18ced7f373d750f5c89a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^CxQ3`2OE%dnssymkm4-xh%9Dc;1&j9Muu5)B!Gg9 z#X;^)4C~IxyaaMs(j9#r85lP9bN@+XWnf@3^K@|xsbGA2d!es$qDb4r|C8Q1L@*rW z$*@UeYC0^SrYIr9cK^ZZnT!`%IppGVc=s$i>6`z_#(0jod+p_)SI_1d%zm3@%PaOY zh2g&tC(A?!0lY*6Q04E(_x`23EuXGG*`LW#MZkqFMB>)FYnC(qIjP>LAjF|WCcy{{ zKsdNz+{;{R8}pt`X65GR-<$LA7zs9cD0Hw400DOskdbh{4nJa0`PlBg3pY55jgR3=A9lx&I`xGB7ah^mK6ysbGA2%P=e2k-_!i`UOUNFS5l{ z@UFWn{grX@x!x0AJyPXr58_sYzcpQQfvu(b`zfxX%m04P+1z?OH6bnRa?_o?dt;V6 z{{8tg+f?_;^W&d4?5>&JP%p&6(&!)nCnDm@`VZd=%>Q=$=swvyb~){LpVnCEq=~D; zRUp*Tm=ytZ#ML8j=J>PkKGPt~(&V7PfkXhqC@rb<_lCWG%~7A~m!5uCcq4Y&m;L8; z#Zdesz|rz`i^6>Q^M`@nxwBvIoA2}2e=~2y&QTCxVRED^k!Y)X;_TnoSxII4{{OIj zqvt2U!PKaLL;$@sqto?o?60c&U4G3{Klfky4~#RO-QCeTXev2ggZyj#>g>NAH?}w5 zZhyOB_Z*PN=o45@q_z|xVhk?>cFQ! P-!XW)`njxgN@xNAq^atS diff --git a/examples/ios/.gitignore b/examples/ios/.gitignore deleted file mode 100644 index 7a7f987..0000000 --- a/examples/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/examples/ios/Flutter/AppFrameworkInfo.plist b/examples/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 9625e10..0000000 --- a/examples/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 - 11.0 - - diff --git a/examples/ios/Flutter/Debug.xcconfig b/examples/ios/Flutter/Debug.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/examples/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/examples/ios/Flutter/Release.xcconfig b/examples/ios/Flutter/Release.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/examples/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/examples/ios/Runner.xcodeproj/project.pbxproj b/examples/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index c61babf..0000000 --- a/examples/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,474 +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 = 1300; - 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 = 11.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.examples; - 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 = 11.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 = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - 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.examples; - 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.examples; - 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/examples/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/examples/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/examples/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/examples/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/examples/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/examples/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index 3db53b6..0000000 --- a/examples/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/ios/Runner.xcworkspace/contents.xcworkspacedata b/examples/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a1..0000000 --- a/examples/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/examples/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/examples/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/examples/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/examples/ios/Runner/AppDelegate.swift b/examples/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4..0000000 --- a/examples/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@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/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fa..0000000 --- a/examples/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/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725e9b0ddb1deab583e5b5102493aa332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10932 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 diff --git a/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b0bca859a3f474b03065bef75ba58a9e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ diff --git a/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e7edb86cdfe0d15b4b0d98334a86163658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1716 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 diff --git a/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8f5cee1c98386d13b17e89f719e83555b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 diff --git a/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b8609df07bf62e5100a53a01510388bd2b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b8609df07bf62e5100a53a01510388bd2b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3831 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 diff --git a/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/examples/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725..0000000 --- a/examples/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/examples/ios/Runner/Base.lproj/LaunchScreen.storyboard b/examples/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c..0000000 --- a/examples/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/ios/Runner/Base.lproj/Main.storyboard b/examples/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c2851..0000000 --- a/examples/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/ios/Runner/Info.plist b/examples/ios/Runner/Info.plist deleted file mode 100644 index aad4194..0000000 --- a/examples/ios/Runner/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - examples - 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 - - UIViewControllerBasedStatusBarAppearance - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - - diff --git a/examples/ios/Runner/Runner-Bridging-Header.h b/examples/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a5..0000000 --- a/examples/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/examples/lib/common.dart b/examples/lib/common.dart deleted file mode 100644 index a8ef541..0000000 --- a/examples/lib/common.dart +++ /dev/null @@ -1,139 +0,0 @@ -import 'package:flutter/material.dart'; - -const _defaultColor = Color(0xFF34568B); - -class AppScaffold extends StatelessWidget { - const AppScaffold({ - Key? key, - required this.title, - this.topPadding = 0, - required this.child, - }) : super(key: key); - - final String title; - final Widget child; - final double topPadding; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(title), - ), - body: Padding( - padding: EdgeInsets.only(top: topPadding), - child: child, - ), - ); - } -} - -class Tile extends StatelessWidget { - const Tile({ - Key? key, - required this.index, - this.extent, - this.backgroundColor, - this.bottomSpace, - }) : super(key: key); - - final int index; - final double? extent; - final double? bottomSpace; - final Color? backgroundColor; - - @override - Widget build(BuildContext context) { - final child = Container( - color: backgroundColor ?? _defaultColor, - height: extent, - child: Center( - child: CircleAvatar( - minRadius: 20, - maxRadius: 20, - backgroundColor: Colors.white, - foregroundColor: Colors.black, - child: Text('$index', style: const TextStyle(fontSize: 20)), - ), - ), - ); - - if (bottomSpace == null) { - return child; - } - - return Column( - children: [ - Expanded(child: child), - Container( - height: bottomSpace, - color: Colors.green, - ) - ], - ); - } -} - -class ImageTile extends StatelessWidget { - const ImageTile({ - Key? key, - required this.index, - required this.width, - required this.height, - }) : super(key: key); - - final int index; - final int width; - final int height; - - @override - Widget build(BuildContext context) { - return Image.network( - 'https://picsum.photos/$width/$height?random=$index', - width: width.toDouble(), - height: height.toDouble(), - fit: BoxFit.cover, - ); - } -} - -class InteractiveTile extends StatefulWidget { - const InteractiveTile({ - Key? key, - required this.index, - this.extent, - this.bottomSpace, - }) : super(key: key); - - final int index; - final double? extent; - final double? bottomSpace; - - @override - _InteractiveTileState createState() => _InteractiveTileState(); -} - -class _InteractiveTileState extends State { - Color color = _defaultColor; - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () { - setState(() { - if (color == _defaultColor) { - color = Colors.red; - } else { - color = _defaultColor; - } - }); - }, - child: Tile( - index: widget.index, - extent: widget.extent, - backgroundColor: color, - bottomSpace: widget.bottomSpace, - ), - ); - } -} diff --git a/examples/lib/examples/aligned.dart b/examples/lib/examples/aligned.dart deleted file mode 100644 index 3a6fed6..0000000 --- a/examples/lib/examples/aligned.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class AlignedPage extends StatelessWidget { - const AlignedPage({ - Key? key, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Aligned', - child: AlignedGridView.count( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - itemBuilder: (context, index) { - return Tile( - index: index, - extent: (index % 7 + 1) * 30, - ); - }, - ), - ); - } -} diff --git a/examples/lib/examples/masonry.dart b/examples/lib/examples/masonry.dart deleted file mode 100644 index 3726218..0000000 --- a/examples/lib/examples/masonry.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class MasonryPage extends StatelessWidget { - const MasonryPage({ - Key? key, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Masonry', - child: MasonryGridView.count( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - itemBuilder: (context, index) { - return Tile( - index: index, - extent: (index % 5 + 1) * 100, - ); - }, - ), - ); - } -} diff --git a/examples/lib/examples/quilted.dart b/examples/lib/examples/quilted.dart deleted file mode 100644 index a448133..0000000 --- a/examples/lib/examples/quilted.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class QuiltedPage extends StatelessWidget { - const QuiltedPage({ - Key? key, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Quilted', - child: GridView.custom( - gridDelegate: SliverQuiltedGridDelegate( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - repeatPattern: QuiltedGridRepeatPattern.inverted, - pattern: const [ - QuiltedGridTile(2, 2), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 2), - ], - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) => Tile(index: index), - ), - ), - ); - } -} diff --git a/examples/lib/examples/staggered.dart b/examples/lib/examples/staggered.dart deleted file mode 100644 index 8cded28..0000000 --- a/examples/lib/examples/staggered.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class StaggeredPage extends StatelessWidget { - const StaggeredPage({ - Key? key, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Staggered', - child: SingleChildScrollView( - child: StaggeredGrid.count( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - children: const [ - StaggeredGridTile.count( - crossAxisCellCount: 2, - mainAxisCellCount: 2, - child: Tile(index: 0), - ), - StaggeredGridTile.count( - crossAxisCellCount: 2, - mainAxisCellCount: 1, - child: Tile(index: 1), - ), - StaggeredGridTile.count( - crossAxisCellCount: 1, - mainAxisCellCount: 1, - child: Tile(index: 2), - ), - StaggeredGridTile.count( - crossAxisCellCount: 1, - mainAxisCellCount: 1, - child: Tile(index: 3), - ), - StaggeredGridTile.count( - crossAxisCellCount: 4, - mainAxisCellCount: 2, - child: Tile(index: 4), - ), - ], - ), - ), - ); - } -} diff --git a/examples/lib/examples/staired.dart b/examples/lib/examples/staired.dart deleted file mode 100644 index dd2662a..0000000 --- a/examples/lib/examples/staired.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class StairedPage extends StatelessWidget { - const StairedPage({ - Key? key, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Staired', - child: GridView.custom( - gridDelegate: SliverStairedGridDelegate( - crossAxisSpacing: 48, - mainAxisSpacing: 24, - startCrossAxisDirectionReversed: true, - pattern: const [ - StairedGridTile(0.5, 1), - StairedGridTile(0.5, 3 / 4), - StairedGridTile(1.0, 10 / 4), - ], - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) => Tile(index: index), - ), - ), - ); - } -} diff --git a/examples/lib/examples/woven.dart b/examples/lib/examples/woven.dart deleted file mode 100644 index b025201..0000000 --- a/examples/lib/examples/woven.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class WovenPage extends StatelessWidget { - const WovenPage({ - Key? key, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Woven', - child: GridView.custom( - gridDelegate: SliverWovenGridDelegate.count( - crossAxisCount: 2, - mainAxisSpacing: 8, - crossAxisSpacing: 8, - pattern: const [ - WovenGridTile(1), - WovenGridTile( - 5 / 7, - crossAxisRatio: 0.9, - alignment: AlignmentDirectional.centerEnd, - ), - ], - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) => Tile(index: index), - ), - ), - ); - } -} diff --git a/examples/lib/main.dart b/examples/lib/main.dart deleted file mode 100644 index 18675b2..0000000 --- a/examples/lib/main.dart +++ /dev/null @@ -1,137 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:examples/pages/aligned.dart'; -import 'package:examples/pages/masonry.dart'; -import 'package:examples/pages/quilted.dart'; -import 'package:examples/pages/staggered.dart'; -import 'package:examples/pages/staired.dart'; -import 'package:examples/pages/woven.dart'; -import 'package:flutter/material.dart'; - -void main() { - runApp(const MyApp()); -} - -class MyApp extends StatelessWidget { - const MyApp({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Staggered Grid View Demo', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: const HomePage(), - ); - } -} - -class HomePage extends StatelessWidget { - const HomePage({ - Key? key, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Staggered Grid View Demo', - child: GridView( - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2, - mainAxisSpacing: 16, - crossAxisSpacing: 16, - ), - children: const [ - MenuEntry( - title: 'Staggered', - imageName: 'staggered', - destination: StaggeredPage(), - ), - MenuEntry( - title: 'Masonry', - imageName: 'masonry', - destination: MasonryPage(), - ), - MenuEntry( - title: 'Quilted', - imageName: 'quilted', - destination: QuiltedPage(), - ), - MenuEntry( - title: 'Woven', - imageName: 'woven', - destination: WovenPage(), - ), - MenuEntry( - title: 'Staired', - imageName: 'staired', - destination: StairedPage(), - ), - MenuEntry( - title: 'Aligned', - imageName: 'aligned', - destination: AlignedPage(), - ), - ], - ), - ); - } -} - -class MenuEntry extends StatelessWidget { - const MenuEntry({ - Key? key, - required this.title, - required this.imageName, - required this.destination, - }) : super(key: key); - - final String title; - final Widget destination; - final String imageName; - - @override - Widget build(BuildContext context) { - return Card( - elevation: 4, - child: InkWell( - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => destination, - ), - ); - }, - child: Stack( - children: [ - Image.asset( - 'assets/$imageName.png', - fit: BoxFit.fill, - ), - Positioned.fill( - child: FractionallySizedBox( - heightFactor: 0.25, - alignment: Alignment.bottomCenter, - child: ColoredBox( - color: Colors.black.withOpacity(0.75), - child: Center( - child: Text( - title, - overflow: TextOverflow.ellipsis, - textAlign: TextAlign.center, - style: Theme.of(context) - .textTheme - .headline6! - .copyWith(color: Colors.white), - ), - ), - ), - ), - ), - ], - ), - ), - ); - } -} diff --git a/examples/lib/main_examples.dart b/examples/lib/main_examples.dart deleted file mode 100644 index 5cfb2d7..0000000 --- a/examples/lib/main_examples.dart +++ /dev/null @@ -1,137 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:examples/examples/aligned.dart'; -import 'package:examples/examples/masonry.dart'; -import 'package:examples/examples/quilted.dart'; -import 'package:examples/examples/staggered.dart'; -import 'package:examples/examples/staired.dart'; -import 'package:examples/examples/woven.dart'; -import 'package:flutter/material.dart'; - -void main() { - runApp(const MyApp()); -} - -class MyApp extends StatelessWidget { - const MyApp({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Staggered Grid View Demo', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: const HomePage(), - ); - } -} - -class HomePage extends StatelessWidget { - const HomePage({ - Key? key, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Staggered Grid View Demo', - child: GridView( - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2, - mainAxisSpacing: 16, - crossAxisSpacing: 16, - ), - children: const [ - MenuEntry( - title: 'Staggered', - imageName: 'staggered', - destination: StaggeredPage(), - ), - MenuEntry( - title: 'Masonry', - imageName: 'masonry', - destination: MasonryPage(), - ), - MenuEntry( - title: 'Quilted', - imageName: 'quilted', - destination: QuiltedPage(), - ), - MenuEntry( - title: 'Woven', - imageName: 'woven', - destination: WovenPage(), - ), - MenuEntry( - title: 'Staired', - imageName: 'staired', - destination: StairedPage(), - ), - MenuEntry( - title: 'Aligned', - imageName: 'aligned', - destination: AlignedPage(), - ), - ], - ), - ); - } -} - -class MenuEntry extends StatelessWidget { - const MenuEntry({ - Key? key, - required this.title, - required this.imageName, - required this.destination, - }) : super(key: key); - - final String title; - final Widget destination; - final String imageName; - - @override - Widget build(BuildContext context) { - return Card( - elevation: 4, - child: InkWell( - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => destination, - ), - ); - }, - child: Stack( - children: [ - Image.asset( - 'assets/$imageName.png', - fit: BoxFit.cover, - ), - Positioned.fill( - child: FractionallySizedBox( - heightFactor: 0.25, - alignment: Alignment.bottomCenter, - child: ColoredBox( - color: Colors.black.withOpacity(0.75), - child: Center( - child: Text( - title, - overflow: TextOverflow.ellipsis, - textAlign: TextAlign.center, - style: Theme.of(context) - .textTheme - .headline6! - .copyWith(color: Colors.white), - ), - ), - ), - ), - ), - ], - ), - ), - ); - } -} diff --git a/examples/lib/pages/aligned.dart b/examples/lib/pages/aligned.dart deleted file mode 100644 index 595badf..0000000 --- a/examples/lib/pages/aligned.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'dart:math'; - -import 'package:examples/common.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class AlignedPage extends StatefulWidget { - const AlignedPage({ - Key? key, - }) : super(key: key); - - @override - State createState() => _AlignedPageState(); -} - -class _AlignedPageState extends State { - final rnd = Random(); - late List extents; - int crossAxisCount = 4; - - @override - void initState() { - super.initState(); - extents = List.generate(10000, (int index) => rnd.nextInt(7) + 1); - } - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Aligned', - child: AlignedGridView.count( - crossAxisCount: crossAxisCount, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - itemBuilder: (context, index) { - final height = extents[index] * 40; - return ImageTile( - index: index, - width: 100, - height: height, - ); - }, - itemCount: extents.length, - ), - ); - } -} diff --git a/examples/lib/pages/masonry.dart b/examples/lib/pages/masonry.dart deleted file mode 100644 index 081a657..0000000 --- a/examples/lib/pages/masonry.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'dart:math'; - -import 'package:examples/common.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class MasonryPage extends StatefulWidget { - const MasonryPage({ - Key? key, - }) : super(key: key); - - @override - State createState() => _MasonryPageState(); -} - -class _MasonryPageState extends State { - final rnd = Random(); - late List extents; - int crossAxisCount = 4; - - @override - void initState() { - super.initState(); - extents = List.generate(10000, (int index) => rnd.nextInt(5) + 1); - } - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Masonry', - child: MasonryGridView.count( - crossAxisCount: crossAxisCount, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - itemBuilder: (context, index) { - final height = extents[index] * 100; - return ImageTile( - index: index, - width: 100, - height: height, - ); - }, - itemCount: extents.length, - ), - ); - } -} diff --git a/examples/lib/pages/quilted.dart b/examples/lib/pages/quilted.dart deleted file mode 100644 index 00f1ae6..0000000 --- a/examples/lib/pages/quilted.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class QuiltedPage extends StatelessWidget { - const QuiltedPage({ - Key? key, - }) : super(key: key); - - static const pattern = [ - QuiltedGridTile(2, 2), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 2), - ]; - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Quilted', - child: GridView.custom( - gridDelegate: SliverQuiltedGridDelegate( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - repeatPattern: QuiltedGridRepeatPattern.inverted, - pattern: pattern, - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) { - final tile = pattern[index % pattern.length]; - return ImageTile( - index: index, - width: tile.crossAxisCount * 100, - height: tile.mainAxisCount * 100, - ); - }, - ), - ), - ); - } -} diff --git a/examples/lib/pages/staggered.dart b/examples/lib/pages/staggered.dart deleted file mode 100644 index f1a3ba2..0000000 --- a/examples/lib/pages/staggered.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:collection/collection.dart'; -import 'package:examples/common.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class StaggeredPage extends StatelessWidget { - const StaggeredPage({ - Key? key, - }) : super(key: key); - - static const tiles = [ - GridTile(2, 2), - GridTile(2, 1), - GridTile(1, 2), - GridTile(1, 1), - GridTile(2, 2), - GridTile(1, 2), - GridTile(1, 1), - GridTile(3, 1), - GridTile(1, 1), - GridTile(4, 1), - ]; - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Staggered', - child: SingleChildScrollView( - child: StaggeredGrid.count( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - children: [ - ...tiles.mapIndexed((index, tile) { - return StaggeredGridTile.count( - crossAxisCellCount: tile.crossAxisCount, - mainAxisCellCount: tile.mainAxisCount, - child: ImageTile( - index: index, - width: tile.crossAxisCount * 100, - height: tile.mainAxisCount * 100, - ), - ); - }), - ], - ), - ), - ); - } -} - -class GridTile { - const GridTile(this.crossAxisCount, this.mainAxisCount); - final int crossAxisCount; - final int mainAxisCount; -} diff --git a/examples/lib/pages/staired.dart b/examples/lib/pages/staired.dart deleted file mode 100644 index 954ccc8..0000000 --- a/examples/lib/pages/staired.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class StairedPage extends StatelessWidget { - const StairedPage({ - Key? key, - }) : super(key: key); - - static const pattern = [ - StairedGridTile(0.5, 1), - StairedGridTile(0.5, 3 / 4), - StairedGridTile(1.0, 10 / 4), - ]; - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Staired', - child: Directionality( - textDirection: TextDirection.ltr, - child: GridView.custom( - scrollDirection: Axis.vertical, - gridDelegate: SliverStairedGridDelegate( - mainAxisSpacing: 24, - crossAxisSpacing: 48, - startCrossAxisDirectionReversed: true, - pattern: pattern, - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) { - final tile = pattern[index % pattern.length]; - return ImageTile( - index: index, - width: (tile.aspectRatio * 200).ceil(), - height: 200, - ); - }, - ), - ), - ), - ); - } -} diff --git a/examples/lib/pages/woven.dart b/examples/lib/pages/woven.dart deleted file mode 100644 index 72977a8..0000000 --- a/examples/lib/pages/woven.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:examples/common.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class WovenPage extends StatelessWidget { - const WovenPage({ - Key? key, - }) : super(key: key); - - static const pattern = [ - WovenGridTile(1), - WovenGridTile( - 5 / 7, - crossAxisRatio: 0.9, - alignment: AlignmentDirectional.centerEnd, - ), - ]; - - @override - Widget build(BuildContext context) { - return AppScaffold( - title: 'Woven', - child: GridView.custom( - gridDelegate: SliverWovenGridDelegate.count( - crossAxisCount: 2, - mainAxisSpacing: 8, - crossAxisSpacing: 8, - pattern: pattern, - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) { - final tile = pattern[index % pattern.length]; - return ImageTile( - index: index, - width: (200 * tile.aspectRatio).ceil(), - height: 200, - ); - }, - ), - ), - ); - } -} diff --git a/examples/macos/.gitignore b/examples/macos/.gitignore deleted file mode 100644 index 746adbb..0000000 --- a/examples/macos/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Flutter-related -**/Flutter/ephemeral/ -**/Pods/ - -# Xcode-related -**/dgph -**/xcuserdata/ diff --git a/examples/macos/Runner.xcodeproj/project.pbxproj b/examples/macos/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index e4f2b72..0000000 --- a/examples/macos/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,572 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 51; - 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 /* examples.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "examples.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 /* examples.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 /* examples.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 33CC10E52044A3C60003C045 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 0930; - 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; - 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.11; - 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.11; - 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.11; - 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/examples/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/examples/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index d26641c..0000000 --- a/examples/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/macos/Runner.xcworkspace/contents.xcworkspacedata b/examples/macos/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a1..0000000 --- a/examples/macos/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/examples/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/examples/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/macos/Runner/AppDelegate.swift b/examples/macos/Runner/AppDelegate.swift deleted file mode 100644 index d53ef64..0000000 --- a/examples/macos/Runner/AppDelegate.swift +++ /dev/null @@ -1,9 +0,0 @@ -import Cocoa -import FlutterMacOS - -@NSApplicationMain -class AppDelegate: FlutterAppDelegate { - override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { - return true - } -} diff --git a/examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index a2ec33f..0000000 --- a/examples/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/examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png deleted file mode 100644 index 3c4935a7ca84f0976aca34b7f2895d65fb94d1ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46993 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 diff --git a/examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png deleted file mode 100644 index ed4cc16421680a50164ba74381b4b35ceaa0ccfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3276 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 N;OXk;vd$@?2>?>Ex^Vyi diff --git a/examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png deleted file mode 100644 index bcbf36df2f2aaaa0a63c7dabc94e600184229d0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5933 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 f$KZHO*s&vt|9^w-6P?|#0pRK8NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifbFy+6aSK)V_AxLppYn8Z42d|rc6w}vOsL55 z`t&mC&y2@JTEyg!eDiFX^k#CC!jq%>erB=yHqUP0XcDOTw6ko}L zX;EmMrq(fKk*eygEuA616;0)>@A{TK|55PV@70 z$OfzS*(VJxQev3J?yY?O=ul(v`fp}?u9z`JK3ugibK>)DyCwImZOF4d{xK%%Ks1*} zv$oa)9anR%lXIBUqYnhLmT>VOzHfNP?ZwJNZ!5$s9M08RynIvaXw>@G^T9@r9^KH1 zVy??F&uuk)bH9Y4pQY!hP58i_H6 znl-NcuCpLV6ZWU;4C zu@9exF&OZi`Bovq_m%T+WhU2kvkz@^_LpycBvqm3bMpLw8X-Or5sL>0AKE1$(k_L=_Zc=CUq#=x1-QZf)G7nHu@fmsQ1eN_N3+nTEz`4HI4Z6uVlE zJH+X&det8JU?tO?upcM4Z=cV!JV;yF>FfL5Q$M|W_2Z!P`S=}Wzp|_1^#d%e?_H`> zV@%vA$+bFVqhw9`U;TfP|5|PD{||OiYdor8P*i??|NJcb%kzT_73*7WE?Ua5hAnR2 z=7WE=PhTlJ#ZeRznjTUb;`E(wkMZrj4e|Hilz-mK>9cZHQY**5TUPw~u}k;u73KI}xAx!0m-)GVia|x^d3p~s_9gh83jA&Ra<8rM%`>U3x69t&NzbwWY}7Ar?)FK#IZ0z|d0H0EkRO w3{9;}4Xg|ebq&m|3=9_N6z8I7$jwj5OsmAL;bP(Gi$Dzwp00i_>zopr02+f8CIA2c diff --git a/examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/examples/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png deleted file mode 100644 index e71a726136a47ed24125c7efc79d68a4a01961b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14800 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/macos/Runner/Configs/AppInfo.xcconfig b/examples/macos/Runner/Configs/AppInfo.xcconfig deleted file mode 100644 index a2bc27f..0000000 --- a/examples/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 = examples - -// The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.example.examples - -// The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2021 com.example. All rights reserved. diff --git a/examples/macos/Runner/Configs/Debug.xcconfig b/examples/macos/Runner/Configs/Debug.xcconfig deleted file mode 100644 index 36b0fd9..0000000 --- a/examples/macos/Runner/Configs/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "../../Flutter/Flutter-Debug.xcconfig" -#include "Warnings.xcconfig" diff --git a/examples/macos/Runner/Configs/Release.xcconfig b/examples/macos/Runner/Configs/Release.xcconfig deleted file mode 100644 index dff4f49..0000000 --- a/examples/macos/Runner/Configs/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "../../Flutter/Flutter-Release.xcconfig" -#include "Warnings.xcconfig" diff --git a/examples/macos/Runner/Configs/Warnings.xcconfig b/examples/macos/Runner/Configs/Warnings.xcconfig deleted file mode 100644 index 42bcbf4..0000000 --- a/examples/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/examples/macos/Runner/DebugProfile.entitlements b/examples/macos/Runner/DebugProfile.entitlements deleted file mode 100644 index 08c3ab1..0000000 --- a/examples/macos/Runner/DebugProfile.entitlements +++ /dev/null @@ -1,14 +0,0 @@ - - - - - com.apple.security.app-sandbox - - com.apple.security.cs.allow-jit - - com.apple.security.network.server - - com.apple.security.network.client - - - diff --git a/examples/macos/Runner/Info.plist b/examples/macos/Runner/Info.plist deleted file mode 100644 index 4789daa..0000000 --- a/examples/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/examples/macos/Runner/MainFlutterWindow.swift b/examples/macos/Runner/MainFlutterWindow.swift deleted file mode 100644 index 2722837..0000000 --- a/examples/macos/Runner/MainFlutterWindow.swift +++ /dev/null @@ -1,15 +0,0 @@ -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/examples/macos/Runner/Release.entitlements b/examples/macos/Runner/Release.entitlements deleted file mode 100644 index ee95ab7..0000000 --- a/examples/macos/Runner/Release.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - com.apple.security.app-sandbox - - com.apple.security.network.client - - - diff --git a/examples/pubspec.yaml b/examples/pubspec.yaml deleted file mode 100644 index e898104..0000000 --- a/examples/pubspec.yaml +++ /dev/null @@ -1,24 +0,0 @@ -name: examples -description: A new Flutter project. -publish_to: 'none' -version: 1.0.0+1 - -environment: - sdk: ">=2.12.0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - cupertino_icons: ^1.0.2 - flutter_lints: any - flutter_staggered_grid_view: - path: ../ - -dev_dependencies: - flutter_test: - sdk: flutter - -flutter: - assets: - - assets/ - uses-material-design: true \ No newline at end of file diff --git a/examples/web/favicon.png b/examples/web/favicon.png deleted file mode 100644 index 8aaa46ac1ae21512746f852a42ba87e4165dfdd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM diff --git a/examples/web/icons/Icon-192.png b/examples/web/icons/Icon-192.png deleted file mode 100644 index b749bfef07473333cf1dd31e9eed89862a5d52aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5292 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 diff --git a/examples/web/icons/Icon-512.png b/examples/web/icons/Icon-512.png deleted file mode 100644 index 88cfd48dff1169879ba46840804b412fe02fefd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8252 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 diff --git a/examples/web/icons/Icon-maskable-192.png b/examples/web/icons/Icon-maskable-192.png deleted file mode 100644 index eb9b4d76e525556d5d89141648c724331630325d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! diff --git a/examples/web/icons/Icon-maskable-512.png b/examples/web/icons/Icon-maskable-512.png deleted file mode 100644 index d69c56691fbdb0b7efa65097c7cc1edac12a6d3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20998 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 MPgg&ebxsLQ025IeI{*Lx diff --git a/examples/web/index.html b/examples/web/index.html deleted file mode 100644 index e55fc68..0000000 --- a/examples/web/index.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - examples - - - - - - - diff --git a/examples/web/manifest.json b/examples/web/manifest.json deleted file mode 100644 index 666919b..0000000 --- a/examples/web/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "examples", - "short_name": "examples", - "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/lib/flutter_staggered_grid_view.dart b/lib/flutter_staggered_grid_view.dart index 924f0d3..0923f7b 100644 --- a/lib/flutter_staggered_grid_view.dart +++ b/lib/flutter_staggered_grid_view.dart @@ -1,13 +1,8 @@ library flutter_staggered_grid_view; -export 'src/layouts/quilted.dart'; -export 'src/layouts/staired.dart'; -export 'src/layouts/woven.dart'; export 'src/rendering/sliver_masonry_grid.dart'; export 'src/rendering/sliver_simple_grid_delegate.dart'; -export 'src/widgets/aligned_grid_view.dart'; export 'src/widgets/masonry_grid_view.dart'; -export 'src/widgets/sliver_aligned_grid.dart'; export 'src/widgets/sliver_masonry_grid.dart'; export 'src/widgets/staggered_grid.dart'; export 'src/widgets/staggered_grid_tile.dart'; diff --git a/lib/src/layouts/quilted.dart b/lib/src/layouts/quilted.dart deleted file mode 100644 index b3f9cdc..0000000 --- a/lib/src/layouts/quilted.dart +++ /dev/null @@ -1,448 +0,0 @@ -import 'dart:math' as math; - -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter_staggered_grid_view/src/foundation/extensions.dart'; - -/// A tile for [SliverQuiltedGridDelegate]. -@immutable -class QuiltedGridTile { - /// Create a [QuiltedGridTile]. - const QuiltedGridTile( - this.mainAxisCount, - this.crossAxisCount, - ) : assert(mainAxisCount > 0), - assert(crossAxisCount > 0); - - /// The number of cells that tile takes in the main axis. - final int mainAxisCount; - - /// The number of cells that tile takes in the cross axis. - final int crossAxisCount; - - @override - String toString() { - return 'QuiltedGridTile($mainAxisCount, $crossAxisCount)'; - } -} - -/// Controls the layout of a quilted grid. -class SliverQuiltedGridDelegate extends SliverGridDelegate { - /// Creates a [SliverQuiltedGridDelegate]. - SliverQuiltedGridDelegate({ - required this.crossAxisCount, - required List pattern, - this.repeatPattern = QuiltedGridRepeatPattern.same, - this.mainAxisSpacing = 0, - this.crossAxisSpacing = 0, - }) : assert(crossAxisCount > 0), - assert(mainAxisSpacing >= 0), - assert(crossAxisSpacing >= 0), - assert(pattern.isNotEmpty), - _pattern = pattern.toPattern(crossAxisCount, repeatPattern); - - /// {@macro fsgv.global.crossAxisCount} - final int crossAxisCount; - - /// Describes how the pattern is repeating. - /// - /// The default value is [QuiltedGridRepeatPattern.same]. - final QuiltedGridRepeatPattern repeatPattern; - - /// {@macro fsgv.global.mainAxisSpacing} - final double mainAxisSpacing; - - /// {@macro fsgv.global.crossAxisSpacing} - final double crossAxisSpacing; - - final _QuiltedTilePattern _pattern; - - @override - _SliverQuiltedGridLayout getLayout(SliverConstraints constraints) { - final crossAxisExtent = constraints.crossAxisExtent; - final cellExtent = (crossAxisExtent + crossAxisSpacing) / crossAxisCount - - crossAxisSpacing; - return _SliverQuiltedGridLayout( - cellExtent: cellExtent, - crossAxisExtent: crossAxisExtent, - crossAxisSpacing: crossAxisSpacing, - mainAxisSpacing: mainAxisSpacing, - pattern: _pattern, - reverseCrossAxis: axisDirectionIsReversed(constraints.crossAxisDirection), - ); - } - - @override - bool shouldRelayout(SliverQuiltedGridDelegate oldDelegate) { - return oldDelegate.crossAxisCount != crossAxisCount || - oldDelegate.mainAxisSpacing != mainAxisSpacing || - oldDelegate.crossAxisSpacing != crossAxisSpacing; - } -} - -class _QuiltedTilePattern { - const _QuiltedTilePattern({ - required this.tiles, - required this.crossAxisIndexes, - required this.mainAxisIndexes, - required this.maxMainAxisCellCounts, - required this.minTileIndexes, - required this.maxTileIndexes, - required this.mainAxisCellCount, - }) : tileCount = tiles.length; - - final List tiles; - final int tileCount; - final List crossAxisIndexes; - final List mainAxisIndexes; - final List maxMainAxisCellCounts; - final List minTileIndexes; - final List maxTileIndexes; - final int mainAxisCellCount; - - /// Gets the cross axis index of the tile at the given [index]. - int crossAxisIndexOf(int index) { - return crossAxisIndexes[index % tileCount]; - } - - /// Gets the main axis index of the tile at the given [index]. - int mainAxisIndexOf(int index) { - return mainAxisIndexes[index % tileCount]; - } - - /// Gets the number of cells in the main axis to fully displayed all the tiles - /// of this pattern if we want to display [count] tiles. - int maxMainAxisCellCountOf(int count) { - return maxMainAxisCellCounts[count % tileCount]; - } - - int getMinTileIndexForMainAxisIndex(int mainAxisIndex) { - return minTileIndexes[mainAxisIndex % mainAxisCellCount]; - } - - int getMaxTileIndexForMainAxisIndex(int mainAxisIndex) { - return maxTileIndexes[mainAxisIndex % mainAxisCellCount]; - } - - QuiltedGridTile tileOf(int index) { - return tiles[index % tileCount]; - } -} - -/// Layout that looks like the Quilted image list in -/// https://material.io/components/image-lists. -class _SliverQuiltedGridLayout extends SliverGridLayout { - const _SliverQuiltedGridLayout({ - required double cellExtent, - required this.crossAxisExtent, - required this.mainAxisSpacing, - required this.crossAxisSpacing, - required this.pattern, - required this.reverseCrossAxis, - }) : assert(cellExtent > 0), - assert(mainAxisSpacing >= 0), - assert(crossAxisSpacing >= 0), - mainAxisStride = cellExtent + mainAxisSpacing, - crossAxisStride = cellExtent + crossAxisSpacing; - - final double crossAxisExtent; - - /// {@macro fsgv.global.mainAxisSpacing} - final double mainAxisSpacing; - - /// {@macro fsgv.global.crossAxisSpacing} - final double crossAxisSpacing; - - final double mainAxisStride; - - final double crossAxisStride; - - final _QuiltedTilePattern pattern; - - /// Whether the children should be placed in the opposite order of increasing - /// coordinates in the cross axis. - /// - /// For example, if the cross axis is horizontal, the children are placed from - /// left to right when [reverseCrossAxis] is false and from right to left when - /// [reverseCrossAxis] is true. - /// - /// Typically set to the return value of [axisDirectionIsReversed] applied to - /// the [SliverConstraints.crossAxisDirection]. - final bool reverseCrossAxis; - - @override - double computeMaxScrollOffset(int childCount) { - // First we compute the number cells occupied in the main axis by the filled - // patterns. - - if (childCount == 0) { - return 0; - } - - final mainAxisCellCountBeforeLastPattern = - (childCount ~/ pattern.tileCount) * pattern.mainAxisCellCount; - - final remainingChildCount = childCount % pattern.tileCount; - - // Then we get the number of main axis cells in the last pattern. - final remainingMainAxisCellCount = remainingChildCount == 0 - ? 0 - : pattern.maxMainAxisCellCountOf(remainingChildCount - 1); - - // We compute the total number of cells in the main axis. - final nbCellsInMainAxis = - mainAxisCellCountBeforeLastPattern + remainingMainAxisCellCount; - - return nbCellsInMainAxis * mainAxisStride - mainAxisSpacing; - } - - @override - SliverGridGeometry getGeometryForChildIndex(int index) { - // First we compute the number cells occupied in the main axis by the filled - // patterns. - final mainAxisCellCountBeforeLastPattern = - (index ~/ pattern.tileCount) * pattern.mainAxisCellCount; - final mainAxisIndex = - mainAxisCellCountBeforeLastPattern + pattern.mainAxisIndexOf(index); - final crossAxisIndex = pattern.crossAxisIndexOf(index); - final tile = pattern.tileOf(index); - - final crossAxisExtent = - tile.crossAxisCount * crossAxisStride - crossAxisSpacing; - - return SliverGridGeometry( - scrollOffset: mainAxisIndex * mainAxisStride, - crossAxisOffset: _getOffsetFromStartInCrossAxis( - crossAxisIndex * crossAxisStride, - crossAxisExtent, - ), - mainAxisExtent: tile.mainAxisCount * mainAxisStride - mainAxisSpacing, - crossAxisExtent: crossAxisExtent, - ); - } - - double _getOffsetFromStartInCrossAxis( - double crossAxisStart, - double childCrossAxisExtent, - ) { - if (reverseCrossAxis) - return crossAxisExtent - crossAxisStart - childCrossAxisExtent; - return crossAxisStart; - } - - @override - int getMinChildIndexForScrollOffset(double scrollOffset) { - final mainAxisIndex = (scrollOffset ~/ mainAxisStride); - final a = (mainAxisIndex ~/ pattern.mainAxisCellCount) * pattern.tileCount; - final result = a + pattern.getMinTileIndexForMainAxisIndex(mainAxisIndex); - return result; - } - - @override - int getMaxChildIndexForScrollOffset(double scrollOffset) { - final mainAxisIndex = (scrollOffset ~/ mainAxisStride); - final a = (mainAxisIndex ~/ pattern.mainAxisCellCount) * pattern.tileCount; - final result = a + pattern.getMaxTileIndexForMainAxisIndex(mainAxisIndex); - return result; - } -} - -/// Defines how a pattern is repeating. -abstract class QuiltedGridRepeatPattern { - /// Abstract const constructor. This constructor enables subclasses to provide - /// const constructors so that they can be used in const expressions. - const QuiltedGridRepeatPattern(); - - /// The same pattern is repeating over and over. - static const QuiltedGridRepeatPattern same = _QuiltedGridRepeatSamePattern(); - - /// Every two blocks, the pattern is inverted (by central inversion). - /// - /// For example, the following pattern: - /// - /// A A C D - /// A A E E - /// - /// Will be inverted to: - /// - /// E E A A - /// D C A A - static const QuiltedGridRepeatPattern inverted = - _QuiltedGridRepeatInvertedPattern(); - - /// Every two blocks, the pattern is mirrored (by axial symmetry). - /// - /// For example, the following pattern: - /// - /// A A C D - /// A A E E - /// - /// Will be mirrored to: - /// - /// A A E E - /// A A C D - static const QuiltedGridRepeatPattern mirrored = - _QuiltedGridRepeatMirroredPattern(); - - /// Returns the indexes in the repeating pattern order. - List repeatedIndexes(List indexes, int crossAxisCount); - - /// Returns the number of tiles in the repeating pattern. - int repeatedTileCount(int tileCount); -} - -class _QuiltedGridRepeatSamePattern extends QuiltedGridRepeatPattern { - const _QuiltedGridRepeatSamePattern(); - - @override - List repeatedIndexes(List indexes, int crossAxisCount) { - return []; - } - - @override - int repeatedTileCount(int tileCount) => 0; -} - -class _QuiltedGridRepeatInvertedPattern extends QuiltedGridRepeatPattern { - const _QuiltedGridRepeatInvertedPattern(); - - @override - List repeatedIndexes(List indexes, int crossAxisCount) { - // We iterate through the indexes in reverse order to get the index of the - // tiles in inversed order. - final result = []; - final added = {}; - for (int i = indexes.length - 1; i >= 0; i--) { - final index = indexes[i]; - if (index != -1 && !added.contains(index)) { - result.add(index); - added.add(index); - } - } - - return result; - } - - @override - int repeatedTileCount(int tileCount) => tileCount; -} - -class _QuiltedGridRepeatMirroredPattern extends QuiltedGridRepeatPattern { - const _QuiltedGridRepeatMirroredPattern(); - - @override - List repeatedIndexes(List indexes, int crossAxisCount) { - // We iterate through the indexes in reverse order to get the index of the - // tiles in inversed order. - final result = []; - final added = {}; - - final mainAxisCount = indexes.length ~/ crossAxisCount; - - for (int i = mainAxisCount - 1; i >= 0; i--) { - for (int j = 0; j < crossAxisCount; j++) { - final index = indexes[i * crossAxisCount + j]; - if (index != -1 && !added.contains(index)) { - result.add(index); - added.add(index); - } - } - } - - return result; - } - - @override - int repeatedTileCount(int tileCount) => tileCount; -} - -extension on List { - _QuiltedTilePattern toPattern( - int crossAxisCount, - QuiltedGridRepeatPattern repeatPattern, - ) { - final tileCount = length + repeatPattern.repeatedTileCount(length); - final minTileIndexes = []; - final maxTileIndexes = []; - final maxMainAxisCellCounts = List.filled(tileCount, 0); - final mainAxisIndexes = List.filled(tileCount, 0); - final crossAxisIndexes = List.filled(tileCount, 0); - // The index of the tile occupied by each cell. - final indexes = {}; - - final offsets = List.generate(crossAxisCount, (index) => 0); - void position( - List tiles, - Map? indexes, - int start, - ) { - for (int i = 0; i < tiles.length; i++) { - final tile = tiles[i]; - final fullIndex = start + i; - final crossAxisIndex = offsets.findSmallestIndexWithMinimumValue(); - final mainAxisIndex = offsets[crossAxisIndex]; - mainAxisIndexes[fullIndex] = mainAxisIndex; - crossAxisIndexes[fullIndex] = crossAxisIndex; - - // We update the offsets. - final tileCrossAxisCount = tile.crossAxisCount; - final tileMainAxisCount = tile.mainAxisCount; - for (int j = 0; j < tileCrossAxisCount; j++) { - offsets[crossAxisIndex + j] += tileMainAxisCount; - - if (indexes != null) { - for (int k = 0; k < tileMainAxisCount; k++) { - final cellIndex = - (crossAxisIndex + j) + (mainAxisIndex + k) * crossAxisCount; - indexes[cellIndex] = i; - } - } - } - - // We update the min and max tile indexes. - for (int j = 0; j < tileMainAxisCount; j++) { - final index = mainAxisIndex + j; - if (minTileIndexes.length == index) { - minTileIndexes.add(fullIndex); - } else { - minTileIndexes[index] = math.min(minTileIndexes[index], fullIndex); - } - if (maxTileIndexes.length == index) { - maxTileIndexes.add(fullIndex); - } else { - maxTileIndexes[index] = math.max(maxTileIndexes[index], fullIndex); - } - } - - maxMainAxisCellCounts[fullIndex] = offsets.reduce(math.max); - } - } - - position(this, indexes, 0); - final indexList = List.filled(indexes.length, -1); - for (final index in indexes.keys) { - indexList[index] = indexes[index]!; - } - final repeatedIndexes = repeatPattern.repeatedIndexes( - indexList, - crossAxisCount, - ); - final tiles = toList(); - if (repeatedIndexes.isNotEmpty) { - final repeatedTiles = - repeatedIndexes.map((index) => this[index]).toList(); - position(repeatedTiles, null, length); - tiles.addAll(repeatedTiles); - } - - return _QuiltedTilePattern( - tiles: tiles, - mainAxisIndexes: mainAxisIndexes, - crossAxisIndexes: crossAxisIndexes, - maxMainAxisCellCounts: maxMainAxisCellCounts, - minTileIndexes: minTileIndexes, - maxTileIndexes: maxTileIndexes, - mainAxisCellCount: offsets.reduce(math.max), - ); - } -} diff --git a/lib/src/layouts/sliver_patterned_grid_delegate.dart b/lib/src/layouts/sliver_patterned_grid_delegate.dart deleted file mode 100644 index d3a9fd4..0000000 --- a/lib/src/layouts/sliver_patterned_grid_delegate.dart +++ /dev/null @@ -1,223 +0,0 @@ -import 'dart:math' as math; - -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; - -/// Represents the geometries of each tile of a pattern. -@immutable -class SliverPatternGridGeometries { - /// Creates a [SliverPatternGridGeometries]. - const SliverPatternGridGeometries({ - required this.tiles, - required this.bounds, - }) : assert(tiles.length == bounds.length); - - /// The visible geometries of each tile. - final List tiles; - - /// The available space of each tile. - final List bounds; -} - -/// Controls the layout of a grid which layout a pattern over and over. -abstract class SliverPatternGridDelegate extends SliverGridDelegate { - const SliverPatternGridDelegate._({ - required this.pattern, - this.mainAxisSpacing = 0, - this.crossAxisSpacing = 0, - this.crossAxisCount, - this.maxCrossAxisExtent, - }) : assert(mainAxisSpacing >= 0), - assert(crossAxisSpacing >= 0), - assert(crossAxisCount == null || crossAxisCount > 0), - assert(maxCrossAxisExtent == null || maxCrossAxisExtent > 0), - assert(crossAxisCount != null || maxCrossAxisExtent != null), - tileCount = pattern.length; - - /// Creates a [SliverPatternGridDelegate] with a [crossAxisCount]. - const SliverPatternGridDelegate.count({ - required List pattern, - required int crossAxisCount, - double mainAxisSpacing = 0, - double crossAxisSpacing = 0, - }) : this._( - pattern: pattern, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - crossAxisCount: crossAxisCount, - ); - - /// Creates a [SliverPatternGridDelegate] with a [maxCrossAxisExtent]. - const SliverPatternGridDelegate.extent({ - required List pattern, - required double maxCrossAxisExtent, - double mainAxisSpacing = 0, - double crossAxisSpacing = 0, - }) : this._( - pattern: pattern, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - maxCrossAxisExtent: maxCrossAxisExtent, - ); - - /// {@macro fsgv.global.mainAxisSpacing} - final double mainAxisSpacing; - - /// {@macro fsgv.global.crossAxisSpacing} - final double crossAxisSpacing; - - /// The tiles representing the pattern to be repeated. - final List pattern; - - /// The number of tiles in the pattern. - final int tileCount; - - /// {@macro fsgv.global.crossAxisCount} - final int? crossAxisCount; - - /// {@macro fsgv.global.maxCrossAxisExtent} - final double? maxCrossAxisExtent; - - /// Returns the geometries of each tiles in the pattern. - @protected - SliverPatternGridGeometries getGeometries( - SliverConstraints constraints, - int crossAxisCount, - ); - - @override - _SliverPatternGridLayout getLayout(SliverConstraints constraints) { - final crossAxisCount = this.crossAxisCount ?? - (constraints.crossAxisExtent / (maxCrossAxisExtent! + crossAxisSpacing)) - .ceil(); - final geometries = getGeometries(constraints, crossAxisCount); - return _SliverPatternGridLayout( - mainAxisSpacing: mainAxisSpacing, - crossAxisExtent: constraints.crossAxisExtent, - reverseCrossAxis: axisDirectionIsReversed(constraints.crossAxisDirection), - tiles: geometries.tiles, - bounds: geometries.bounds, - ); - } - - @override - bool shouldRelayout(SliverPatternGridDelegate oldDelegate) { - return oldDelegate.pattern != pattern || - oldDelegate.mainAxisSpacing != mainAxisSpacing || - oldDelegate.crossAxisSpacing != crossAxisSpacing; - } -} - -class _SliverPatternGridLayout extends SliverGridLayout { - _SliverPatternGridLayout({ - required this.mainAxisSpacing, - required this.tiles, - required this.bounds, - required this.crossAxisExtent, - this.reverseCrossAxis = false, - }) : tileCount = tiles.length, - patternMainAxisExtent = - bounds.last.trailingScrollOffset + mainAxisSpacing; - - final double mainAxisSpacing; - final double crossAxisExtent; - final bool reverseCrossAxis; - final List tiles; - final List bounds; - final int tileCount; - final double patternMainAxisExtent; - - @override - double computeMaxScrollOffset(int childCount) { - if (childCount == 0) { - return 0; - } - - final lastFilledPatternTrailingScrollOffset = - (childCount ~/ tileCount) * patternMainAxisExtent; - - if (childCount % tileCount == 0) { - return lastFilledPatternTrailingScrollOffset - mainAxisSpacing; - } - - // We have to get the max scroll offset for the track where the tile with - // index, childCount - 1, is. - // TODO(romain): Can be optimized. - final maxIndex = (childCount - 1) % tileCount; - final maxRemainingScrollOffset = tiles - .take(maxIndex + 1) - .map((x) => x.trailingScrollOffset) - .reduce(math.max); - return lastFilledPatternTrailingScrollOffset + maxRemainingScrollOffset; - } - - @override - SliverGridGeometry getGeometryForChildIndex(int index) { - final startMainAxisOffset = (index ~/ tileCount) * patternMainAxisExtent; - final rect = tileRectAt(index); - final realRect = rect.translate(startMainAxisOffset); - - if (reverseCrossAxis) { - return SliverGridGeometry( - scrollOffset: realRect.scrollOffset, - crossAxisOffset: crossAxisExtent - - realRect.crossAxisOffset - - realRect.crossAxisExtent, - mainAxisExtent: realRect.mainAxisExtent, - crossAxisExtent: realRect.crossAxisExtent, - ); - } - - return realRect; - } - - @override - int getMinChildIndexForScrollOffset(double scrollOffset) { - final patternCount = (scrollOffset ~/ patternMainAxisExtent); - final mainAxisOffset = scrollOffset - patternCount * patternMainAxisExtent; - for (int i = 0; i < tileCount; i++) { - if (_isRectVisibleAtMainAxisOffset(bounds[i], mainAxisOffset)) { - return i + patternCount * tileCount; - } - } - - return 0; - } - - @override - int getMaxChildIndexForScrollOffset(double scrollOffset) { - final patternCount = (scrollOffset ~/ patternMainAxisExtent); - - final mainAxisOffset = scrollOffset - patternCount * patternMainAxisExtent; - for (int i = tileCount - 1; i >= 0; i--) { - if (_isRectVisibleAtMainAxisOffset(bounds[i], mainAxisOffset)) { - return i + patternCount * tileCount; - } - } - - return 0; - } - - bool _isRectVisibleAtMainAxisOffset( - SliverGridGeometry rect, - double mainAxisOffset, - ) { - return rect.scrollOffset <= mainAxisOffset && - rect.trailingScrollOffset >= (mainAxisOffset - mainAxisSpacing); - } - - SliverGridGeometry tileRectAt(int index) { - return tiles[index % tileCount]; - } -} - -extension on SliverGridGeometry { - SliverGridGeometry translate(double translation) { - return SliverGridGeometry( - scrollOffset: scrollOffset + translation, - crossAxisOffset: crossAxisOffset, - mainAxisExtent: mainAxisExtent, - crossAxisExtent: crossAxisExtent, - ); - } -} diff --git a/lib/src/layouts/staired.dart b/lib/src/layouts/staired.dart deleted file mode 100644 index 97f78d6..0000000 --- a/lib/src/layouts/staired.dart +++ /dev/null @@ -1,141 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter_staggered_grid_view/src/foundation/constants.dart'; -import 'package:flutter_staggered_grid_view/src/layouts/sliver_patterned_grid_delegate.dart'; - -/// A tile of a staired pattern. -@immutable -class StairedGridTile { - /// Creates a [StairedGridTile]. - const StairedGridTile( - this.crossAxisRatio, - this.aspectRatio, - ) : assert(crossAxisRatio > 0 && crossAxisRatio <= 1), - assert(aspectRatio > 0); - - /// The amount of extent this tile is taking in the cross axis, according to - /// the usable cross axis extent. - /// For exemple if [crossAxisRatio] is 0.5, and the usable cross axis extent - /// is 100. The the tile will have a cross axis extent of 50. - /// - /// Must be between 0 and 1. - final double crossAxisRatio; - - /// The ratio of the cross-axis to the main-axis extent of the tile. - /// - /// Must be greater than 0. - final double aspectRatio; - - @override - String toString() { - return 'StairedGridTile($crossAxisRatio, $aspectRatio)'; - } -} - -/// Controls the layout of tiles in a staired grid. -class SliverStairedGridDelegate - extends SliverPatternGridDelegate { - /// Creates a [SliverStairedGridDelegate]. - const SliverStairedGridDelegate({ - required List pattern, - double mainAxisSpacing = 0, - double crossAxisSpacing = 0, - this.tileBottomSpace = 0, - this.startCrossAxisDirectionReversed = false, - }) : assert(tileBottomSpace >= 0), - super.count( - pattern: pattern, - crossAxisCount: 1, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - ); - - /// {@template fsgv.global.tileBottomSpace} - /// The number of logical pixels of the space below each tile. - /// {@endtemplate} - final double tileBottomSpace; - - /// Indicates whether we should start to place the tile in the reverse cross - /// axis direction. - final bool startCrossAxisDirectionReversed; - - @override - SliverPatternGridGeometries getGeometries( - SliverConstraints constraints, - int crossAxisCount, - ) { - final maxCrossAxisExtent = constraints.crossAxisExtent; - final List geometries = List.filled( - pattern.length, - kZeroGeometry, - ); - int i = 0; - double mainAxisOffset = 0; - double crossAxisOffset = - startCrossAxisDirectionReversed ? maxCrossAxisExtent : 0; - bool reversed = startCrossAxisDirectionReversed; - while (i < tileCount) { - int startIndex = i; - double crossAxisRatioSum = 0; - while (crossAxisRatioSum < 1 && i < tileCount) { - crossAxisRatioSum += pattern[i].crossAxisRatio; - i++; - } - if (crossAxisRatioSum > 1) { - // The last ratio is too high. We remove it from this track. - i--; - } - final tileBottomSpaceSum = tileBottomSpace * (i - startIndex); - final isHorizontal = constraints.axis == Axis.horizontal; - final usableCrossAxisExtent = ((startIndex == 0 - ? maxCrossAxisExtent - : maxCrossAxisExtent - crossAxisSpacing) - - (i - startIndex - 1) * crossAxisSpacing - - (i == tileCount ? crossAxisSpacing : 0) - - (isHorizontal ? tileBottomSpaceSum : 0)) - .clamp(0, maxCrossAxisExtent); - - double targetMainAxisOffset = 0; - for (int j = startIndex; j < i; j++) { - final tile = pattern[j]; - final crossAxisExtent = usableCrossAxisExtent * tile.crossAxisRatio + - (isHorizontal ? tileBottomSpace : 0); - final mainAxisExtent = crossAxisExtent / tile.aspectRatio + - (isHorizontal ? 0 : tileBottomSpace); - crossAxisOffset = - reversed ? crossAxisOffset - crossAxisExtent : crossAxisOffset; - final tileRect = SliverGridGeometry( - scrollOffset: mainAxisOffset, - crossAxisOffset: crossAxisOffset, - mainAxisExtent: mainAxisExtent, - crossAxisExtent: crossAxisExtent, - ); - final endMainAxisOffset = mainAxisOffset + mainAxisExtent; - - crossAxisOffset = reversed - ? crossAxisOffset - crossAxisSpacing - : crossAxisOffset + crossAxisExtent + crossAxisSpacing; - mainAxisOffset += mainAxisSpacing; - geometries[j] = tileRect; - if (endMainAxisOffset > targetMainAxisOffset) { - targetMainAxisOffset = endMainAxisOffset; - } - } - - mainAxisOffset = targetMainAxisOffset + mainAxisSpacing; - reversed = !reversed; - crossAxisOffset = - reversed ? maxCrossAxisExtent - crossAxisSpacing : crossAxisSpacing; - } - - return SliverPatternGridGeometries(tiles: geometries, bounds: geometries); - } - - @override - bool shouldRelayout(SliverStairedGridDelegate oldDelegate) { - return super.shouldRelayout(oldDelegate) || - oldDelegate.tileBottomSpace != tileBottomSpace || - oldDelegate.startCrossAxisDirectionReversed != - startCrossAxisDirectionReversed; - } -} diff --git a/lib/src/layouts/woven.dart b/lib/src/layouts/woven.dart deleted file mode 100644 index b55bc45..0000000 --- a/lib/src/layouts/woven.dart +++ /dev/null @@ -1,142 +0,0 @@ -import 'dart:math' as math; - -import 'package:flutter/rendering.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/src/foundation/constants.dart'; -import 'package:flutter_staggered_grid_view/src/layouts/sliver_patterned_grid_delegate.dart'; - -/// A tile of a woven pattern. -@immutable -class WovenGridTile { - /// Creates a [WovenGridTile]. - const WovenGridTile( - this.aspectRatio, { - this.crossAxisRatio = 1, - this.alignment = AlignmentDirectional.center, - }) : assert(aspectRatio > 0), - assert(crossAxisRatio > 0 && crossAxisRatio <= 1); - - /// The ratio of the cross-axis to the main-axis extent of the tile. - /// - /// Must be greater than 0. - final double aspectRatio; - - /// The ratio taken by this tile in the cross-axis. - /// - /// Must be between 0 (exclusive) and 1 (inclusive). - final double crossAxisRatio; - - /// The alignment of the tile within the available space. - final AlignmentDirectional alignment; - - @override - String toString() { - return 'WovenGridTile($aspectRatio${crossAxisRatio > 1 ? ', $crossAxisRatio' : ''}${alignment != AlignmentDirectional.center ? ', $alignment' : ''})'; - } -} - -/// Controls the layout of tiles in a woven grid. -class SliverWovenGridDelegate extends SliverPatternGridDelegate { - /// Creates a [SliverWovenGridDelegate]. - const SliverWovenGridDelegate.count({ - required List pattern, - required int crossAxisCount, - double mainAxisSpacing = 0, - double crossAxisSpacing = 0, - this.tileBottomSpace = 0, - }) : assert(pattern.length <= crossAxisCount), - super.count( - pattern: pattern, - crossAxisCount: crossAxisCount, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - ); - - /// Creates a [SliverWovenGridDelegate]. - const SliverWovenGridDelegate.extent({ - required List pattern, - required double maxCrossAxisExtent, - double mainAxisSpacing = 0, - double crossAxisSpacing = 0, - this.tileBottomSpace = 0, - }) : super.extent( - pattern: pattern, - maxCrossAxisExtent: maxCrossAxisExtent, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - ); - - /// {@macro fsgv.global.tileBottomSpace} - final double tileBottomSpace; - - @override - SliverPatternGridGeometries getGeometries( - SliverConstraints constraints, - int crossAxisCount, - ) { - final isHorizontal = constraints.axis == Axis.horizontal; - final usableCrossAxisExtent = isHorizontal - ? constraints.crossAxisExtent - crossAxisCount * tileBottomSpace - : constraints.crossAxisExtent; - final crossAxisExtent = - (usableCrossAxisExtent + crossAxisSpacing) / crossAxisCount - - crossAxisSpacing; - final crossAxisStride = crossAxisExtent + crossAxisSpacing; - final patternCount = pattern.length; - // The minimum aspect ratio give us the main axis extent of a track. - final maxMainAxisExtentRatio = - pattern.map((t) => t.crossAxisRatio / t.aspectRatio).reduce(math.max); - final mainAxisExtent = crossAxisExtent * maxMainAxisExtentRatio + - (isHorizontal ? 0 : tileBottomSpace); - - // We always provide 2 tracks where the layout follow this pattern: - // A B A || A B A B || A B C || A B C A - // B A B || B A B A || C B A || B A C B - - final count = crossAxisCount * 2; - final tiles = List.filled(count, kZeroGeometry); - final bounds = List.filled(count, kZeroGeometry); - for (int i = 0; i < count; i++) { - final startScrollOffset = - i < crossAxisCount ? 0.0 : mainAxisExtent + mainAxisSpacing; - final tilePatternIndex = i < crossAxisCount - ? i % patternCount - : (count - 1 - (i % crossAxisCount)) % patternCount; - final tilePattern = pattern[tilePatternIndex]; - final tileCrossAxisExtent = crossAxisExtent * tilePattern.crossAxisRatio + - (isHorizontal ? tileBottomSpace : 0); - final tileMainAxisExtent = tileCrossAxisExtent / tilePattern.aspectRatio + - (isHorizontal ? 0 : tileBottomSpace); - final effectiveTextDirection = - i < crossAxisCount ? TextDirection.ltr : TextDirection.rtl; - final effectiveAlignment = - tilePattern.alignment.resolve(effectiveTextDirection); - final rect = effectiveAlignment.inscribe( - Size(tileCrossAxisExtent, tileMainAxisExtent), - Rect.fromLTWH(0, 0, crossAxisExtent, mainAxisExtent), - ); - final startCrossAxisOffset = (i % crossAxisCount) * crossAxisStride; - tiles[i] = SliverGridGeometry( - scrollOffset: startScrollOffset + rect.top, - crossAxisOffset: startCrossAxisOffset + rect.left, - mainAxisExtent: tileMainAxisExtent, - crossAxisExtent: tileCrossAxisExtent, - ); - bounds[i] = SliverGridGeometry( - scrollOffset: startScrollOffset, - crossAxisOffset: startCrossAxisOffset, - mainAxisExtent: mainAxisExtent, - crossAxisExtent: crossAxisExtent, - ); - } - - return SliverPatternGridGeometries(tiles: tiles, bounds: bounds); - } - - @override - bool shouldRelayout(SliverWovenGridDelegate oldDelegate) { - return super.shouldRelayout(oldDelegate) || - oldDelegate.tileBottomSpace != tileBottomSpace || - oldDelegate.crossAxisCount != crossAxisCount; - } -} diff --git a/lib/src/widgets/aligned_grid_view.dart b/lib/src/widgets/aligned_grid_view.dart deleted file mode 100644 index 5ad81aa..0000000 --- a/lib/src/widgets/aligned_grid_view.dart +++ /dev/null @@ -1,283 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_staggered_grid_view/src/rendering/sliver_simple_grid_delegate.dart'; -import 'package:flutter_staggered_grid_view/src/widgets/sliver_aligned_grid.dart'; - -/// A scrollable, 2D array of widgets placed according to the aligned layout. -/// -/// The main axis direction of a grid is the direction in which it scrolls (the -/// [scrollDirection]). -/// -/// The most commonly used grid layouts are [AlignedGridView.count], which -/// creates a layout with a fixed number of tiles in the cross axis, and -/// [AlignedGridView.extent], which creates a layout with tiles that have a -/// maximum cross-axis extent. A custom [SliverSimpleGridDelegate] can produce -/// an arbitrary 2D arrangement of children. -/// -/// To create a linear array of children, use a [ListView]. -/// -/// To control the initial scroll offset of the scroll view, provide a -/// [controller] with its [ScrollController.initialScrollOffset] property set. -/// -/// ## Transitioning to [CustomScrollView] -/// -/// A [AlignedGridView] is basically a [CustomScrollView] with a single -/// [SliverAlignedGrid] in its [CustomScrollView.slivers] property. -/// -/// If [AlignedGridView] is no longer sufficient, for example because the scroll -/// view is to have both a grid and a list, or because the grid is to be -/// combined with a [SliverAppBar], etc, it is straight-forward to port code -/// from using [AlignedGridView] to using [CustomScrollView] directly. -/// -/// The [key], [scrollDirection], [reverse], [controller], [primary], [physics], -/// and [shrinkWrap] properties on [AlignedGridView] map directly to the -/// identically named properties on [CustomScrollView]. -/// -/// The [CustomScrollView.slivers] property should be a list containing just a -/// [SliverAlignedGrid]. -/// -/// The [AlignedGridView.count] and [AlignedGridView.extent] constructors create -/// custom grid delegates, and have equivalently named constructors on -/// [SliverAlignedGrid] to ease the transition: [SliverAlignedGrid.count] and -/// [SliverAlignedGrid.extent] respectively. -/// -/// The [padding] property corresponds to having a [SliverPadding] in the -/// [CustomScrollView.slivers] property instead of the grid itself, and having -/// the [SliverGrid] instead be a child of the [SliverPadding]. -/// -/// Once code has been ported to use [CustomScrollView], other slivers, such as -/// [SliverList] or [SliverAppBar], can be put in the [CustomScrollView.slivers] -/// list. -/// -/// By default, [AlignedGridView] will automatically pad the limits of the -/// grids's scrollable to avoid partial obstructions indicated by -/// [MediaQuery]'s padding. To avoid this behavior, override with a -/// zero [padding] property. -class AlignedGridView extends BoxScrollView { - /// Creates a scrollable, 2D array of widgets with both a custom - /// [SliverSimpleGridDelegate]. - const AlignedGridView.custom({ - Key? key, - Axis scrollDirection = Axis.vertical, - bool reverse = false, - ScrollController? controller, - bool? primary, - ScrollPhysics? physics, - bool shrinkWrap = false, - EdgeInsetsGeometry? padding, - required this.gridDelegate, - required this.itemBuilder, - this.itemCount, - this.addAutomaticKeepAlives = true, - this.addRepaintBoundaries = true, - this.mainAxisSpacing = 0.0, - this.crossAxisSpacing = 0.0, - double? cacheExtent, - int? semanticChildCount, - DragStartBehavior dragStartBehavior = DragStartBehavior.start, - ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = - ScrollViewKeyboardDismissBehavior.manual, - String? restorationId, - Clip clipBehavior = Clip.hardEdge, - }) : super( - key: key, - scrollDirection: scrollDirection, - reverse: reverse, - controller: controller, - primary: primary, - physics: physics, - shrinkWrap: shrinkWrap, - padding: padding, - cacheExtent: cacheExtent, - semanticChildCount: semanticChildCount, - dragStartBehavior: dragStartBehavior, - keyboardDismissBehavior: keyboardDismissBehavior, - restorationId: restorationId, - clipBehavior: clipBehavior, - ); - - /// Creates a scrollable, 2D array of widgets with a fixed number of tiles in - /// the cross axis. - /// - /// Uses a [SliverSimpleGridDelegateWithFixedCrossAxisCount] as the - /// [gridDelegate]. - /// - /// The `addAutomaticKeepAlives` argument corresponds to the - /// [SliverChildListDelegate.addAutomaticKeepAlives] property. The - /// `addRepaintBoundaries` argument corresponds to the - /// [SliverChildListDelegate.addRepaintBoundaries] property. - /// - /// See also: - /// - /// * [SliverAlignedGrid.count], the equivalent constructor for - /// [SliverAlignedGrid]. - AlignedGridView.count({ - Key? key, - Axis scrollDirection = Axis.vertical, - bool reverse = false, - ScrollController? controller, - bool? primary, - ScrollPhysics? physics, - bool shrinkWrap = false, - EdgeInsetsGeometry? padding, - required int crossAxisCount, - this.mainAxisSpacing = 0.0, - this.crossAxisSpacing = 0.0, - required this.itemBuilder, - this.itemCount, - this.addAutomaticKeepAlives = true, - this.addRepaintBoundaries = true, - double? cacheExtent, - int? semanticChildCount, - DragStartBehavior dragStartBehavior = DragStartBehavior.start, - ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = - ScrollViewKeyboardDismissBehavior.manual, - String? restorationId, - Clip clipBehavior = Clip.hardEdge, - }) : gridDelegate = SliverSimpleGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, - ), - super( - key: key, - scrollDirection: scrollDirection, - reverse: reverse, - controller: controller, - primary: primary, - physics: physics, - shrinkWrap: shrinkWrap, - padding: padding, - cacheExtent: cacheExtent, - semanticChildCount: semanticChildCount ?? itemCount, - dragStartBehavior: dragStartBehavior, - keyboardDismissBehavior: keyboardDismissBehavior, - restorationId: restorationId, - clipBehavior: clipBehavior, - ); - - /// Creates a scrollable, 2D array of widgets with tiles that each have a - /// maximum cross-axis extent. - /// - /// Uses a [SliverSimpleGridDelegateWithMaxCrossAxisExtent] as the - /// [gridDelegate]. - /// - /// The `addAutomaticKeepAlives` argument corresponds to the - /// [SliverChildListDelegate.addAutomaticKeepAlives] property. The - /// `addRepaintBoundaries` argument corresponds to the - /// [SliverChildListDelegate.addRepaintBoundaries] property. - /// - /// See also: - /// - /// * [SliverAlignedGrid.extent], the equivalent constructor for - /// [SliverAlignedGrid]. - AlignedGridView.extent({ - Key? key, - Axis scrollDirection = Axis.vertical, - bool reverse = false, - ScrollController? controller, - bool? primary, - ScrollPhysics? physics, - bool shrinkWrap = false, - EdgeInsetsGeometry? padding, - required double maxCrossAxisExtent, - this.mainAxisSpacing = 0.0, - this.crossAxisSpacing = 0.0, - required this.itemBuilder, - this.itemCount, - this.addAutomaticKeepAlives = true, - this.addRepaintBoundaries = true, - double? cacheExtent, - int? semanticChildCount, - DragStartBehavior dragStartBehavior = DragStartBehavior.start, - ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = - ScrollViewKeyboardDismissBehavior.manual, - String? restorationId, - Clip clipBehavior = Clip.hardEdge, - }) : gridDelegate = SliverSimpleGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: maxCrossAxisExtent, - ), - super( - key: key, - scrollDirection: scrollDirection, - reverse: reverse, - controller: controller, - primary: primary, - physics: physics, - shrinkWrap: shrinkWrap, - padding: padding, - cacheExtent: cacheExtent, - semanticChildCount: semanticChildCount ?? itemCount, - dragStartBehavior: dragStartBehavior, - keyboardDismissBehavior: keyboardDismissBehavior, - restorationId: restorationId, - clipBehavior: clipBehavior, - ); - - /// A delegate that controls the layout of the children within the - /// [AlignedGridView]. - /// - /// The [AlignedGridView.custom] constructor let you specify this delegate - /// explicitly. The other constructors create a [gridDelegate] implicitly. - final SliverSimpleGridDelegate gridDelegate; - - /// {@macro fsgv.global.mainAxisSpacing} - final double mainAxisSpacing; - - /// {@macro fsgv.global.crossAxisSpacing} - final double crossAxisSpacing; - - /// Called to build children for the sliver. - /// - /// Will be called only for indices greater than or equal to zero and less - /// than [itemCount] (if [itemCount] is non-null). - /// - /// Should return null if asked to build a widget with a greater index than - /// exists. - /// - /// The delegate wraps the children returned by this builder in - /// [RepaintBoundary] widgets. - final NullableIndexedWidgetBuilder itemBuilder; - - /// The total number of children this delegate can provide. - /// - /// If null, the number of children is determined by the least index for which - /// [itemBuilder] returns null. - final int? itemCount; - - /// Whether to wrap each child in an [AutomaticKeepAlive]. - /// - /// Typically, children in lazy list are wrapped in [AutomaticKeepAlive] - /// widgets so that children can use [KeepAliveNotification]s to preserve - /// their state when they would otherwise be garbage collected off-screen. - /// - /// This feature (and [addRepaintBoundaries]) must be disabled if the children - /// are going to manually maintain their [KeepAlive] state. It may also be - /// more efficient to disable this feature if it is known ahead of time that - /// none of the children will ever try to keep themselves alive. - /// - /// Defaults to true. - final bool addAutomaticKeepAlives; - - /// Whether to wrap each child in a [RepaintBoundary]. - /// - /// Typically, children in a scrolling container are wrapped in repaint - /// boundaries so that they do not need to be repainted as the list scrolls. - /// If the children are easy to repaint (e.g., solid color blocks or a short - /// snippet of text), it might be more efficient to not add a repaint boundary - /// and simply repaint the children during scrolling. - /// - /// Defaults to true. - final bool addRepaintBoundaries; - - @override - Widget buildChildLayout(BuildContext context) { - return SliverAlignedGrid( - itemBuilder: itemBuilder, - itemCount: itemCount, - gridDelegate: gridDelegate, - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - addAutomaticKeepAlives: addAutomaticKeepAlives, - addRepaintBoundaries: addRepaintBoundaries, - ); - } -} diff --git a/lib/src/widgets/sliver_aligned_grid.dart b/lib/src/widgets/sliver_aligned_grid.dart deleted file mode 100644 index 10eb18a..0000000 --- a/lib/src/widgets/sliver_aligned_grid.dart +++ /dev/null @@ -1,196 +0,0 @@ -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/src/rendering/sliver_simple_grid_delegate.dart'; -import 'package:flutter_staggered_grid_view/src/widgets/uniform_track.dart'; - -/// A sliver that places multiple box children in a two dimensional arrangement. -/// -/// [SliverAlignedGrid] places its children in a grid where each track has the -/// main axis extent of the widest child. Each child is stretched to match the -/// track main axis extent. -class SliverAlignedGrid extends StatelessWidget { - /// Creates a custom [SliverAlignedGrid]. - const SliverAlignedGrid({ - Key? key, - required this.itemBuilder, - this.itemCount, - required this.gridDelegate, - this.mainAxisSpacing = 0, - this.crossAxisSpacing = 0, - this.addAutomaticKeepAlives = true, - this.addRepaintBoundaries = true, - }) : super(key: key); - - /// Creates a sliver that places multiple box children in an aligned - /// arrangement with a fixed number of tiles in the cross axis. - /// - /// The [crossAxisCount], [mainAxisSpacing] and [crossAxisSpacing] arguments - /// must be greater than zero. - SliverAlignedGrid.count({ - Key? key, - required NullableIndexedWidgetBuilder itemBuilder, - int? itemCount, - required int crossAxisCount, - double mainAxisSpacing = 0, - double crossAxisSpacing = 0, - bool addAutomaticKeepAlives = true, - bool addRepaintBoundaries = true, - }) : this( - key: key, - itemBuilder: itemBuilder, - itemCount: itemCount, - gridDelegate: SliverSimpleGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, - ), - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - addAutomaticKeepAlives: addAutomaticKeepAlives, - addRepaintBoundaries: addRepaintBoundaries, - ); - - /// Creates a sliver that places multiple box children in an aligned - /// arrangement with tiles that each have a maximum cross-axis extent. - /// - /// The [maxCrossAxisExtent], [mainAxisSpacing] and [crossAxisSpacing] - /// arguments must be greater than zero. - SliverAlignedGrid.extent({ - Key? key, - required NullableIndexedWidgetBuilder itemBuilder, - int? itemCount, - required double maxCrossAxisExtent, - double mainAxisSpacing = 0, - double crossAxisSpacing = 0, - bool addAutomaticKeepAlives = true, - bool addRepaintBoundaries = true, - }) : this( - key: key, - itemBuilder: itemBuilder, - itemCount: itemCount, - gridDelegate: SliverSimpleGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: maxCrossAxisExtent, - ), - mainAxisSpacing: mainAxisSpacing, - crossAxisSpacing: crossAxisSpacing, - addAutomaticKeepAlives: addAutomaticKeepAlives, - addRepaintBoundaries: addRepaintBoundaries, - ); - - /// {@macro fsgv.global.mainAxisSpacing} - final double mainAxisSpacing; - - /// {@macro fsgv.global.crossAxisSpacing} - final double crossAxisSpacing; - - /// {@macro fsgv.global.gridDelegate} - final SliverSimpleGridDelegate gridDelegate; - - /// Called to build children for the sliver. - /// - /// Will be called only for indices greater than or equal to zero and less - /// than [itemCount] (if [itemCount] is non-null). - /// - /// Should return null if asked to build a widget with a greater index than - /// exists. - /// - /// The delegate wraps the children returned by this builder in - /// [RepaintBoundary] widgets. - final NullableIndexedWidgetBuilder itemBuilder; - - /// The total number of children this delegate can provide. - /// - /// If null, the number of children is determined by the least index for which - /// [itemBuilder] returns null. - final int? itemCount; - - /// Whether to wrap each child in an [AutomaticKeepAlive]. - /// - /// Typically, children in lazy list are wrapped in [AutomaticKeepAlive] - /// widgets so that children can use [KeepAliveNotification]s to preserve - /// their state when they would otherwise be garbage collected off-screen. - /// - /// This feature (and [addRepaintBoundaries]) must be disabled if the children - /// are going to manually maintain their [KeepAlive] state. It may also be - /// more efficient to disable this feature if it is known ahead of time that - /// none of the children will ever try to keep themselves alive. - /// - /// Defaults to true. - final bool addAutomaticKeepAlives; - - /// Whether to wrap each child in a [RepaintBoundary]. - /// - /// Typically, children in a scrolling container are wrapped in repaint - /// boundaries so that they do not need to be repainted as the list scrolls. - /// If the children are easy to repaint (e.g., solid color blocks or a short - /// snippet of text), it might be more efficient to not add a repaint boundary - /// and simply repaint the children during scrolling. - /// - /// Defaults to true. - final bool addRepaintBoundaries; - - @override - Widget build(BuildContext context) { - final localItemCount = itemCount; - return SliverLayoutBuilder( - builder: (context, constraints) { - final crossAxisCount = gridDelegate.getCrossAxisCount( - constraints, - crossAxisSpacing, - ); - final listItemCount = localItemCount == null - ? null - : ((localItemCount + crossAxisCount - 1) ~/ crossAxisCount) * 2 - 1; - return SliverList( - delegate: SliverChildBuilderDelegate( - (context, index) { - if (index.isOdd) { - return _Gap(mainAxisExtent: mainAxisSpacing); - } - - final startIndex = (index ~/ 2) * crossAxisCount; - final children = [ - for (int i = 0; i < crossAxisCount; i++) - _buildItem(context, startIndex + i, itemCount), - ].whereType(); - - if (children.isEmpty) { - return null; - } - - return UniformTrack( - direction: constraints.crossAxisDirection, - division: crossAxisCount, - spacing: crossAxisSpacing, - children: [...children], - ); - }, - childCount: listItemCount, - ), - ); - }, - ); - } - - Widget? _buildItem(BuildContext context, int index, int? childCount) { - if (index < 0 || (childCount != null && index >= childCount)) { - return null; - } - - return itemBuilder(context, index); - } -} - -class _Gap extends StatelessWidget { - const _Gap({ - Key? key, - required this.mainAxisExtent, - }) : super(key: key); - - final double mainAxisExtent; - - @override - Widget build(BuildContext context) { - final axis = axisDirectionToAxis(Scrollable.of(context).axisDirection); - return axis == Axis.vertical - ? SizedBox(height: mainAxisExtent) - : SizedBox(width: mainAxisExtent); - } -} diff --git a/test/src/layouts/quilted_test.dart b/test/src/layouts/quilted_test.dart deleted file mode 100644 index af02e6d..0000000 --- a/test/src/layouts/quilted_test.dart +++ /dev/null @@ -1,274 +0,0 @@ -import 'package:flutter/rendering.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../../common.dart'; - -void main() { - final binding = TestWidgetsFlutterBinding.ensureInitialized(); - testWidgets('Quilted Grid same control test', (WidgetTester tester) async { - await binding.setSurfaceSize(const Size(800, 800)); - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: GridView.custom( - gridDelegate: SliverQuiltedGridDelegate( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - repeatPattern: QuiltedGridRepeatPattern.same, - pattern: const [ - QuiltedGridTile(2, 2), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 2), - ], - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) => Tile(index: index), - ), - ), - ), - ); - - void _expectSize(int index, Size size) { - expect(tester.getSize(find.text('$index')), equals(size)); - } - - void _expectTopLeft(int index, Offset topLeft) { - expect(tester.getTopLeft(find.text('$index')), equals(topLeft)); - } - - const s1 = 197.0; - const s2 = 398.0; - const s3 = 599.0; - _expectSize(0, const Size(s2, s2)); - _expectSize(1, const Size(s1, s1)); - _expectSize(2, const Size(s1, s1)); - _expectSize(3, const Size(s2, s1)); - _expectSize(4, const Size(s2, s2)); - _expectSize(5, const Size(s1, s1)); - _expectSize(6, const Size(s1, s1)); - _expectSize(7, const Size(s2, s1)); - - _expectTopLeft(0, const Offset(0, 0)); - _expectTopLeft(1, const Offset(s2 + 4, 0)); - _expectTopLeft(2, const Offset(s3 + 4, 0)); - _expectTopLeft(3, const Offset(s2 + 4, s1 + 4)); - _expectTopLeft(4, const Offset(0, s2 + 4)); - _expectTopLeft(5, const Offset(s2 + 4, s2 + 4)); - _expectTopLeft(6, const Offset(s3 + 4, s2 + 4)); - _expectTopLeft(7, const Offset(s2 + 4, s3 + 4)); - }); - - testWidgets('Quilted Grid inverted control test', - (WidgetTester tester) async { - await binding.setSurfaceSize(const Size(800, 800)); - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: GridView.custom( - gridDelegate: SliverQuiltedGridDelegate( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - repeatPattern: QuiltedGridRepeatPattern.inverted, - pattern: const [ - QuiltedGridTile(2, 2), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 2), - ], - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) => Tile(index: index), - ), - ), - ), - ); - - void _expectSize(int index, Size size) { - expect(tester.getSize(find.text('$index')), equals(size)); - } - - void _expectTopLeft(int index, Offset topLeft) { - expect(tester.getTopLeft(find.text('$index')), equals(topLeft)); - } - - const s1 = 197.0; - const s2 = 398.0; - const s3 = 599.0; - _expectSize(0, const Size(s2, s2)); - _expectSize(1, const Size(s1, s1)); - _expectSize(2, const Size(s1, s1)); - _expectSize(3, const Size(s2, s1)); - _expectSize(4, const Size(s2, s1)); - _expectSize(5, const Size(s2, s2)); - _expectSize(6, const Size(s1, s1)); - _expectSize(7, const Size(s1, s1)); - - _expectTopLeft(0, const Offset(0, 0)); - _expectTopLeft(1, const Offset(s2 + 4, 0)); - _expectTopLeft(2, const Offset(s3 + 4, 0)); - _expectTopLeft(3, const Offset(s2 + 4, s1 + 4)); - _expectTopLeft(4, const Offset(0, s2 + 4)); - _expectTopLeft(5, const Offset(s2 + 4, s2 + 4)); - _expectTopLeft(6, const Offset(0, s3 + 4)); - _expectTopLeft(7, const Offset(s1 + 4, s3 + 4)); - }); - - testWidgets('Quilted Grid mirrored control test', - (WidgetTester tester) async { - await binding.setSurfaceSize(const Size(800, 800)); - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: GridView.custom( - gridDelegate: SliverQuiltedGridDelegate( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - repeatPattern: QuiltedGridRepeatPattern.mirrored, - pattern: const [ - QuiltedGridTile(2, 2), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 2), - ], - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) => Tile(index: index), - ), - ), - ), - ); - - void _expectSize(int index, Size size) { - expect(tester.getSize(find.text('$index')), equals(size)); - } - - void _expectTopLeft(int index, Offset topLeft) { - expect(tester.getTopLeft(find.text('$index')), equals(topLeft)); - } - - const s1 = 197.0; - const s2 = 398.0; - const s3 = 599.0; - _expectSize(0, const Size(s2, s2)); - _expectSize(1, const Size(s1, s1)); - _expectSize(2, const Size(s1, s1)); - _expectSize(3, const Size(s2, s1)); - _expectSize(4, const Size(s2, s2)); - _expectSize(5, const Size(s2, s1)); - _expectSize(6, const Size(s1, s1)); - _expectSize(7, const Size(s1, s1)); - - _expectTopLeft(0, const Offset(0, 0)); - _expectTopLeft(1, const Offset(s2 + 4, 0)); - _expectTopLeft(2, const Offset(s3 + 4, 0)); - _expectTopLeft(3, const Offset(s2 + 4, s1 + 4)); - _expectTopLeft(4, const Offset(0, s2 + 4)); - _expectTopLeft(5, const Offset(s2 + 4, s2 + 4)); - _expectTopLeft(6, const Offset(s2 + 4, s3 + 4)); - _expectTopLeft(7, const Offset(s3 + 4, s3 + 4)); - }); - - testWidgets('Quilted Grid different pattern control test', - (WidgetTester tester) async { - await binding.setSurfaceSize(const Size(200, 268)); - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: GridView.custom( - gridDelegate: SliverQuiltedGridDelegate( - crossAxisCount: 3, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - repeatPattern: QuiltedGridRepeatPattern.inverted, - pattern: const [ - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(2, 2), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - ], - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) => Tile(index: index), - ), - ), - ), - ); - - void _expectSize(int index, Size size) { - expect(tester.getSize(find.text('$index')), equals(size)); - } - - void _expectTopLeft(int index, Offset topLeft) { - expect(tester.getTopLeft(find.text('$index')), equals(topLeft)); - } - - const s1 = 64.0; - const s2 = 132.0; - const s3 = 200.0; - _expectSize(0, const Size(s1, s1)); - _expectSize(1, const Size(s1, s1)); - _expectSize(2, const Size(s1, s1)); - _expectSize(3, const Size(s1, s1)); - _expectSize(4, const Size(s2, s2)); - _expectSize(5, const Size(s1, s1)); - _expectSize(6, const Size(s1, s1)); - _expectSize(7, const Size(s1, s1)); - _expectSize(7, const Size(s1, s1)); - - _expectTopLeft(0, const Offset(0, 0)); - _expectTopLeft(1, const Offset(s1 + 4, 0)); - _expectTopLeft(2, const Offset(s2 + 4, 0)); - _expectTopLeft(3, const Offset(0, s1 + 4)); - _expectTopLeft(4, const Offset(s1 + 4, s1 + 4)); - _expectTopLeft(5, const Offset(0, s2 + 4)); - _expectTopLeft(6, const Offset(0, s3 + 4)); - _expectTopLeft(7, const Offset(s1 + 4, s3 + 4)); - _expectTopLeft(8, const Offset(s2 + 4, s3 + 4)); - }); - - test('computeMaxScrollOffset should be right', () { - final delegate = SliverQuiltedGridDelegate( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - repeatPattern: QuiltedGridRepeatPattern.same, - pattern: const [ - QuiltedGridTile(2, 2), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 1), - QuiltedGridTile(1, 2), - ], - ); - - final layout = delegate.getLayout( - const SliverConstraints( - axisDirection: AxisDirection.down, - cacheOrigin: 0, - crossAxisDirection: AxisDirection.right, - crossAxisExtent: 412, - growthDirection: GrowthDirection.forward, - scrollOffset: 0, - overlap: 0, - viewportMainAxisExtent: 400, - precedingScrollExtent: 0, - remainingCacheExtent: 400, - remainingPaintExtent: 400, - userScrollDirection: ScrollDirection.idle, - ), - ); - - expect(layout.computeMaxScrollOffset(12), 620); - expect(layout.computeMaxScrollOffset(16), 828); - }); -} diff --git a/test/src/layouts/staired_test.dart b/test/src/layouts/staired_test.dart deleted file mode 100644 index bbd27eb..0000000 --- a/test/src/layouts/staired_test.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/src/layouts/staired.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../../common.dart'; - -void main() { - final binding = TestWidgetsFlutterBinding.ensureInitialized(); - testWidgets('Staired Grid control test', (WidgetTester tester) async { - await binding.setSurfaceSize(const Size(800, 800)); - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: GridView.custom( - gridDelegate: SliverStairedGridDelegate( - crossAxisSpacing: 48, - mainAxisSpacing: 24, - startCrossAxisDirectionReversed: true, - pattern: const [ - StairedGridTile(0.5, 1), - StairedGridTile(0.5, 3 / 4), - StairedGridTile(1.0, 10 / 4), - ], - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) => Tile(index: index), - ), - ), - ), - ); - - void _expectSize(int index, Size size) { - expect(tester.getSize(find.text('$index')), equals(size)); - } - - void _expectTopLeft(int index, Offset topLeft) { - final actualOffset = tester.getTopLeft(find.text('$index')); - expect( - actualOffset.dx, - moreOrLessEquals(topLeft.dx, epsilon: precisionErrorTolerance), - ); - expect( - actualOffset.dy, - moreOrLessEquals(topLeft.dy, epsilon: precisionErrorTolerance), - ); - } - - const s1 = 376.0; - - _expectSize(0, const Size(s1, s1)); - _expectSize(1, const Size(s1, s1 / (3 / 4))); - _expectSize(2, const Size(704, 704 / (10 / 4))); - - _expectTopLeft(0, const Offset(s1 + 48, 0)); - _expectTopLeft(1, const Offset(0, 24)); - _expectTopLeft(2, const Offset(48, s1 / (3 / 4) + 48)); - }); -} diff --git a/test/src/layouts/woven_test.dart b/test/src/layouts/woven_test.dart deleted file mode 100644 index 7aea296..0000000 --- a/test/src/layouts/woven_test.dart +++ /dev/null @@ -1,174 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/src/layouts/woven.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../../common.dart'; - -void main() { - final binding = TestWidgetsFlutterBinding.ensureInitialized(); - testWidgets('Woven Grid control test', (WidgetTester tester) async { - await binding.setSurfaceSize(const Size(800, 800)); - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: GridView.custom( - gridDelegate: SliverWovenGridDelegate.count( - crossAxisCount: 2, - mainAxisSpacing: 8, - crossAxisSpacing: 8, - pattern: const [ - WovenGridTile(1), - WovenGridTile( - 5 / 7, - crossAxisRatio: 0.9, - alignment: AlignmentDirectional.centerEnd, - ), - ], - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) => Tile(index: index), - ), - ), - ), - ); - - void _expectSize(int index, Size size) { - expect(tester.getSize(find.text('$index')), equals(size)); - } - - void _expectTopLeft(int index, Offset topLeft) { - final actualOffset = tester.getTopLeft(find.text('$index')); - expect( - actualOffset.dx, - moreOrLessEquals(topLeft.dx, epsilon: precisionErrorTolerance), - ); - expect( - actualOffset.dy, - moreOrLessEquals(topLeft.dy, epsilon: precisionErrorTolerance), - ); - } - - const s1 = 396.0; - const s2 = s1 * 0.9; - const s3 = s2 * 7 / 5; - - _expectSize(0, const Size(s1, s1)); - _expectSize(1, const Size(s2, s3)); - _expectSize(2, const Size(s2, s3)); - _expectSize(3, const Size(s1, s1)); - - _expectTopLeft(0, const Offset(0, (s3 - s1) / 2)); - _expectTopLeft(1, const Offset(s1 + 8 + 0.1 * s1, 0)); - _expectTopLeft(2, const Offset(0, s3 + 8)); - _expectTopLeft(3, const Offset(s1 + 8, s3 + 8 + (s3 - s1) / 2)); - }); - - testWidgets('Woven layout should follow an opposite flow', - (WidgetTester tester) async { - await binding.setSurfaceSize(const Size(412, 800)); - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: GridView.custom( - gridDelegate: SliverWovenGridDelegate.count( - crossAxisCount: 4, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - pattern: const [ - WovenGridTile(1), - WovenGridTile( - 6 / 10, - crossAxisRatio: 0.9, - ), - WovenGridTile( - 3 / 4, - crossAxisRatio: 0.9, - ), - ], - ), - childrenDelegate: SliverChildBuilderDelegate( - (context, index) => Tile(index: index), - ), - ), - ), - ); - - void _expectSize(int index, Size size) { - expect(tester.getSize(find.text('$index')), equals(size)); - } - - void _expectTopLeft(int index, Offset topLeft) { - final actualOffset = tester.getTopLeft(find.text('$index')); - expect( - actualOffset.dx, - moreOrLessEquals(topLeft.dx, epsilon: precisionErrorTolerance), - ); - expect( - actualOffset.dy, - moreOrLessEquals(topLeft.dy, epsilon: precisionErrorTolerance), - ); - } - - const s1 = 100.0; - const s2 = s1 * 0.9; - const s3 = s2 * 10 / 6; - const s4 = s2 * 4 / 3; - - _expectSize(0, const Size(s1, s1)); - _expectSize(1, const Size(s2, s3)); - _expectSize(2, const Size(s2, s4)); - _expectSize(3, const Size(s1, s1)); - _expectSize(4, const Size(s2, s3)); - _expectSize(5, const Size(s1, s1)); - _expectSize(6, const Size(s2, s4)); - _expectSize(7, const Size(s2, s3)); - - _expectTopLeft(0, const Offset(0, 25)); - _expectTopLeft(1, const Offset(104 + 5, 0)); - _expectTopLeft(2, const Offset(208 + 5, 15)); - _expectTopLeft(3, const Offset(312, 25)); - _expectTopLeft(4, const Offset(5, 154)); - _expectTopLeft(5, const Offset(104, 154 + 25)); - _expectTopLeft(6, const Offset(208 + 5, 154 + 15)); - _expectTopLeft(7, const Offset(312 + 5, 154)); - }); - - test('computeMaxScrollOffset should be right', () { - final delegate = SliverWovenGridDelegate.count( - crossAxisCount: 3, - mainAxisSpacing: 8, - crossAxisSpacing: 8, - pattern: const [ - WovenGridTile(1), - WovenGridTile( - 5 / 7, - crossAxisRatio: 0.9, - alignment: AlignmentDirectional.centerEnd, - ), - ], - ); - - final layout = delegate.getLayout( - const SliverConstraints( - axisDirection: AxisDirection.down, - cacheOrigin: 0, - crossAxisDirection: AxisDirection.right, - crossAxisExtent: 412, - growthDirection: GrowthDirection.forward, - scrollOffset: 0, - overlap: 0, - viewportMainAxisExtent: 400, - precedingScrollExtent: 0, - remainingCacheExtent: 400, - remainingPaintExtent: 400, - userScrollDirection: ScrollDirection.idle, - ), - ); - - expect(layout.computeMaxScrollOffset(13), 846.4399999999999); - expect(layout.computeMaxScrollOffset(14), 863.5999999999999); - expect(layout.computeMaxScrollOffset(16), 1037.92); - }); -} diff --git a/test/src/widgets/aligned_grid_view_test.dart b/test/src/widgets/aligned_grid_view_test.dart deleted file mode 100644 index 7473214..0000000 --- a/test/src/widgets/aligned_grid_view_test.dart +++ /dev/null @@ -1,189 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_staggered_grid_view/src/widgets/aligned_grid_view.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../../common.dart'; - -void main() { - final binding = TestWidgetsFlutterBinding.ensureInitialized(); - - testWidgets('Empty AlignedGridView', (WidgetTester tester) async { - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: AlignedGridView.count( - dragStartBehavior: DragStartBehavior.down, - crossAxisCount: 4, - itemBuilder: (contex, index) => const SizedBox(), - itemCount: 0, - ), - ), - ); - }); - - testWidgets('Should only layout the number of requested items', - (WidgetTester tester) async { - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: AlignedGridView.count( - dragStartBehavior: DragStartBehavior.down, - crossAxisCount: 4, - itemBuilder: (contex, index) { - return Tile( - index: index, - height: 100, - ); - }, - itemCount: 4, - ), - ), - ); - - expect(find.text('0'), findsOneWidget); - expect(find.text('4'), findsNothing); - - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: AlignedGridView.count( - dragStartBehavior: DragStartBehavior.down, - crossAxisCount: 4, - itemBuilder: (contex, index) { - return Tile( - index: index, - height: 100, - ); - }, - itemCount: 5, - ), - ), - ); - - expect(find.text('0'), findsOneWidget); - expect(find.text('4'), findsOneWidget); - expect(find.text('5'), findsNothing); - }); - - testWidgets('AlignedGridView.count control test', - (WidgetTester tester) async { - // Screen size is 800x600 in the test environment. - final itemCount = 12; - - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: AlignedGridView.count( - cacheExtent: 0, - dragStartBehavior: DragStartBehavior.down, - crossAxisCount: 4, - itemBuilder: (context, index) { - return Tile( - index: index, - height: ((index % 5) + 1) * 100, - ); - }, - itemCount: itemCount, - ), - ), - ); - - void _expectSize(int index, Size size) { - expect(tester.getSize(find.text('$index')), equals(size)); - } - - void _expectTopLeft(int index, Offset topLeft) { - expect(tester.getTopLeft(find.text('$index')), equals(topLeft)); - } - - _expectSize(0, const Size(200, 400)); - _expectSize(1, const Size(200, 400)); - _expectSize(2, const Size(200, 400)); - _expectSize(3, const Size(200, 400)); - _expectSize(4, const Size(200, 500)); - _expectSize(5, const Size(200, 500)); - _expectSize(6, const Size(200, 500)); - _expectSize(7, const Size(200, 500)); - - _expectTopLeft(0, const Offset(0, 0)); - _expectTopLeft(1, const Offset(200, 0)); - _expectTopLeft(2, const Offset(400, 0)); - _expectTopLeft(3, const Offset(600, 0)); - _expectTopLeft(4, const Offset(0, 400)); - _expectTopLeft(5, const Offset(200, 400)); - _expectTopLeft(6, const Offset(400, 400)); - _expectTopLeft(7, const Offset(600, 400)); - }); - - testWidgets('AlignedGridView.extent control test', - (WidgetTester tester) async { - // Screen size is 800x600 in the test environment. - final itemCount = 12; - - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: AlignedGridView.extent( - cacheExtent: 0, - dragStartBehavior: DragStartBehavior.down, - maxCrossAxisExtent: 200, - itemBuilder: (context, index) { - return Tile( - index: index, - height: ((index % 5) + 1) * 100, - ); - }, - itemCount: itemCount, - ), - ), - ); - - void _expectSize(int index, Size size) { - expect(tester.getSize(find.text('$index')), equals(size)); - } - - void _expectTopLeft(int index, Offset topLeft) { - expect(tester.getTopLeft(find.text('$index')), equals(topLeft)); - } - - _expectSize(0, const Size(200, 400)); - _expectSize(1, const Size(200, 400)); - _expectSize(2, const Size(200, 400)); - _expectSize(3, const Size(200, 400)); - _expectSize(4, const Size(200, 500)); - _expectSize(5, const Size(200, 500)); - _expectSize(6, const Size(200, 500)); - _expectSize(7, const Size(200, 500)); - - _expectTopLeft(0, const Offset(0, 0)); - _expectTopLeft(1, const Offset(200, 0)); - _expectTopLeft(2, const Offset(400, 0)); - _expectTopLeft(3, const Offset(600, 0)); - _expectTopLeft(4, const Offset(0, 400)); - _expectTopLeft(5, const Offset(200, 400)); - _expectTopLeft(6, const Offset(400, 400)); - _expectTopLeft(7, const Offset(600, 400)); - - // Change orientation to portrait. - await binding.setSurfaceSize(const Size(600, 800)); - await tester.pump(); - - _expectSize(0, const Size(200, 300)); - _expectSize(1, const Size(200, 300)); - _expectSize(2, const Size(200, 300)); - _expectSize(3, const Size(200, 500)); - _expectSize(4, const Size(200, 500)); - _expectSize(5, const Size(200, 500)); - - _expectTopLeft(0, const Offset(0, 0)); - _expectTopLeft(1, const Offset(200, 0)); - _expectTopLeft(2, const Offset(400, 0)); - _expectTopLeft(3, const Offset(0, 300)); - _expectTopLeft(4, const Offset(200, 300)); - _expectTopLeft(5, const Offset(400, 300)); - - expect(find.text('6'), findsNothing); - expect(find.text('7'), findsNothing); - }); -}