├── .gitignore ├── .metadata ├── CHANGELOG.md ├── LICENSE ├── README.md ├── android ├── app │ └── src │ │ └── main │ │ └── java │ │ └── io │ │ └── flutter │ │ └── plugins │ │ └── GeneratedPluginRegistrant.java └── local.properties ├── example ├── .gitignore ├── README.md ├── android │ ├── .project │ ├── .settings │ │ └── org.eclipse.buildship.core.prefs │ ├── app │ │ ├── .classpath │ │ ├── .project │ │ ├── .settings │ │ │ └── org.eclipse.buildship.core.prefs │ │ ├── build.gradle │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── example │ │ │ │ └── MainActivity.java │ │ │ └── res │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ └── settings.gradle ├── ios │ ├── Flutter │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── flutter_export_environment.sh │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ └── contents.xcworkspacedata │ └── Runner │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ └── README.md │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── main.m ├── lib │ └── main.dart ├── pubspec.yaml └── test │ └── widget_test.dart ├── flutter_carousel.iml ├── gifs ├── multi_rotating.gif ├── simple_carousel.gif ├── slide_swipe.gif ├── x_rotating.gif ├── y_rotating.gif └── z_rotating.gif ├── lib ├── carousel.dart └── src │ ├── carousel │ ├── carousel.dart │ ├── multi_axis_carousel.dart │ ├── rotatingcarousel.dart │ ├── simple_carousel.dart │ ├── slide_swipe.dart │ ├── x_rotating_carousel.dart │ └── zrotatingcarousel.dart │ ├── indicator │ ├── index.dart │ └── widget │ │ ├── bar_indicator.dart │ │ ├── bubble_indicator.dart │ │ ├── dot_indicator.dart │ │ └── props.dart │ └── services │ ├── renderer.dart │ ├── screen_ratio.dart │ └── type_declaration.dart ├── pubspec.lock ├── pubspec.yaml └── test └── flutter_carousel_test.dart /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dart_tool/ 3 | .packages 4 | .metadata 5 | .pub/ 6 | build/ 7 | ios/.generated/ 8 | ios/Flutter/Generated.xcconfig 9 | ios/Runner/GeneratedPluginRegistrant.* 10 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 5391447fae6209bb21a89e6a5a6583cac1af9b4b 8 | channel: stable 9 | 10 | project_type: package 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [1.0.1] - 10 December 2017 2 | 3 | * Initial release. 4 | 5 | ## [1.0.2] - 26 February 2019 6 | * Added feature to initialise the starting page index 7 | * Added a callback function on tap 8 | * Added wrap control to carousel 9 | * Indroduction of Types to select the type of carousel 10 | * Indroduction of IndicatorTypes to select the type of Indicator 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | TODO: Add your license here. 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flutter_Carosel 2 | 3 | A simple Carousel Widget with multiple configuration option. 4 | 5 | ```yaml 6 | ... 7 | dependencies: 8 | ... 9 | flutter_multi_carousel: ^1.0.0 10 | ... 11 | ``` 12 | 13 | And install it using `flutter packages get` on your project folder. After that, just import the module and use it: 14 | 15 | ```dart 16 | import 'package:flutter/material.dart'; 17 | import 'package:flutter_multi_carousel/carousel.dart'; 18 | 19 | void main() => runApp(MyApp()); 20 | 21 | class MyApp extends StatelessWidget { 22 | // This widget is the root of your application. 23 | @override 24 | Widget build(BuildContext context) { 25 | return MaterialApp( 26 | title: 'Carousel Demo', 27 | home: CarouselExample(), 28 | ); 29 | } 30 | } 31 | 32 | class CarouselExample extends StatelessWidget { 33 | @override 34 | Widget build(BuildContext context) { 35 | return Scaffold( 36 | body: Center( 37 | child: Carousel( 38 | height: 350.0, 39 | width: 350, 40 | initialPage: 3, 41 | allowWrap: false, 42 | type: Types.slideSwiper, 43 | onCarouselTap: (i) { 44 | print("onTap $i"); 45 | }, 46 | indicatorType: IndicatorTypes.bar, 47 | arrowColor: Colors.black, 48 | axis: Axis.horizontal, 49 | showArrow: true, 50 | children: List.generate( 51 | 7, 52 | (i) => Center( 53 | child: 54 | Container(color: Colors.red.withOpacity((i + 1) / 7)), 55 | ))), 56 | ), 57 | ); 58 | } 59 | } 60 | 61 | ``` 62 | 63 | ## For detailed demonstration refer this [GitHub](https://github.com/jaiswalshubham84/Flutter-Carousel) link 64 | 65 | https://github.com/jaiswalshubham84/Flutter-Carousel 66 | 67 | ## Getting Startedslide 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 |
PropertiesTypeDefault ValueDescription
heightDoublenullDefines height of carousel.This field is required
widthDoublenullDefines width of carousel. This field is required
axisAxisAxis.horizontalDefines axis of carousel.
typeTypes"simple"Defines type of carousel.
for ex: Types.simple, Types.slideSwiper, Types.xRotating, Types.yRotating, Types.zRotating, Types.multiRotating
onCarouselTap FunctionnullA callback function
arrowColorColorColors.whiteDefine the color of arrow
arrowColorColorColors.whiteDefine the color of arrow
showIndicatorBooltrueChoice to show indicator in carousel
indicatorTypeIndicatorTypesbarDefines the type of indicator.
For ex: IndicatorTypes.bar, IndicatorTypes.dot, IndicatorTypes.bubble
initialPageint0Start your carousel with custom initial page number
activeIndicatorColorColorColors.whiteDefines the color of active indicator
unActiveIndicatorColorColorColors.blackDefines the color of unactive indicator
indicatorBackgroundColorColorColor(0xff121212)Defines the background color of indicator
indicatorBackgroundOpacityDouble0.5Defines the opacity of indicator background
allowWrapbooltrueDefines if the carousel should wrap once you reach the end or if your at the begining and go left if it should take you to the end
167 |

168 | 169 | | ![](https://github.com/jaiswalshubham84/readme/blob/master/gifs/simple_carousel.gif?raw=true) | ![](https://github.com/jaiswalshubham84/readme/blob/master/gifs/slide_swipe.gif?raw=true) | 170 | | :-------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------- | 171 | | ![](https://github.com/jaiswalshubham84/readme/blob/master/gifs/x_rotating.gif?raw=true) | ![](https://github.com/jaiswalshubham84/readme/blob/master/gifs/y_rotating.gif?raw=true) | 172 | | | | 173 | | ![](https://github.com/jaiswalshubham84/readme/blob/master/gifs/z_rotating.gif?raw=true) | ![](https://github.com/jaiswalshubham84/readme/blob/master/gifs/multi_rotating.gif?raw=true) | 174 | 175 | ## Credits 176 | 177 | Developed by Shubham Jaiswal 178 | 179 | 180 | ## Contributing 181 | 182 | Feel free to Contribute! 183 | 184 | For help getting started with Flutter, view our online 185 | [documentation](https://flutter.io/). 186 | -------------------------------------------------------------------------------- /android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java: -------------------------------------------------------------------------------- 1 | package io.flutter.plugins; 2 | 3 | import io.flutter.plugin.common.PluginRegistry; 4 | 5 | /** 6 | * Generated file. Do not edit. 7 | */ 8 | public final class GeneratedPluginRegistrant { 9 | public static void registerWith(PluginRegistry registry) { 10 | if (alreadyRegisteredWith(registry)) { 11 | return; 12 | } 13 | } 14 | 15 | private static boolean alreadyRegisteredWith(PluginRegistry registry) { 16 | final String key = GeneratedPluginRegistrant.class.getCanonicalName(); 17 | if (registry.hasPlugin(key)) { 18 | return true; 19 | } 20 | registry.registrarFor(key); 21 | return false; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /android/local.properties: -------------------------------------------------------------------------------- 1 | sdk.dir=/Users/shubhamkumar/Library/Android/sdk 2 | flutter.sdk=/Users/shubhamkumar/flutter 3 | flutter.versionName=1.0.0 -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.lock 4 | *.log 5 | *.pyc 6 | *.swp 7 | .DS_Store 8 | .atom/ 9 | .buildlog/ 10 | .history 11 | .svn/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # Visual Studio Code related 20 | .vscode/ 21 | 22 | # Flutter/Dart/Pub related 23 | **/doc/api/ 24 | .dart_tool/ 25 | .flutter-plugins 26 | .packages 27 | .pub-cache/ 28 | .pub/ 29 | build/ 30 | 31 | # Android related 32 | **/android/**/gradle-wrapper.jar 33 | **/android/.gradle 34 | **/android/captures/ 35 | **/android/gradlew 36 | **/android/gradlew.bat 37 | **/android/local.properties 38 | **/android/**/GeneratedPluginRegistrant.java 39 | 40 | # iOS/XCode related 41 | **/ios/**/*.mode1v3 42 | **/ios/**/*.mode2v3 43 | **/ios/**/*.moved-aside 44 | **/ios/**/*.pbxuser 45 | **/ios/**/*.perspectivev3 46 | **/ios/**/*sync/ 47 | **/ios/**/.sconsign.dblite 48 | **/ios/**/.tags* 49 | **/ios/**/.vagrant/ 50 | **/ios/**/DerivedData/ 51 | **/ios/**/Icon? 52 | **/ios/**/Pods/ 53 | **/ios/**/.symlinks/ 54 | **/ios/**/profile 55 | **/ios/**/xcuserdata 56 | **/ios/.generated/ 57 | **/ios/Flutter/App.framework 58 | **/ios/Flutter/Flutter.framework 59 | **/ios/Flutter/Generated.xcconfig 60 | **/ios/Flutter/app.flx 61 | **/ios/Flutter/app.zip 62 | **/ios/Flutter/flutter_assets/ 63 | **/ios/ServiceDefinitions.json 64 | **/ios/Runner/GeneratedPluginRegistrant.* 65 | 66 | # Exceptions to above rules. 67 | !**/ios/**/default.mode1v3 68 | !**/ios/**/default.mode2v3 69 | !**/ios/**/default.pbxuser 70 | !**/ios/**/default.perspectivev3 71 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 72 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # example 2 | 3 | flutter_multi_carousel example. 4 | 5 | ## Getting Started 6 | 7 | ```dart 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_multi_carousel/carousel.dart'; 10 | 11 | void main() => runApp(MyApp()); 12 | 13 | class MyApp extends StatelessWidget { 14 | // This widget is the root of your application. 15 | @override 16 | Widget build(BuildContext context) { 17 | return MaterialApp( 18 | title: 'Flutter Demo', 19 | home: CarouselExample(), 20 | ); 21 | } 22 | } 23 | 24 | class CarouselExample extends StatelessWidget { 25 | @override 26 | Widget build(BuildContext context) { 27 | return Scaffold( 28 | body: Center( 29 | child: Carousel( 30 | height: 350.0, 31 | width: 350, 32 | type: "slideswiper", 33 | indicatorType: "bubble", 34 | arrowColor: Colors.white, 35 | axis: Axis.horizontal, 36 | showArrow: true, 37 | children: List.generate( 38 | 7, 39 | (i) => Center( 40 | child: Container(color: Colors.red), 41 | ))), 42 | ), 43 | ); 44 | } 45 | } 46 | ``` 47 | 48 | ## For detailed demonstration refer this [GitHub](https://github.com/jaiswalshubham84/Flutter-Carousel) link 49 | 50 | https://github.com/jaiswalshubham84/Flutter-Carousel 51 | 52 | For help getting started with Flutter, view 53 | [online documentation](https://flutter.io/docs), which offers tutorials, 54 | samples, guidance on full API reference. 55 | -------------------------------------------------------------------------------- /example/android/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | android 4 | Project android created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.buildship.core.gradleprojectbuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.buildship.core.gradleprojectnature 16 | 17 | 18 | -------------------------------------------------------------------------------- /example/android/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir= 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /example/android/app/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /example/android/app/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | app 4 | Project app created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.buildship.core.gradleprojectbuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.buildship.core.gradleprojectnature 22 | 23 | 24 | -------------------------------------------------------------------------------- /example/android/app/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir=.. 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /example/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 26 | 27 | android { 28 | compileSdkVersion 27 29 | 30 | lintOptions { 31 | disable 'InvalidPackage' 32 | } 33 | 34 | defaultConfig { 35 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 36 | applicationId "com.example.example" 37 | minSdkVersion 16 38 | targetSdkVersion 27 39 | versionCode flutterVersionCode.toInteger() 40 | versionName flutterVersionName 41 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | } 50 | } 51 | } 52 | 53 | flutter { 54 | source '../..' 55 | } 56 | 57 | dependencies { 58 | testImplementation 'junit:junit:4.12' 59 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 60 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 61 | } 62 | -------------------------------------------------------------------------------- /example/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 10 | 15 | 19 | 26 | 30 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /example/android/app/src/main/java/com/example/example/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.example; 2 | 3 | import android.os.Bundle; 4 | import io.flutter.app.FlutterActivity; 5 | import io.flutter.plugins.GeneratedPluginRegistrant; 6 | 7 | public class MainActivity extends FlutterActivity { 8 | @Override 9 | protected void onCreate(Bundle savedInstanceState) { 10 | super.onCreate(savedInstanceState); 11 | GeneratedPluginRegistrant.registerWith(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /example/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.2.1' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | rootProject.buildDir = '../build' 20 | subprojects { 21 | project.buildDir = "${rootProject.buildDir}/${project.name}" 22 | } 23 | subprojects { 24 | project.evaluationDependsOn(':app') 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /example/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip 7 | -------------------------------------------------------------------------------- /example/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() 4 | 5 | def plugins = new Properties() 6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') 7 | if (pluginsFile.exists()) { 8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } 9 | } 10 | 11 | plugins.each { name, path -> 12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() 13 | include ":$name" 14 | project(":$name").projectDir = pluginDirectory 15 | } 16 | -------------------------------------------------------------------------------- /example/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/ios/Flutter/flutter_export_environment.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # This is a generated file; do not edit or check into version control. 3 | export "FLUTTER_ROOT=/Users/shubhamkumar/flutter" 4 | export "FLUTTER_APPLICATION_PATH=/Users/shubhamkumar/Sites/projects/flutter-carousel/example" 5 | export "FLUTTER_TARGET=/Users/shubhamkumar/Sites/projects/flutter-carousel/example/lib/main.dart" 6 | export "FLUTTER_BUILD_DIR=build" 7 | export "SYMROOT=${SOURCE_ROOT}/../build/ios" 8 | export "FLUTTER_FRAMEWORK_DIR=/Users/shubhamkumar/flutter/bin/cache/artifacts/engine/ios" 9 | export "FLUTTER_BUILD_NAME=1.0.0" 10 | export "FLUTTER_BUILD_NUMBER=1" 11 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; 13 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; 15 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 16 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 17 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 18 | 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 19 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 20 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 21 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXCopyFilesBuildPhase section */ 25 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 26 | isa = PBXCopyFilesBuildPhase; 27 | buildActionMask = 2147483647; 28 | dstPath = ""; 29 | dstSubfolderSpec = 10; 30 | files = ( 31 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, 32 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, 33 | ); 34 | name = "Embed Frameworks"; 35 | runOnlyForDeploymentPostprocessing = 0; 36 | }; 37 | /* End PBXCopyFilesBuildPhase section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 41 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 42 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 43 | 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 44 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 45 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 46 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 47 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 48 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 49 | 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 50 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 52 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 53 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 54 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 55 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | /* End PBXFileReference section */ 57 | 58 | /* Begin PBXFrameworksBuildPhase section */ 59 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 60 | isa = PBXFrameworksBuildPhase; 61 | buildActionMask = 2147483647; 62 | files = ( 63 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, 64 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, 65 | ); 66 | runOnlyForDeploymentPostprocessing = 0; 67 | }; 68 | /* End PBXFrameworksBuildPhase section */ 69 | 70 | /* Begin PBXGroup section */ 71 | 9740EEB11CF90186004384FC /* Flutter */ = { 72 | isa = PBXGroup; 73 | children = ( 74 | 3B80C3931E831B6300D905FE /* App.framework */, 75 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 76 | 9740EEBA1CF902C7004384FC /* Flutter.framework */, 77 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 78 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 79 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 80 | ); 81 | name = Flutter; 82 | sourceTree = ""; 83 | }; 84 | 97C146E51CF9000F007C117D = { 85 | isa = PBXGroup; 86 | children = ( 87 | 9740EEB11CF90186004384FC /* Flutter */, 88 | 97C146F01CF9000F007C117D /* Runner */, 89 | 97C146EF1CF9000F007C117D /* Products */, 90 | CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, 91 | ); 92 | sourceTree = ""; 93 | }; 94 | 97C146EF1CF9000F007C117D /* Products */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 97C146EE1CF9000F007C117D /* Runner.app */, 98 | ); 99 | name = Products; 100 | sourceTree = ""; 101 | }; 102 | 97C146F01CF9000F007C117D /* Runner */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, 106 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 107 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 108 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 109 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 110 | 97C147021CF9000F007C117D /* Info.plist */, 111 | 97C146F11CF9000F007C117D /* Supporting Files */, 112 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 113 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 114 | ); 115 | path = Runner; 116 | sourceTree = ""; 117 | }; 118 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 97C146F21CF9000F007C117D /* main.m */, 122 | ); 123 | name = "Supporting Files"; 124 | sourceTree = ""; 125 | }; 126 | /* End PBXGroup section */ 127 | 128 | /* Begin PBXNativeTarget section */ 129 | 97C146ED1CF9000F007C117D /* Runner */ = { 130 | isa = PBXNativeTarget; 131 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 132 | buildPhases = ( 133 | 9740EEB61CF901F6004384FC /* Run Script */, 134 | 97C146EA1CF9000F007C117D /* Sources */, 135 | 97C146EB1CF9000F007C117D /* Frameworks */, 136 | 97C146EC1CF9000F007C117D /* Resources */, 137 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 138 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 139 | ); 140 | buildRules = ( 141 | ); 142 | dependencies = ( 143 | ); 144 | name = Runner; 145 | productName = Runner; 146 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 147 | productType = "com.apple.product-type.application"; 148 | }; 149 | /* End PBXNativeTarget section */ 150 | 151 | /* Begin PBXProject section */ 152 | 97C146E61CF9000F007C117D /* Project object */ = { 153 | isa = PBXProject; 154 | attributes = { 155 | LastUpgradeCheck = 0910; 156 | ORGANIZATIONNAME = "The Chromium Authors"; 157 | TargetAttributes = { 158 | 97C146ED1CF9000F007C117D = { 159 | CreatedOnToolsVersion = 7.3.1; 160 | }; 161 | }; 162 | }; 163 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 164 | compatibilityVersion = "Xcode 3.2"; 165 | developmentRegion = English; 166 | hasScannedForEncodings = 0; 167 | knownRegions = ( 168 | en, 169 | Base, 170 | ); 171 | mainGroup = 97C146E51CF9000F007C117D; 172 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 173 | projectDirPath = ""; 174 | projectRoot = ""; 175 | targets = ( 176 | 97C146ED1CF9000F007C117D /* Runner */, 177 | ); 178 | }; 179 | /* End PBXProject section */ 180 | 181 | /* Begin PBXResourcesBuildPhase section */ 182 | 97C146EC1CF9000F007C117D /* Resources */ = { 183 | isa = PBXResourcesBuildPhase; 184 | buildActionMask = 2147483647; 185 | files = ( 186 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 187 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 188 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 189 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 190 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 191 | ); 192 | runOnlyForDeploymentPostprocessing = 0; 193 | }; 194 | /* End PBXResourcesBuildPhase section */ 195 | 196 | /* Begin PBXShellScriptBuildPhase section */ 197 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 198 | isa = PBXShellScriptBuildPhase; 199 | buildActionMask = 2147483647; 200 | files = ( 201 | ); 202 | inputPaths = ( 203 | ); 204 | name = "Thin Binary"; 205 | outputPaths = ( 206 | ); 207 | runOnlyForDeploymentPostprocessing = 0; 208 | shellPath = /bin/sh; 209 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; 210 | }; 211 | 9740EEB61CF901F6004384FC /* Run Script */ = { 212 | isa = PBXShellScriptBuildPhase; 213 | buildActionMask = 2147483647; 214 | files = ( 215 | ); 216 | inputPaths = ( 217 | ); 218 | name = "Run Script"; 219 | outputPaths = ( 220 | ); 221 | runOnlyForDeploymentPostprocessing = 0; 222 | shellPath = /bin/sh; 223 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 224 | }; 225 | /* End PBXShellScriptBuildPhase section */ 226 | 227 | /* Begin PBXSourcesBuildPhase section */ 228 | 97C146EA1CF9000F007C117D /* Sources */ = { 229 | isa = PBXSourcesBuildPhase; 230 | buildActionMask = 2147483647; 231 | files = ( 232 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, 233 | 97C146F31CF9000F007C117D /* main.m in Sources */, 234 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 235 | ); 236 | runOnlyForDeploymentPostprocessing = 0; 237 | }; 238 | /* End PBXSourcesBuildPhase section */ 239 | 240 | /* Begin PBXVariantGroup section */ 241 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 242 | isa = PBXVariantGroup; 243 | children = ( 244 | 97C146FB1CF9000F007C117D /* Base */, 245 | ); 246 | name = Main.storyboard; 247 | sourceTree = ""; 248 | }; 249 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 250 | isa = PBXVariantGroup; 251 | children = ( 252 | 97C147001CF9000F007C117D /* Base */, 253 | ); 254 | name = LaunchScreen.storyboard; 255 | sourceTree = ""; 256 | }; 257 | /* End PBXVariantGroup section */ 258 | 259 | /* Begin XCBuildConfiguration section */ 260 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 261 | isa = XCBuildConfiguration; 262 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 263 | buildSettings = { 264 | ALWAYS_SEARCH_USER_PATHS = NO; 265 | CLANG_ANALYZER_NONNULL = YES; 266 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 267 | CLANG_CXX_LIBRARY = "libc++"; 268 | CLANG_ENABLE_MODULES = YES; 269 | CLANG_ENABLE_OBJC_ARC = YES; 270 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 271 | CLANG_WARN_BOOL_CONVERSION = YES; 272 | CLANG_WARN_COMMA = YES; 273 | CLANG_WARN_CONSTANT_CONVERSION = YES; 274 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 275 | CLANG_WARN_EMPTY_BODY = YES; 276 | CLANG_WARN_ENUM_CONVERSION = YES; 277 | CLANG_WARN_INFINITE_RECURSION = YES; 278 | CLANG_WARN_INT_CONVERSION = YES; 279 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 280 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 281 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 282 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 283 | CLANG_WARN_STRICT_PROTOTYPES = YES; 284 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 285 | CLANG_WARN_UNREACHABLE_CODE = YES; 286 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 287 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 288 | COPY_PHASE_STRIP = NO; 289 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 290 | ENABLE_NS_ASSERTIONS = NO; 291 | ENABLE_STRICT_OBJC_MSGSEND = YES; 292 | GCC_C_LANGUAGE_STANDARD = gnu99; 293 | GCC_NO_COMMON_BLOCKS = YES; 294 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 295 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 296 | GCC_WARN_UNDECLARED_SELECTOR = YES; 297 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 298 | GCC_WARN_UNUSED_FUNCTION = YES; 299 | GCC_WARN_UNUSED_VARIABLE = YES; 300 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 301 | MTL_ENABLE_DEBUG_INFO = NO; 302 | SDKROOT = iphoneos; 303 | TARGETED_DEVICE_FAMILY = "1,2"; 304 | VALIDATE_PRODUCT = YES; 305 | }; 306 | name = Profile; 307 | }; 308 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 309 | isa = XCBuildConfiguration; 310 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 311 | buildSettings = { 312 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 313 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 314 | DEVELOPMENT_TEAM = S8QB4VV633; 315 | ENABLE_BITCODE = NO; 316 | FRAMEWORK_SEARCH_PATHS = ( 317 | "$(inherited)", 318 | "$(PROJECT_DIR)/Flutter", 319 | ); 320 | INFOPLIST_FILE = Runner/Info.plist; 321 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 322 | LIBRARY_SEARCH_PATHS = ( 323 | "$(inherited)", 324 | "$(PROJECT_DIR)/Flutter", 325 | ); 326 | PRODUCT_BUNDLE_IDENTIFIER = com.example.example; 327 | PRODUCT_NAME = "$(TARGET_NAME)"; 328 | VERSIONING_SYSTEM = "apple-generic"; 329 | }; 330 | name = Profile; 331 | }; 332 | 97C147031CF9000F007C117D /* Debug */ = { 333 | isa = XCBuildConfiguration; 334 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 335 | buildSettings = { 336 | ALWAYS_SEARCH_USER_PATHS = NO; 337 | CLANG_ANALYZER_NONNULL = YES; 338 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 339 | CLANG_CXX_LIBRARY = "libc++"; 340 | CLANG_ENABLE_MODULES = YES; 341 | CLANG_ENABLE_OBJC_ARC = YES; 342 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 343 | CLANG_WARN_BOOL_CONVERSION = YES; 344 | CLANG_WARN_COMMA = YES; 345 | CLANG_WARN_CONSTANT_CONVERSION = YES; 346 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 347 | CLANG_WARN_EMPTY_BODY = YES; 348 | CLANG_WARN_ENUM_CONVERSION = YES; 349 | CLANG_WARN_INFINITE_RECURSION = YES; 350 | CLANG_WARN_INT_CONVERSION = YES; 351 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 352 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 353 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 354 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 355 | CLANG_WARN_STRICT_PROTOTYPES = YES; 356 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 357 | CLANG_WARN_UNREACHABLE_CODE = YES; 358 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 359 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 360 | COPY_PHASE_STRIP = NO; 361 | DEBUG_INFORMATION_FORMAT = dwarf; 362 | ENABLE_STRICT_OBJC_MSGSEND = YES; 363 | ENABLE_TESTABILITY = YES; 364 | GCC_C_LANGUAGE_STANDARD = gnu99; 365 | GCC_DYNAMIC_NO_PIC = NO; 366 | GCC_NO_COMMON_BLOCKS = YES; 367 | GCC_OPTIMIZATION_LEVEL = 0; 368 | GCC_PREPROCESSOR_DEFINITIONS = ( 369 | "DEBUG=1", 370 | "$(inherited)", 371 | ); 372 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 373 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 374 | GCC_WARN_UNDECLARED_SELECTOR = YES; 375 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 376 | GCC_WARN_UNUSED_FUNCTION = YES; 377 | GCC_WARN_UNUSED_VARIABLE = YES; 378 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 379 | MTL_ENABLE_DEBUG_INFO = YES; 380 | ONLY_ACTIVE_ARCH = YES; 381 | SDKROOT = iphoneos; 382 | TARGETED_DEVICE_FAMILY = "1,2"; 383 | }; 384 | name = Debug; 385 | }; 386 | 97C147041CF9000F007C117D /* Release */ = { 387 | isa = XCBuildConfiguration; 388 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 389 | buildSettings = { 390 | ALWAYS_SEARCH_USER_PATHS = NO; 391 | CLANG_ANALYZER_NONNULL = YES; 392 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 393 | CLANG_CXX_LIBRARY = "libc++"; 394 | CLANG_ENABLE_MODULES = YES; 395 | CLANG_ENABLE_OBJC_ARC = YES; 396 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 397 | CLANG_WARN_BOOL_CONVERSION = YES; 398 | CLANG_WARN_COMMA = YES; 399 | CLANG_WARN_CONSTANT_CONVERSION = YES; 400 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 401 | CLANG_WARN_EMPTY_BODY = YES; 402 | CLANG_WARN_ENUM_CONVERSION = YES; 403 | CLANG_WARN_INFINITE_RECURSION = YES; 404 | CLANG_WARN_INT_CONVERSION = YES; 405 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 406 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 407 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 408 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 409 | CLANG_WARN_STRICT_PROTOTYPES = YES; 410 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 411 | CLANG_WARN_UNREACHABLE_CODE = YES; 412 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 413 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 414 | COPY_PHASE_STRIP = NO; 415 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 416 | ENABLE_NS_ASSERTIONS = NO; 417 | ENABLE_STRICT_OBJC_MSGSEND = YES; 418 | GCC_C_LANGUAGE_STANDARD = gnu99; 419 | GCC_NO_COMMON_BLOCKS = YES; 420 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 421 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 422 | GCC_WARN_UNDECLARED_SELECTOR = YES; 423 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 424 | GCC_WARN_UNUSED_FUNCTION = YES; 425 | GCC_WARN_UNUSED_VARIABLE = YES; 426 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 427 | MTL_ENABLE_DEBUG_INFO = NO; 428 | SDKROOT = iphoneos; 429 | TARGETED_DEVICE_FAMILY = "1,2"; 430 | VALIDATE_PRODUCT = YES; 431 | }; 432 | name = Release; 433 | }; 434 | 97C147061CF9000F007C117D /* Debug */ = { 435 | isa = XCBuildConfiguration; 436 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 437 | buildSettings = { 438 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 439 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 440 | ENABLE_BITCODE = NO; 441 | FRAMEWORK_SEARCH_PATHS = ( 442 | "$(inherited)", 443 | "$(PROJECT_DIR)/Flutter", 444 | ); 445 | INFOPLIST_FILE = Runner/Info.plist; 446 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 447 | LIBRARY_SEARCH_PATHS = ( 448 | "$(inherited)", 449 | "$(PROJECT_DIR)/Flutter", 450 | ); 451 | PRODUCT_BUNDLE_IDENTIFIER = com.example.example; 452 | PRODUCT_NAME = "$(TARGET_NAME)"; 453 | VERSIONING_SYSTEM = "apple-generic"; 454 | }; 455 | name = Debug; 456 | }; 457 | 97C147071CF9000F007C117D /* Release */ = { 458 | isa = XCBuildConfiguration; 459 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 460 | buildSettings = { 461 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 462 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 463 | ENABLE_BITCODE = NO; 464 | FRAMEWORK_SEARCH_PATHS = ( 465 | "$(inherited)", 466 | "$(PROJECT_DIR)/Flutter", 467 | ); 468 | INFOPLIST_FILE = Runner/Info.plist; 469 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 470 | LIBRARY_SEARCH_PATHS = ( 471 | "$(inherited)", 472 | "$(PROJECT_DIR)/Flutter", 473 | ); 474 | PRODUCT_BUNDLE_IDENTIFIER = com.example.example; 475 | PRODUCT_NAME = "$(TARGET_NAME)"; 476 | VERSIONING_SYSTEM = "apple-generic"; 477 | }; 478 | name = Release; 479 | }; 480 | /* End XCBuildConfiguration section */ 481 | 482 | /* Begin XCConfigurationList section */ 483 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 484 | isa = XCConfigurationList; 485 | buildConfigurations = ( 486 | 97C147031CF9000F007C117D /* Debug */, 487 | 97C147041CF9000F007C117D /* Release */, 488 | 249021D3217E4FDB00AE95B9 /* Profile */, 489 | ); 490 | defaultConfigurationIsVisible = 0; 491 | defaultConfigurationName = Release; 492 | }; 493 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 494 | isa = XCConfigurationList; 495 | buildConfigurations = ( 496 | 97C147061CF9000F007C117D /* Debug */, 497 | 97C147071CF9000F007C117D /* Release */, 498 | 249021D4217E4FDB00AE95B9 /* Profile */, 499 | ); 500 | defaultConfigurationIsVisible = 0; 501 | defaultConfigurationName = Release; 502 | }; 503 | /* End XCConfigurationList section */ 504 | }; 505 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 506 | } 507 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 56 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 75 | 77 | 83 | 84 | 85 | 86 | 88 | 89 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /example/ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | 4 | @implementation AppDelegate 5 | 6 | - (BOOL)application:(UIApplication *)application 7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GeneratedPluginRegistrant registerWithRegistry:self]; 9 | // Override point for customization after application launch. 10 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /example/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /example/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | example 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /example/ios/Runner/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char* argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /example/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_multi_carousel/carousel.dart'; 3 | 4 | void main() => runApp(MyApp()); 5 | 6 | class MyApp extends StatelessWidget { 7 | // This widget is the root of your application. 8 | @override 9 | Widget build(BuildContext context) { 10 | return MaterialApp( 11 | title: 'Carousel Demo', 12 | home: CarouselExample(), 13 | ); 14 | } 15 | } 16 | 17 | class CarouselExample extends StatelessWidget { 18 | @override 19 | Widget build(BuildContext context) { 20 | return Scaffold( 21 | body: Center( 22 | child: Carousel( 23 | height: 350.0, 24 | width: 350, 25 | initialPage: 3, 26 | allowWrap: false, 27 | type: Types.slideSwiper, 28 | onCarouselTap: (i) { 29 | print("onTap $i"); 30 | }, 31 | indicatorType: IndicatorTypes.bar, 32 | arrowColor: Colors.black, 33 | axis: Axis.horizontal, 34 | showArrow: true, 35 | children: List.generate( 36 | 7, 37 | (i) => Center( 38 | child: 39 | Container(color: Colors.red.withOpacity((i + 1) / 7)), 40 | ))), 41 | ), 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /example/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: example 2 | description: A new Flutter project. 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # Read more about versioning at semver.org. 10 | version: 1.0.0+1 11 | 12 | environment: 13 | sdk: ">=2.0.0-dev.68.0 <3.0.0" 14 | 15 | dependencies: 16 | flutter: 17 | sdk: flutter 18 | 19 | # The following adds the Cupertino Icons font to your application. 20 | # Use with the CupertinoIcons class for iOS style icons. 21 | cupertino_icons: ^0.1.2 22 | flutter_multi_carousel: 23 | path: ../ 24 | 25 | dev_dependencies: 26 | flutter_test: 27 | sdk: flutter 28 | 29 | flutter: 30 | uses-material-design: true 31 | -------------------------------------------------------------------------------- /example/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /flutter_carousel.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /gifs/multi_rotating.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/gifs/multi_rotating.gif -------------------------------------------------------------------------------- /gifs/simple_carousel.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/gifs/simple_carousel.gif -------------------------------------------------------------------------------- /gifs/slide_swipe.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/gifs/slide_swipe.gif -------------------------------------------------------------------------------- /gifs/x_rotating.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/gifs/x_rotating.gif -------------------------------------------------------------------------------- /gifs/y_rotating.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/gifs/y_rotating.gif -------------------------------------------------------------------------------- /gifs/z_rotating.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeekyAnts/flutter-carousel/36cbd0765894f1b8c2f30147f621cae9dab1d15d/gifs/z_rotating.gif -------------------------------------------------------------------------------- /lib/carousel.dart: -------------------------------------------------------------------------------- 1 | library flutter_multi_carousel; 2 | 3 | export 'src/carousel/carousel.dart'; 4 | export 'src/services/type_declaration.dart'; 5 | -------------------------------------------------------------------------------- /lib/src/carousel/carousel.dart: -------------------------------------------------------------------------------- 1 | library carousel; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_multi_carousel/src/carousel/multi_axis_carousel.dart'; 5 | import 'package:flutter_multi_carousel/src/carousel/rotatingcarousel.dart'; 6 | import 'package:flutter_multi_carousel/src/carousel/simple_carousel.dart'; 7 | import 'package:flutter_multi_carousel/src/carousel/slide_swipe.dart'; 8 | import 'package:flutter_multi_carousel/src/carousel/x_rotating_carousel.dart'; 9 | import 'package:flutter_multi_carousel/src/carousel/zrotatingcarousel.dart'; 10 | import 'package:flutter_multi_carousel/src/indicator/index.dart'; 11 | import 'package:flutter_multi_carousel/src/services/renderer.dart'; 12 | import 'package:flutter_multi_carousel/src/services/screen_ratio.dart'; 13 | import 'package:flutter_multi_carousel/src/services/type_declaration.dart'; 14 | 15 | typedef OnCarouselTap = Function(int); 16 | 17 | class Carousel extends StatefulWidget { 18 | final dynamic type; 19 | 20 | ///The scroll Axis of Carousel 21 | final Axis axis; 22 | 23 | final int initialPage; 24 | 25 | dynamic updatePositionCallBack; 26 | 27 | /// call back function triggers when gesture tap is registered 28 | final OnCarouselTap onCarouselTap; 29 | 30 | /// This feild is required. 31 | /// 32 | /// Defines the height of the Carousel 33 | final double height; 34 | 35 | /// Defines the width of the Carousel 36 | final double width; 37 | 38 | final List children; 39 | 40 | /// callBack function on page Change 41 | final onPageChange; 42 | 43 | /// Defines the Color of the active Indicator 44 | final Color activeIndicatorColor; 45 | 46 | ///defines type of indicator to carousel 47 | final dynamic indicatorType; 48 | 49 | final bool showArrow; 50 | 51 | ///defines the arrow colour 52 | final Color arrowColor; 53 | 54 | ///choice to show indicator 55 | final bool showIndicator; 56 | 57 | /// Defines the Color of the non-active Indicator 58 | final Color unActiveIndicatorColor; 59 | 60 | /// Paint the background of indicator with the color provided 61 | /// 62 | /// The default background color is Color(0xff121212) 63 | final Color indicatorBackgroundColor; 64 | 65 | /// Defines if the carousel should wrap once you reach the end or if your at the begining and go left if it should take you to the end 66 | /// 67 | /// The default behavior is to allow wrapping 68 | final bool allowWrap; 69 | 70 | /// Provide opacity to background of the indicator 71 | /// 72 | /// An opacity of 1.0 is fully opaque. An opacity of 0.0 is fully transparent 73 | /// (i.e., invisible). 74 | /// 75 | /// The default value of opacity is 0.5 nothing is initialised. 76 | /// 77 | 78 | final double indicatorBackgroundOpacity; 79 | dynamic updateIndicator; 80 | PageController controller; 81 | int currentPage = 0; 82 | 83 | GlobalKey key; 84 | 85 | Carousel( 86 | {this.key, 87 | @required this.height, 88 | @required this.width, 89 | @required this.type, 90 | this.axis, 91 | this.showArrow, 92 | this.arrowColor, 93 | this.onPageChange, 94 | this.showIndicator = true, 95 | this.indicatorType, 96 | this.indicatorBackgroundOpacity, 97 | this.unActiveIndicatorColor, 98 | this.indicatorBackgroundColor, 99 | this.activeIndicatorColor, 100 | this.allowWrap = true, 101 | this.initialPage, 102 | this.onCarouselTap, 103 | @required this.children}) 104 | : assert(initialPage >= 0 && initialPage < children.length, 105 | "intialPage must be a int value between 0 and length of children"), 106 | super(key: key) { 107 | this.createState(); 108 | } 109 | @override 110 | createState() { 111 | return _CarouselState(); 112 | } 113 | } 114 | 115 | class _CarouselState extends State { 116 | int position = 0; 117 | double animatedFactor; 118 | double offset; 119 | final GlobalKey rendererKey1 = new GlobalKey(); 120 | final GlobalKey rendererKey2 = new GlobalKey(); 121 | @override 122 | void initState() { 123 | // TODO: implement initState 124 | widget.updatePositionCallBack = updatePosition; 125 | super.initState(); 126 | } 127 | 128 | @override 129 | dispose() { 130 | widget.controller.dispose(); 131 | super.dispose(); 132 | } 133 | 134 | updatePosition(int index) { 135 | if (widget.controller.page.round() == widget.children.length - 1) { 136 | rendererKey2.currentState.updateRenderer(false); 137 | } 138 | if (widget.controller.page.round() == widget.children.length - 2) { 139 | rendererKey2.currentState.updateRenderer(false); 140 | } 141 | if (widget.controller.page.round() == 1) { 142 | rendererKey1.currentState.updateRenderer(false); 143 | } 144 | if (widget.controller.page.round() == 0) { 145 | rendererKey1.currentState.updateRenderer(false); 146 | } 147 | } 148 | 149 | scrollPosition(dynamic updateRender, {String function}) { 150 | updateRender(false); 151 | 152 | if ((widget.controller.page.round() == 0 && function == "back") || 153 | widget.controller.page == widget.children.length - 1 && 154 | function != "back") { 155 | if (widget.allowWrap) { 156 | widget.controller.jumpToPage( 157 | widget.controller.page.round() == 0 && function == "back" 158 | ? widget.children.length - 1 159 | : 0); 160 | } 161 | } else { 162 | widget.controller.animateToPage( 163 | (function == "back" 164 | ? (widget.controller.page.round() - 1) 165 | : (widget.controller.page.round() + 1)), 166 | curve: Curves.easeOut, 167 | duration: const Duration(milliseconds: 500)); 168 | } 169 | } 170 | 171 | @override 172 | Widget build(BuildContext context) { 173 | offset = (widget.type.toString().toLowerCase() == "slideswiper" || 174 | widget.type == Types.slideSwiper) 175 | ? 0.8 176 | : 1.0; 177 | Size size = MediaQuery.of(context).size; 178 | ScreenRatio.setScreenRatio(size: size); 179 | animatedFactor = 180 | widget.axis == Axis.horizontal ? widget.width : widget.height; 181 | widget.controller = new PageController( 182 | initialPage: widget.initialPage ?? 0, 183 | keepPage: true, 184 | viewportFraction: offset, 185 | ); 186 | dynamic carousel = _getCarousel(widget); 187 | return Container( 188 | child: Stack( 189 | children: [ 190 | Center( 191 | child: GestureDetector( 192 | child: carousel, 193 | onTap: () { 194 | if (widget.onCarouselTap != null) { 195 | widget.onCarouselTap(widget.controller.page.round()); 196 | } 197 | }, 198 | )), 199 | Center( 200 | child: Container( 201 | height: widget.height, 202 | child: widget.showArrow == null || widget.showArrow == false 203 | ? SizedBox() 204 | : Row( 205 | crossAxisAlignment: CrossAxisAlignment.center, 206 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 207 | children: []..addAll([ 208 | "back", 209 | "forward" 210 | ].map((f) => 211 | Renderer(f == 'back' ? rendererKey1 : rendererKey2, 212 | (updateRender, active) { 213 | return Visibility( 214 | visible: widget.allowWrap 215 | ? true 216 | : (f == 'back' && 217 | widget?.controller?.page 218 | ?.round() == 219 | 0 || 220 | f == 'forward' && 221 | widget.controller.page 222 | ?.round() == 223 | widget.children.length - 1 224 | ? false 225 | : true), 226 | child: GestureDetector( 227 | onTapUp: (d) { 228 | scrollPosition(updateRender, function: f); 229 | }, 230 | onTapDown: (d) { 231 | updateRender(true); 232 | }, 233 | onLongPress: () { 234 | scrollPosition(updateRender, function: f); 235 | }, 236 | child: Container( 237 | height: widget.height / 2, 238 | width: 40.0, 239 | color: active 240 | ? Color(0x77121212) 241 | : Colors.transparent, 242 | child: Icon( 243 | f == "back" 244 | ? Icons.arrow_back_ios 245 | : Icons.arrow_forward_ios, 246 | color: active 247 | ? Colors.white 248 | : widget.arrowColor != null 249 | ? widget.arrowColor 250 | : Colors.black, 251 | ), 252 | ), 253 | ), 254 | ); 255 | }))), 256 | )), 257 | ), 258 | Center( 259 | child: widget.showIndicator != true 260 | ? SizedBox() 261 | : Container( 262 | height: widget.height, 263 | alignment: Alignment.bottomCenter, 264 | child: Wrap( 265 | children: [ 266 | Container( 267 | width: widget.width, 268 | alignment: Alignment.bottomCenter, 269 | color: (widget.indicatorBackgroundColor ?? 270 | Color(0xff121212)) 271 | .withOpacity( 272 | widget.indicatorBackgroundOpacity ?? 0.5), 273 | padding: EdgeInsets.only(bottom: 10.0, top: 10.0), 274 | child: Indicator( 275 | indicatorName: widget.indicatorType, 276 | selectedColor: widget.activeIndicatorColor, 277 | unSelectedColor: widget.unActiveIndicatorColor, 278 | totalPage: widget.children.length, 279 | width: widget.width, 280 | controller: widget.controller, 281 | ), 282 | ), 283 | ], 284 | ), 285 | ), 286 | ), 287 | ], 288 | )); 289 | } 290 | 291 | _getCarousel(Carousel widget) { 292 | dynamic carousel; 293 | dynamic type = widget.type.runtimeType == Types 294 | ? widget.type 295 | : _getType(widget.type.toLowerCase()); 296 | 297 | switch (type) { 298 | case Types.simple: 299 | { 300 | carousel = SimpleCarousel(widget); 301 | } 302 | break; 303 | case Types.slideSwiper: 304 | { 305 | carousel = SlideSwipe(widget); 306 | } 307 | break; 308 | 309 | case Types.xRotating: 310 | { 311 | carousel = XcarouselState(widget); 312 | } 313 | break; 314 | case Types.yRotating: 315 | { 316 | carousel = RotatingCarouselState(widget); 317 | } 318 | break; 319 | case Types.zRotating: 320 | { 321 | carousel = ZcarouselState(widget); 322 | } 323 | break; 324 | case Types.multiRotating: 325 | { 326 | carousel = MultiAxisCarouselState(widget); 327 | } 328 | break; 329 | // default: 330 | // carousel = SimpleCarousel(widget); 331 | // break; 332 | } 333 | return carousel; 334 | } 335 | } 336 | 337 | _getType(String type) { 338 | switch (type) { 339 | case "simple": 340 | { 341 | return Types.simple; 342 | } 343 | break; 344 | case "slideswiper": 345 | { 346 | return Types.slideSwiper; 347 | } 348 | break; 349 | 350 | case "xrotating": 351 | { 352 | return Types.xRotating; 353 | } 354 | break; 355 | case "yrotating": 356 | { 357 | return Types.yRotating; 358 | } 359 | break; 360 | case "zrotating": 361 | { 362 | return Types.zRotating; 363 | } 364 | break; 365 | case "multirotating": 366 | { 367 | return Types.multiRotating; 368 | } 369 | break; 370 | } 371 | } 372 | -------------------------------------------------------------------------------- /lib/src/carousel/multi_axis_carousel.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:math' as math; 3 | 4 | class MultiAxisCarouselState extends StatelessWidget { 5 | int currentPage; 6 | bool initial = true; 7 | final dynamic props; 8 | 9 | MultiAxisCarouselState(this.props) { 10 | currentPage = 0; 11 | } 12 | 13 | initiate(index) { 14 | double value; 15 | if (index == currentPage && initial) value = 0.0; 16 | initial = false; 17 | return value; 18 | } 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | int count = props.children.length; 23 | Widget carouselBuilder = new PageView.builder( 24 | controller: props.controller, 25 | scrollDirection: props.axis, 26 | itemCount: count, 27 | onPageChanged: (i) { 28 | props.updatePositionCallBack(i); 29 | currentPage = i; 30 | if (props.onPageChange != null) { 31 | props.onPageChange(i); 32 | } 33 | }, 34 | itemBuilder: (context, index) => builder(index, props.controller)); 35 | return Center( 36 | child: Container( 37 | height: props.height, 38 | width: props.width, 39 | child: props.axis == Axis.horizontal 40 | ? carouselBuilder 41 | : Container( 42 | child: carouselBuilder, 43 | ), 44 | ), 45 | ); 46 | } 47 | 48 | builder(int index, controller1) { 49 | Matrix4 _pmat(num pv) { 50 | return Matrix4( 51 | 1.0, 0.0, 0.0, 0.0, // 52 | 0.0, 1.0, 0.0, 0.0, // 53 | 0.0, 0.0, 1.0, pv * 0.001, // 54 | 0.0, 0.0, 0.0, 1.0, 55 | ); 56 | } 57 | 58 | Matrix4 perspective = _pmat(1.0); 59 | return AnimatedBuilder( 60 | animation: controller1, 61 | builder: (context, child) { 62 | double value = 1.0; 63 | value = initial 64 | ? initiate(index) ?? 0 65 | // controller1.page - index 66 | : value = controller1.page - index; 67 | value = (1 - (value.abs() * 0.2)).clamp(0.0, 1.0); 68 | return Column( 69 | mainAxisAlignment: MainAxisAlignment.center, 70 | crossAxisAlignment: CrossAxisAlignment.start, 71 | children: [ 72 | RotationTransition( 73 | turns: AlwaysStoppedAnimation(1800 * (value) / 360), 74 | child: Transform( 75 | alignment: FractionalOffset.center, 76 | transform: perspective.scaled(1.0, 1.0, 1.0) 77 | ..rotateX(0.0) 78 | ..rotateY(((value) * 3393) / 90) 79 | ..rotateZ(0.0), 80 | child: Opacity( 81 | opacity: math.pow(value, 4), 82 | child: Container( 83 | color: Colors.green, 84 | height: props.height * value, 85 | width: props.width * value, 86 | child: props.children[index], 87 | ), 88 | ), 89 | ), 90 | ), 91 | ], 92 | ); 93 | }, 94 | ); 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /lib/src/carousel/rotatingcarousel.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:math'; 3 | 4 | class RotatingCarouselState extends StatelessWidget { 5 | int currentPage; 6 | bool initial = true; 7 | final dynamic props; 8 | 9 | RotatingCarouselState(this.props) { 10 | currentPage = 0; 11 | } 12 | 13 | initiate(index) { 14 | double value; 15 | if (index == currentPage && initial) value = 0.0; 16 | initial = false; 17 | return value; 18 | } 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | int count = props.children.length; 23 | 24 | Widget caroselBuilder = new PageView.builder( 25 | scrollDirection: props.axis, 26 | controller: props.controller, 27 | itemCount: count, 28 | onPageChanged: (i) { 29 | props.updatePositionCallBack(i); 30 | if (props.onPageChange != null) { 31 | props.onPageChange(i); 32 | } 33 | currentPage = i; 34 | }, 35 | itemBuilder: (context, index) => builder(index, props.controller)); 36 | return new Center( 37 | child: new Container( 38 | height: props.height, 39 | width: props.width, 40 | child: props.axis == Axis.horizontal 41 | ? caroselBuilder 42 | : Container( 43 | child: caroselBuilder, 44 | ), 45 | )); 46 | } 47 | 48 | builder(int index, controller1) { 49 | return new AnimatedBuilder( 50 | animation: controller1, 51 | builder: (context, child) { 52 | double value = 1.0; 53 | value = initial 54 | ? initiate(index) ?? 55 | // controller1.page - index 56 | 0 57 | : controller1.page - index; 58 | value = (1 - (value.abs() * .2)).clamp(0.0, 1.0); 59 | return new RotationTransition( 60 | turns: new AlwaysStoppedAnimation((value * ((180 * 6))) / 180), 61 | child: new Column( 62 | mainAxisAlignment: MainAxisAlignment.center, 63 | crossAxisAlignment: CrossAxisAlignment.start, 64 | children: [ 65 | new Opacity( 66 | opacity: pow(value, 4), 67 | child: new Material( 68 | borderRadius: new BorderRadius.circular( 69 | (5 - ((1.0 - value) * 25)).clamp(0.1, 5.0)), 70 | elevation: (value > 0.9 ? 50.0 : 0.0), 71 | child: new Container( 72 | height: props.height * value, 73 | width: props.width * value, 74 | child: props.children[index], 75 | ), 76 | ), 77 | ), 78 | ], 79 | ), 80 | ); 81 | }, 82 | ); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /lib/src/carousel/simple_carousel.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:math' as math; 3 | 4 | class SimpleCarousel extends StatelessWidget { 5 | Widget carouserBuilder; 6 | int currentPage; 7 | bool initial = true; 8 | final dynamic props; 9 | 10 | SimpleCarousel(this.props); 11 | 12 | initiate(index) { 13 | double value; 14 | if (index == currentPage && initial) value = 0.0; 15 | initial = false; 16 | return value; 17 | } 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | initial = true; 22 | currentPage = 0; 23 | carouserBuilder = new PageView.builder( 24 | scrollDirection: props.axis, 25 | controller: props.controller, 26 | itemCount: props.children.length, 27 | onPageChanged: (i) { 28 | props.updatePositionCallBack(i); 29 | currentPage = i; 30 | if (props.onPageChange != null) { 31 | props.onPageChange(i); 32 | } 33 | }, 34 | itemBuilder: (context, index) => builder(index, props.controller)); 35 | return new Column( 36 | mainAxisAlignment: MainAxisAlignment.center, 37 | children: [ 38 | new Container( 39 | color: Colors.transparent, 40 | height: props.height, 41 | width: props.width, 42 | child: props.axis == Axis.horizontal 43 | ? carouserBuilder 44 | : Container( 45 | child: carouserBuilder, 46 | ), 47 | ), 48 | ], 49 | ); 50 | } 51 | 52 | builder(int index, PageController controller1) { 53 | initial = true; 54 | return new AnimatedBuilder( 55 | animation: controller1, 56 | builder: (context, child) { 57 | double value = 1.0; 58 | value = initial 59 | ? initiate(index) ?? 60 | // controller1?.page - index 61 | // 3 62 | 0 63 | : controller1.page - index; 64 | value = (1 - (value.abs())).clamp(0.0, 1.0); 65 | 66 | return new Column( 67 | mainAxisAlignment: MainAxisAlignment.center, 68 | children: [ 69 | new Opacity( 70 | opacity: math.pow(value, 1.2), 71 | child: Column( 72 | mainAxisAlignment: MainAxisAlignment.center, 73 | children: [ 74 | new Container( 75 | height: (props.height) * math.pow(value, 5), 76 | width: (props.width) * math.pow(value, 5), 77 | child: props.children[index], 78 | ), 79 | ], 80 | ), 81 | ), 82 | ], 83 | ); 84 | }, 85 | ); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /lib/src/carousel/slide_swipe.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | import 'package:flutter/material.dart'; 3 | 4 | import '../../carousel.dart'; 5 | 6 | class SlideSwipe extends StatelessWidget { 7 | int currentPage; 8 | bool initial; 9 | final Carousel props; 10 | 11 | SlideSwipe(this.props); 12 | 13 | initiate(index) { 14 | try { 15 | currentPage = props.controller.initialPage.round(); 16 | } catch (e) { 17 | print("exception here => $e"); 18 | } 19 | double value; 20 | if (index == currentPage - 1 && initial) value = 1.0; 21 | if (index == currentPage && initial) value = 0.0; 22 | if (index == currentPage + 1 && initial) { 23 | value = 1.0; 24 | initial = false; 25 | } 26 | return value; 27 | } 28 | 29 | @override 30 | Widget build(BuildContext context) { 31 | currentPage = 0; 32 | initial = true; 33 | int count = props.children.length; 34 | Widget carouserBuilder = PageView.builder( 35 | scrollDirection: props.axis, 36 | controller: props.controller, 37 | itemCount: count, 38 | onPageChanged: (i) { 39 | props.updatePositionCallBack(i); 40 | if (props.onPageChange != null) { 41 | props.onPageChange(i); 42 | } 43 | currentPage = i; 44 | }, 45 | itemBuilder: (context, index) => builder(index, props.controller)); 46 | return Column( 47 | mainAxisAlignment: MainAxisAlignment.center, 48 | children: [ 49 | Container( 50 | height: props.height, 51 | width: props.width, 52 | child: props.axis == Axis.horizontal 53 | ? carouserBuilder 54 | : Container( 55 | child: carouserBuilder, 56 | ), 57 | ), 58 | ], 59 | ); 60 | } 61 | 62 | builder(int index, PageController controller1) { 63 | return AnimatedBuilder( 64 | animation: controller1, 65 | builder: (context, child) { 66 | double value = 1.0; 67 | value = initial 68 | ? initiate(index) ?? controller1.page - index 69 | : controller1.page - index; 70 | value = (1 - (value.abs() * .2)).clamp(0.0, 1.0); 71 | return Opacity( 72 | opacity: pow(value, 4), 73 | child: Column( 74 | mainAxisAlignment: MainAxisAlignment.center, 75 | children: [ 76 | Center( 77 | child: Container( 78 | height: (props.height - 79 | (props.axis == Axis.vertical 80 | ? props.height / 5 81 | : 0.0)) * 82 | (props.axis == Axis.vertical ? 1.0 : value), 83 | width: props.width * value, 84 | child: props.children[index], 85 | alignment: Alignment.center, 86 | ), 87 | ), 88 | ], 89 | ), 90 | ); 91 | }, 92 | ); 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /lib/src/carousel/x_rotating_carousel.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:math' as math; 3 | 4 | class XcarouselState extends StatelessWidget { 5 | int currentPage; 6 | bool initial = true; 7 | final dynamic props; 8 | 9 | XcarouselState(this.props) { 10 | currentPage = 0; 11 | } 12 | 13 | initiate(index) { 14 | double value; 15 | if (index == currentPage && initial) value = 0.0; 16 | initial = false; 17 | return value; 18 | } 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | int count = props.children.length; 23 | initial = true; 24 | Widget caouselBuilder = new PageView.builder( 25 | controller: props.controller, 26 | scrollDirection: props.axis, 27 | itemCount: count, 28 | onPageChanged: (i) { 29 | props.updatePositionCallBack(i); 30 | if (props.onPageChange != null) { 31 | props.onPageChange(i); 32 | } 33 | currentPage = i; 34 | }, 35 | itemBuilder: (context, index) => builder(index)); 36 | return Center( 37 | child: new Container( 38 | height: props.height, 39 | width: props.width, 40 | margin: new EdgeInsets.only(bottom: 5.0), 41 | child: props.axis == Axis.horizontal 42 | ? caouselBuilder 43 | : Container( 44 | child: caouselBuilder, 45 | ), 46 | ), 47 | ); 48 | } 49 | 50 | builder( 51 | int index, 52 | ) { 53 | Matrix4 _pmat(num pv) { 54 | return new Matrix4( 55 | 1.0, 0.0, 0.0, 0.0, // 56 | 0.0, 1.0, 0.0, 0.0, // 57 | 0.0, 0.0, 1.0, pv * 0.001, // 58 | 0.0, 0.0, 0.0, 1.0, 59 | ); 60 | } 61 | 62 | Matrix4 perspective = _pmat(1.0); 63 | return new AnimatedBuilder( 64 | animation: props.controller, 65 | builder: (context, child) { 66 | double value = 1.0; 67 | value = initial 68 | ? initiate(index) ?? 69 | // props.controller.page - index 70 | 0 71 | : props.controller.page - index; 72 | value = (1 - (value.abs())).clamp(0.0, 1.0); 73 | return new Transform( 74 | alignment: FractionalOffset.center, 75 | transform: perspective.scaled(1.0, 1.0, 1.0) 76 | ..rotateX((value * ((180 * 6) + 50.0)) / 180) 77 | ..rotateY(0.0) 78 | ..rotateZ(0.0), 79 | child: new Opacity( 80 | opacity: math.pow(value, 4), 81 | child: new Material( 82 | elevation: (value > 0.9 ? 50.0 : 0.0), 83 | child: new Container( 84 | height: (props.height) * value, 85 | width: props.width, 86 | child: props.children[index], 87 | ), 88 | ), 89 | ), 90 | ); 91 | }, 92 | ); 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /lib/src/carousel/zrotatingcarousel.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:math' as math; 3 | 4 | class ZcarouselState extends StatelessWidget { 5 | int currentPage; 6 | bool initial = true; 7 | final dynamic props; 8 | 9 | ZcarouselState( 10 | this.props, 11 | ) { 12 | currentPage = 0; 13 | } 14 | 15 | initiate(index) { 16 | double value; 17 | if (index == currentPage && initial) value = 0.0; 18 | initial = false; 19 | return value; 20 | } 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | int count = props.children.length; 25 | 26 | Widget carouselBuilder = new PageView.builder( 27 | controller: props.controller, 28 | scrollDirection: props.axis, 29 | itemCount: count, 30 | onPageChanged: (i) { 31 | props._updatePositionCallBack(i); 32 | if (props.onPageChange != null) { 33 | props.onPageChange(i); 34 | } 35 | currentPage = i; 36 | }, 37 | itemBuilder: (context, index) => builder(index)); 38 | return Center( 39 | child: new Container( 40 | height: props.height, 41 | width: props.width, 42 | child: props.axis == Axis.horizontal 43 | ? carouselBuilder 44 | : Container( 45 | child: carouselBuilder, 46 | ), 47 | ), 48 | ); 49 | } 50 | 51 | builder(int index) { 52 | Matrix4 _pmat(num pv) { 53 | return new Matrix4( 54 | 1.0, 0.0, 0.0, 0.0, // 55 | 0.0, 1.0, 0.0, 0.0, // 56 | 0.0, 0.0, 1.0, pv * 0.001, // 57 | 0.0, 0.0, 0.0, 1.0, 58 | ); 59 | } 60 | 61 | Matrix4 perspective = _pmat(1.0); 62 | return new AnimatedBuilder( 63 | animation: props.controller, 64 | builder: (context, child) { 65 | double value = 1.0; 66 | value = initial 67 | ? initiate(index) ?? 68 | // props.controller.page - index 69 | 0 70 | : value = props.controller.page - index; 71 | value = (1 - (value.abs() * 0.2)).clamp(0.0, 1.0); 72 | return new Column( 73 | mainAxisAlignment: MainAxisAlignment.center, 74 | crossAxisAlignment: CrossAxisAlignment.center, 75 | children: [ 76 | new Transform( 77 | alignment: FractionalOffset.center, 78 | transform: perspective.scaled(1.0, 1.0, 1.0) 79 | ..rotateX(0.0) 80 | ..rotateY(((value) * 3393) / 90) 81 | ..rotateZ(0.0), 82 | child: new Opacity( 83 | opacity: math.pow(value, 2), 84 | child: new Material( 85 | borderRadius: new BorderRadius.circular( 86 | (5 - ((1.0 - value) * 25)).clamp(0.1, 5.0)), 87 | elevation: (value > 0.9 ? 50.0 : 0.0), 88 | child: new Container( 89 | height: props.height * value, 90 | width: props.width * value, 91 | child: props.children[index], 92 | ), 93 | ), 94 | ), 95 | ), 96 | ], 97 | ); 98 | }, 99 | ); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /lib/src/indicator/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_multi_carousel/src/indicator/widget/bar_indicator.dart'; 2 | import 'package:flutter_multi_carousel/src/indicator/widget/bubble_indicator.dart'; 3 | import 'package:flutter_multi_carousel/src/indicator/widget/dot_indicator.dart'; 4 | import 'package:flutter_multi_carousel/src/indicator/widget/props.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:flutter_multi_carousel/src/services/type_declaration.dart'; 7 | 8 | class Indicator extends StatelessWidget { 9 | final int currentPage; 10 | final dynamic indicatorName; 11 | final Color selectedColor; 12 | final Color unSelectedColor; 13 | final int totalPage; 14 | final double width; 15 | final PageController controller; 16 | 17 | Indicator({ 18 | this.currentPage, 19 | this.indicatorName, 20 | this.selectedColor, 21 | this.unSelectedColor, 22 | this.width, 23 | this.totalPage, 24 | this.controller, 25 | }); 26 | 27 | @override 28 | Widget build(BuildContext context) { 29 | Props props = Props( 30 | currentPage: currentPage, 31 | selectedColor: selectedColor, 32 | totalPage: this.totalPage, 33 | unSelectedColor: unSelectedColor, 34 | width: width, 35 | controller: controller); 36 | return getIndicator(indicatorName, props); 37 | } 38 | } 39 | 40 | Widget getIndicator( 41 | var indicatorName, 42 | Props props, 43 | ) { 44 | IndicatorTypes indicatorType = indicatorName.runtimeType == IndicatorTypes 45 | ? indicatorName 46 | : _getIndicatorType(indicatorName); 47 | 48 | Widget indicator; 49 | 50 | switch (indicatorType) { 51 | case IndicatorTypes.bar: 52 | { 53 | indicator = BarIndicator( 54 | props: props, 55 | ); 56 | } 57 | break; 58 | case IndicatorTypes.bubble: 59 | { 60 | indicator = BubbleIndicator( 61 | props: props, 62 | ); 63 | } 64 | break; 65 | case IndicatorTypes.dot: 66 | { 67 | indicator = DotIndicator( 68 | props: props, 69 | ); 70 | } 71 | break; 72 | default: 73 | return SizedBox(); 74 | } 75 | return indicator; 76 | } 77 | 78 | IndicatorTypes _getIndicatorType(String indicatorName) { 79 | switch (indicatorName) { 80 | case "bar": 81 | { 82 | return IndicatorTypes.bar; 83 | } 84 | break; 85 | case "bubble": 86 | { 87 | return IndicatorTypes.bubble; 88 | } 89 | break; 90 | case "dot": 91 | { 92 | return IndicatorTypes.dot; 93 | } 94 | break; 95 | default: 96 | return null; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /lib/src/indicator/widget/bar_indicator.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_multi_carousel/src/indicator/widget/props.dart'; 3 | 4 | class BarIndicator extends AnimatedWidget { 5 | final Props props; 6 | BarIndicator({this.props}) : super(listenable: props.controller); 7 | @override 8 | Widget build(BuildContext context) { 9 | return new Container( 10 | alignment: Alignment.topLeft, 11 | height: 4.0, 12 | width: ((props.width) * .80), 13 | color: props.unSelectedColor ?? Color(0xff4C5158), 14 | padding: new EdgeInsets.only( 15 | left: (((props.width * 0.8) / props.totalPage) * 16 | (props.controller.page ?? props.controller.initialPage)), 17 | ), 18 | child: new Container( 19 | width: (props.width * 0.8) / props.totalPage, 20 | color: props.selectedColor ?? Colors.black, 21 | )); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/src/indicator/widget/bubble_indicator.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:math'; 3 | import 'package:flutter_multi_carousel/src/indicator/widget/props.dart'; 4 | import 'package:flutter_multi_carousel/src/services/screen_ratio.dart'; 5 | 6 | class BubbleIndicator extends AnimatedWidget { 7 | final Props props; 8 | BubbleIndicator({ 9 | this.props, 10 | }) : super(listenable: props.controller); 11 | transformValue(index) { 12 | if (props.controller.hasClients) { 13 | return props.controller.hasClients 14 | ? 1.0 + 15 | (Curves.easeOut.transform( 16 | max( 17 | 0.0, 18 | 1.0 - 19 | ((props.controller.page ?? props.controller.initialPage) - 20 | index) 21 | .abs(), 22 | ), 23 | )) 24 | : 1.0; 25 | } 26 | } 27 | 28 | @override 29 | Widget build(BuildContext context) { 30 | double wf = ScreenRatio.widthRatio; 31 | return new Container( 32 | alignment: Alignment.topLeft, 33 | height: 40.0, 34 | child: Center( 35 | child: Row( 36 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 37 | children: [] 38 | ..addAll(List.generate(props.totalPage, (int index) { 39 | return Center( 40 | child: Container( 41 | width: 42 | ((props.width * wf) / props.totalPage).clamp(2.0, 40.0), 43 | child: Center( 44 | child: Container( 45 | height: (((props.width * wf) / (props.totalPage * 2)) 46 | .clamp(1.0, 8.0)) * 47 | transformValue(index), 48 | width: (((props.width * wf) / (props.totalPage * 2)) 49 | .clamp(1.0, 8.0)) * 50 | transformValue(index), 51 | decoration: BoxDecoration( 52 | shape: BoxShape.circle, 53 | color: props.selectedColor ?? Colors.white), 54 | ), 55 | ), 56 | ), 57 | ); 58 | }))), 59 | ), 60 | ); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /lib/src/indicator/widget/dot_indicator.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_multi_carousel/src/indicator/widget/props.dart'; 4 | import 'package:flutter_multi_carousel/src/services/screen_ratio.dart'; 5 | 6 | class DotIndicator extends AnimatedWidget { 7 | Color selectedColor; 8 | Color unselectedColor; 9 | Animatable background; 10 | final Props props; 11 | final double wf = ScreenRatio.widthRatio; 12 | 13 | DotIndicator({this.props}) : super(listenable: props.controller) { 14 | selectedColor = props.selectedColor ?? Colors.white; 15 | unselectedColor = props.unSelectedColor ?? Colors.transparent; 16 | background = TweenSequence([ 17 | TweenSequenceItem( 18 | weight: 1.0, 19 | tween: ColorTween( 20 | begin: unselectedColor, 21 | end: selectedColor, 22 | ), 23 | ), 24 | ]); 25 | } 26 | 27 | transformValue(index) { 28 | double value; 29 | if (props.controller.hasClients) { 30 | value = max( 31 | 0.0, 32 | 1.0 - 33 | ((props.controller.page ?? props.controller.initialPage) - index) 34 | .abs(), 35 | ); 36 | } 37 | return value ?? 0.0; 38 | } 39 | 40 | @override 41 | Widget build(BuildContext context) { 42 | return new Container( 43 | alignment: Alignment.topLeft, 44 | height: 20.0, 45 | child: Row( 46 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 47 | children: []..addAll(List.generate( 48 | props.totalPage, 49 | (int index) => Container( 50 | child: Center( 51 | child: AnimatedContainer( 52 | duration: Duration(milliseconds: 100), 53 | height: (((props.width * wf) / (props.totalPage)) 54 | .clamp(1.0, 8.0)), 55 | width: (((props.width * wf) / (props.totalPage)) 56 | .clamp(1.0, 8.0)), 57 | decoration: BoxDecoration( 58 | shape: BoxShape.circle, 59 | border: Border.all(color: selectedColor), 60 | color: transformValue(index) > 0.1 61 | ? background.evaluate(AlwaysStoppedAnimation( 62 | transformValue(index))) 63 | : unselectedColor), 64 | ), 65 | ), 66 | )).toList()), 67 | )); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /lib/src/indicator/widget/props.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Props { 4 | final int currentPage; 5 | final Color selectedColor; 6 | final Color unSelectedColor; 7 | final int totalPage; 8 | final double width; 9 | final PageController controller; 10 | Props( 11 | {this.totalPage, 12 | this.selectedColor, 13 | this.unSelectedColor, 14 | this.currentPage, 15 | this.width, 16 | this.controller}); 17 | } 18 | -------------------------------------------------------------------------------- /lib/src/services/renderer.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | typedef OnCall = Function(bool); 4 | typedef Widget Builder(OnCall rebuild, bool active); 5 | 6 | class Renderer extends StatefulWidget { 7 | final Builder builder; 8 | final Key key; 9 | Renderer(this.key, this.builder) : super(key: key); 10 | 11 | @override 12 | RendererState createState() => RendererState(); 13 | } 14 | 15 | class RendererState extends State { 16 | int data; 17 | bool active; 18 | 19 | @override 20 | initState() { 21 | super.initState(); 22 | active = false; 23 | } 24 | 25 | updateRenderer(bool status, [String a]) { 26 | setState(() { 27 | active = status; 28 | }); 29 | } 30 | 31 | @override 32 | Widget build(BuildContext context) { 33 | return widget.builder(updateRenderer, active); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/src/services/screen_ratio.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ScreenRatio { 4 | static double heightRatio; 5 | static double widthRatio; 6 | 7 | static setScreenRatio({context, Size size}) { 8 | // Size size = MediaQuery.of(context).size; 9 | heightRatio = size.height / 667.0; 10 | widthRatio = size.width / 375.0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/src/services/type_declaration.dart: -------------------------------------------------------------------------------- 1 | enum Types { 2 | simple, 3 | slideSwiper, 4 | xRotating, 5 | yRotating, 6 | zRotating, 7 | multiRotating 8 | } 9 | enum IndicatorTypes { bar, dot, bubble } 10 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.3.0" 11 | boolean_selector: 12 | dependency: transitive 13 | description: 14 | name: boolean_selector 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "1.0.5" 18 | charcode: 19 | dependency: transitive 20 | description: 21 | name: charcode 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "1.1.2" 25 | collection: 26 | dependency: transitive 27 | description: 28 | name: collection 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.14.11" 32 | flutter: 33 | dependency: "direct main" 34 | description: flutter 35 | source: sdk 36 | version: "0.0.0" 37 | flutter_test: 38 | dependency: "direct dev" 39 | description: flutter 40 | source: sdk 41 | version: "0.0.0" 42 | matcher: 43 | dependency: transitive 44 | description: 45 | name: matcher 46 | url: "https://pub.dartlang.org" 47 | source: hosted 48 | version: "0.12.5" 49 | meta: 50 | dependency: transitive 51 | description: 52 | name: meta 53 | url: "https://pub.dartlang.org" 54 | source: hosted 55 | version: "1.1.7" 56 | path: 57 | dependency: transitive 58 | description: 59 | name: path 60 | url: "https://pub.dartlang.org" 61 | source: hosted 62 | version: "1.6.4" 63 | pedantic: 64 | dependency: transitive 65 | description: 66 | name: pedantic 67 | url: "https://pub.dartlang.org" 68 | source: hosted 69 | version: "1.8.0+1" 70 | quiver: 71 | dependency: transitive 72 | description: 73 | name: quiver 74 | url: "https://pub.dartlang.org" 75 | source: hosted 76 | version: "2.0.5" 77 | sky_engine: 78 | dependency: transitive 79 | description: flutter 80 | source: sdk 81 | version: "0.0.99" 82 | source_span: 83 | dependency: transitive 84 | description: 85 | name: source_span 86 | url: "https://pub.dartlang.org" 87 | source: hosted 88 | version: "1.5.5" 89 | stack_trace: 90 | dependency: transitive 91 | description: 92 | name: stack_trace 93 | url: "https://pub.dartlang.org" 94 | source: hosted 95 | version: "1.9.3" 96 | stream_channel: 97 | dependency: transitive 98 | description: 99 | name: stream_channel 100 | url: "https://pub.dartlang.org" 101 | source: hosted 102 | version: "2.0.0" 103 | string_scanner: 104 | dependency: transitive 105 | description: 106 | name: string_scanner 107 | url: "https://pub.dartlang.org" 108 | source: hosted 109 | version: "1.0.5" 110 | term_glyph: 111 | dependency: transitive 112 | description: 113 | name: term_glyph 114 | url: "https://pub.dartlang.org" 115 | source: hosted 116 | version: "1.1.0" 117 | test_api: 118 | dependency: transitive 119 | description: 120 | name: test_api 121 | url: "https://pub.dartlang.org" 122 | source: hosted 123 | version: "0.2.5" 124 | typed_data: 125 | dependency: transitive 126 | description: 127 | name: typed_data 128 | url: "https://pub.dartlang.org" 129 | source: hosted 130 | version: "1.1.6" 131 | vector_math: 132 | dependency: transitive 133 | description: 134 | name: vector_math 135 | url: "https://pub.dartlang.org" 136 | source: hosted 137 | version: "2.0.8" 138 | sdks: 139 | dart: ">=2.2.2 <3.0.0" 140 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_multi_carousel 2 | description: A simple Carousel Package with multiple types and configurations. 3 | version: 1.0.3 4 | author: Shubham Jaiswal 5 | homepage: https://github.com/GeekyAnts/flutter-carousel 6 | 7 | environment: 8 | sdk: ">=2.0.0-dev.68.0 <3.0.0" 9 | 10 | dependencies: 11 | flutter: 12 | sdk: flutter 13 | 14 | dev_dependencies: 15 | flutter_test: 16 | sdk: flutter 17 | flutter: 18 | -------------------------------------------------------------------------------- /test/flutter_carousel_test.dart: -------------------------------------------------------------------------------- 1 | void main() {} 2 | --------------------------------------------------------------------------------