intro_slider 2.2.8

FLUTTER INTRO SLIDER

Flutter Intro Slider is a flutter plugin that helps you make a cool intro for your app. Create intro has never been easier and faster

Table of Contents #

Installing #

Add to pubspec.yaml file

dependencies:
  intro_slider: ^2.2.8

Import

import 'package:intro_slider/intro_slider.dart';

Demo #

default custom 1 custom 2

Code example #

Default config #

default config image

Code example (click to expand)
class IntroScreenState extends State<IntroScreen> {
  List<Slide> slides = new List();

  @override
  void initState() {
    super.initState();

    slides.add(
      new Slide(
        title: "ERASER",
        description: "Allow miles wound place the leave had. To sitting subject no improve studied limited",
        pathImage: "images/photo_eraser.png",
        backgroundColor: Color(0xfff5a623),
      ),
    );
    slides.add(
      new Slide(
        title: "PENCIL",
        description: "Ye indulgence unreserved connection alteration appearance",
        pathImage: "images/photo_pencil.png",
        backgroundColor: Color(0xff203152),
      ),
    );
    slides.add(
      new Slide(
        title: "RULER",
        description:
        "Much evil soon high in hope do view. Out may few northward believing attempted. Yet timed being songs marry one defer men our. Although finished blessing do of",
        pathImage: "images/photo_ruler.png",
        backgroundColor: Color(0xff9932CC),
      ),
    );
  }

  void onDonePress() {
    // Do what you want
  }

  @override
  Widget build(BuildContext context) {
    return new IntroSlider(
      slides: this.slides,
      onDonePress: this.onDonePress,
    );
  }
}

Custom config #

custom config image

Code example (click to expand)
class IntroScreenState extends State<IntroScreen> {
  List<Slide> slides = new List();

  @override
  void initState() {
    super.initState();

    slides.add(
      new Slide(
        title:
            "A VERY LONG TITLE A VERY LONG TITLE A VERY LONG TITLE A VERY LONG TITLE A VERY LONG TITLE A VERY LONG TITLE A VERY LONG TITLE A VERY LONG TITLE A VERY LONG TITLE",
        maxLineTitle: 2,
        styleTitle:
            TextStyle(color: Colors.white, fontSize: 30.0, fontWeight: FontWeight.bold, fontFamily: 'RobotoMono'),
        description:
            "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc,",
        styleDescription:
            TextStyle(color: Colors.white, fontSize: 20.0, fontStyle: FontStyle.italic, fontFamily: 'Raleway'),
        marginDescription: EdgeInsets.only(left: 20.0, right: 20.0, top: 20.0, bottom: 70.0),
        centerWidget: Text("Replace this with a custom widget", style: TextStyle(color: Colors.white)),
        colorBegin: Color(0xffFFDAB9),
        colorEnd: Color(0xff40E0D0),
        backgroundImage: 'images/photo_eraser.png',
        directionColorBegin: Alignment.topLeft,
        directionColorEnd: Alignment.bottomRight,
        onCenterItemPress: () {},
      ),
    );
    slides.add(
      new Slide(
        title: "MUSEUM",
        styleTitle:
            TextStyle(color: Color(0xffD02090), fontSize: 30.0, fontWeight: FontWeight.bold, fontFamily: 'RobotoMono'),
        description: "Ye indulgence unreserved connection alteration appearance",
        styleDescription:
            TextStyle(color: Color(0xffD02090), fontSize: 20.0, fontStyle: FontStyle.italic, fontFamily: 'Raleway'),
        pathImage: "images/photo_museum.png",
        colorBegin: Color(0xffFFFACD),
        colorEnd: Color(0xffFF6347),
        directionColorBegin: Alignment.topRight,
        directionColorEnd: Alignment.bottomLeft,
      ),
    );
    slides.add(
      new Slide(
        title: "COFFEE",
        styleTitle:
            TextStyle(color: Color(0xffD02090), fontSize: 30.0, fontWeight: FontWeight.bold, fontFamily: 'RobotoMono'),
        description:
            "Much evil soon high in hope do view. Out may few northward believing attempted. Yet timed being songs marry one defer men our. Although finished blessing do of",
        styleDescription:
            TextStyle(color: Color(0xffD02090), fontSize: 20.0, fontStyle: FontStyle.italic, fontFamily: 'Raleway'),
        pathImage: "images/photo_coffee_shop.png",
        colorBegin: Color(0xffFFA500),
        colorEnd: Color(0xff7FFFD4),
        directionColorBegin: Alignment.topCenter,
        directionColorEnd: Alignment.bottomCenter,
        maxLineTextDescription: 3,
      ),
    );
  }

  void onDonePress() {
    // Do what you want
    Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => HomeScreen()),
    );
  }

  Widget renderNextBtn() {
    return Icon(
      Icons.navigate_next,
      color: Color(0xffD02090),
      size: 35.0,
    );
  }

  Widget renderDoneBtn() {
    return Icon(
      Icons.done,
      color: Color(0xffD02090),
    );
  }

  Widget renderSkipBtn() {
    return Icon(
      Icons.skip_next,
      color: Color(0xffD02090),
    );
  }

  @override
  Widget build(BuildContext context) {
    return new IntroSlider(
      // List slides
      slides: this.slides,

      // Skip button
      renderSkipBtn: this.renderSkipBtn(),
      colorSkipBtn: Color(0x33000000),
      highlightColorSkipBtn: Color(0xff000000),

      // Next button
      renderNextBtn: this.renderNextBtn(),

      // Done button
      renderDoneBtn: this.renderDoneBtn(),
      onDonePress: this.onDonePress,
      colorDoneBtn: Color(0x33000000),
      highlightColorDoneBtn: Color(0xff000000),

      // Dot indicator
      colorDot: Color(0x33D02090),
      colorActiveDot: Color(0xffD02090),
      sizeDot: 13.0,

      // Show or hide status bar
      shouldHideStatusBar: true,
      backgroundColorAllSlides: Colors.grey,
    );
  }
}

Custom your own tabs #

custom config image

Code example (click to expand)
class IntroScreenState extends State<IntroScreen> {
  List<Slide> slides = new List();

  Function goToTab;

  @override
  void initState() {
    super.initState();

    slides.add(
      new Slide(
        title: "SCHOOL",
        styleTitle:
            TextStyle(color: Color(0xff3da4ab), fontSize: 30.0, fontWeight: FontWeight.bold, fontFamily: 'RobotoMono'),
        description:
            "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.",
        styleDescription:
            TextStyle(color: Color(0xfffe9c8f), fontSize: 20.0, fontStyle: FontStyle.italic, fontFamily: 'Raleway'),
        pathImage: "images/photo_school.png",
      ),
    );
    slides.add(
      new Slide(
        title: "MUSEUM",
        styleTitle:
            TextStyle(color: Color(0xff3da4ab), fontSize: 30.0, fontWeight: FontWeight.bold, fontFamily: 'RobotoMono'),
        description: "Ye indulgence unreserved connection alteration appearance",
        styleDescription:
            TextStyle(color: Color(0xfffe9c8f), fontSize: 20.0, fontStyle: FontStyle.italic, fontFamily: 'Raleway'),
        pathImage: "images/photo_museum.png",
      ),
    );
    slides.add(
      new Slide(
        title: "COFFEE SHOP",
        styleTitle:
            TextStyle(color: Color(0xff3da4ab), fontSize: 30.0, fontWeight: FontWeight.bold, fontFamily: 'RobotoMono'),
        description:
            "Much evil soon high in hope do view. Out may few northward believing attempted. Yet timed being songs marry one defer men our. Although finished blessing do of",
        styleDescription:
            TextStyle(color: Color(0xfffe9c8f), fontSize: 20.0, fontStyle: FontStyle.italic, fontFamily: 'Raleway'),
        pathImage: "images/photo_coffee_shop.png",
      ),
    );
  }

  void onDonePress() {
    // Back to the first tab
    this.goToTab(0);
  }

  void onTabChangeCompleted(index) {
    // Index of current tab is focused
  }

  Widget renderNextBtn() {
    return Icon(
      Icons.navigate_next,
      color: Color(0xffffcc5c),
      size: 35.0,
    );
  }

  Widget renderDoneBtn() {
    return Icon(
      Icons.done,
      color: Color(0xffffcc5c),
    );
  }

  Widget renderSkipBtn() {
    return Icon(
      Icons.skip_next,
      color: Color(0xffffcc5c),
    );
  }

  List<Widget> renderListCustomTabs() {
    List<Widget> tabs = new List();
    for (int i = 0; i < slides.length; i++) {
      Slide currentSlide = slides[i];
      tabs.add(Container(
        width: double.infinity,
        height: double.infinity,
        child: Container(
          margin: EdgeInsets.only(bottom: 60.0, top: 60.0),
          child: ListView(
            children: <Widget>[
              GestureDetector(
                  child: Image.asset(
                currentSlide.pathImage,
                width: 200.0,
                height: 200.0,
                fit: BoxFit.contain,
              )),
              Container(
                child: Text(
                  currentSlide.title,
                  style: currentSlide.styleTitle,
                  textAlign: TextAlign.center,
                ),
                margin: EdgeInsets.only(top: 20.0),
              ),
              Container(
                child: Text(
                  currentSlide.description,
                  style: currentSlide.styleDescription,
                  textAlign: TextAlign.center,
                  maxLines: 5,
                  overflow: TextOverflow.ellipsis,
                ),
                margin: EdgeInsets.only(top: 20.0),
              ),
            ],
          ),
        ),
      ));
    }
    return tabs;
  }

  @override
  Widget build(BuildContext context) {
    return new IntroSlider(
      // List slides
      slides: this.slides,

      // Skip button
      renderSkipBtn: this.renderSkipBtn(),
      colorSkipBtn: Color(0x33ffcc5c),
      highlightColorSkipBtn: Color(0xffffcc5c),

      // Next button
      renderNextBtn: this.renderNextBtn(),

      // Done button
      renderDoneBtn: this.renderDoneBtn(),
      onDonePress: this.onDonePress,
      colorDoneBtn: Color(0x33ffcc5c),
      highlightColorDoneBtn: Color(0xffffcc5c),

      // Dot indicator
      colorDot: Color(0xffffcc5c),
      sizeDot: 13.0,
      typeDotAnimation: dotSliderAnimation.SIZE_TRANSITION,

      // Tabs
      listCustomTabs: this.renderListCustomTabs(),
      backgroundColorAllSlides: Colors.white,
      refFuncGoToTab: (refFunc) {
        this.goToTab = refFunc;
      },

      // Show or hide status bar
      shouldHideStatusBar: true,

      // On tab change completed
      onTabChangeCompleted: this.onTabChangeCompleted,
    );
  }
}

Slide object properties #

NameTypeDefaultDescription
Title
titleString""Change text title at top
widgetTitleWidgetnullSet a custom widget as the title (ignore title if define both)
maxLineTitleint1Change max number of lines title at top
styleTitleTextStyleWhite color, bold and font size is 30.0Style for text title
marginTitleEdgeInsetstop: 70.0, bottom: 50.0Margin for text title
Image
pathImageString""Path to your local image
widthImagedouble250.0Width of image
heightImagedouble250.0Height of image
foregroundImageFitBoxFitBoxFit.containForeground image fit
Center widget
centerWidgetWidgetnullYour custom's widget
onCenterItemPressFunctionDo nothingFire when press center image/widget
Description
descriptionString""Change text description at bottom
widgetDescriptionWidgetnullSet a custom widget as the description (ignore description if define both)
maxLineTextDescriptionString100Maximum line of text description
styleDescriptionTextStyleWhite and font size is 18.0Style for text description
marginDescriptionEdgeInsetsleft, right = 20.0, top, bottom = 50.0Margin for text description
Background Color
backgroundColorColorColors.amberAccentBackground tab color
colorBeginColorColors.amberAccentGradient tab color begin
colorEndColorColors.amberAccentGradient tab color end
directionColorBeginAlignmentGeometryAlignment.topLeftDirection color begin
directionColorEndAlignmentGeometryAlignment.bottomRightDirection color end
Background Image
backgroundImageStringnullBackground tab image
backgroundImageFitBoxFitBoxFit.coverBackground tab image fit
backgroundOpacitydouble0.5Background tab image filter opacity
backgroundOpacityColorColorColors.blackBackground tab image filter color
backgroundBlendModeBlendModeBlendMode.darkenBackground tab image filter blend mode

IntroSlider widget properties #

NameTypeDefaultDescription
Slide
slidesSlideNo default, requiredAn array of Slide object
Skip Button
renderSkipBtnWidgetButton with text SKIPRender your own SKIP button
widthSkipBtndouble1/4 screen widthWidth of view wrapper SKIP button
onSkipPressFunctionGo to last pageFire when press SKIP button
nameSkipBtnString"SKIP"Change SKIP to any text you want
styleNameSkipBtnTextStyleWhite colorStyle for text at SKIP button
colorSkipBtnColortransparentColor for SKIP button
highlightColorSkipBtnColorColor(0x4dffffff)Color for SKIP button when press
isShowSkipBtnbooltrueShow or hide SKIP button
borderRadiusSkipBtndouble30.0Rounded SKIP button
Prev Button
renderPrevBtnWidgetButton with text PREVRender your own PREV button
widthPrevBtndouble1/4 screen widthWidth of view wrapper PREV button
namePrevBtnString"PREV"Change PREV to any text you want
styleNamePrevBtnTextStyleWhite colorStyle for text at PREV button
colorPrevBtnColortransparentColor for PREV button
highlightColorPrevBtnColorColor(0x4dffffff)Color for PREV button when press
isShowPrevBtnboolfalseShow or hide PREV button
borderRadiusPrevBtndouble30.0Rounded PREV button
Done Button
renderDoneBtnWidgetButton with text DONERender your own DONE button
widthDoneBtndouble1/4 screen widthWidth of view wrapper DONE button
onDonePressFunctionDo nothingFire when press DONE button
nameDoneBtnString"DONE"Change DONE to any text you want
styleNameDoneBtnTextStyleWhite colorStyle for text at DONE button
colorDoneBtnColortransparentColor for DONE button
highlightColorDoneBtnColorColor(0x4dffffff)Color for DONE button when press
borderRadiusDoneBtndouble30.0Rounded DONE button
isShowDoneBtnbooltrueShow or hide DONE button
Next Button (other attributes will have the same<br/>Done button since they are one)
renderNextBtnWidgetButton with text NEXTRender your own NEXT button
nameNextBtnString"NEXT"Change NEXT to any text you want
Dot Indicator
isShowDotIndicatorbooltrueShow or hide dot indicator
colorDotColorColor(0x80000000)Color for dot when passive
colorActiveDotColorColor(0xffffffff)Color for dot when active
sizeDotdouble8.0Size of each dot
typeDotAnimation (inactive dots auto have opacity 50%,<br/>dot active has size bigger than 1.5 times )enum dotSliderAnimationDOT_MOVEMENTType dots animation
Tabs
listCustomTabsList<Widget>nullRender your own list tabs (use default tab UI if not defined)
refFuncGoToTabFunctionDo nothingSend the reference of change tab's function,<br/>then we can move to any tab index programmatically
onTabChangeCompletedFunctionDo nothingCallback when tab change comleted, return the current tab's index
backgroundColorAllSlidesColorTransparentBackground color for all slides
Behavior
isScrollablebooltrueForce button-only scrolling
shouldHideStatusBarboolfalseShow or hide the status bar

Pull request and feedback are always appreciated #

2.2.8 #

  • Allow supplying a custom title and/or description widgets.

2.2.7 #

  • Set backgroundColor to Colors.amberAccent when not define

2.2.6 #

  • Remove some unnecessary files

2.2.5 #

  • Update docs

2.2.4 #

  • Update docs

2.2.3 #

  • Fix dot animation don't working properly on RTL language

2.2.2 #

  • Add refFuncGoToTab, then we can move to any tab index programmatically

2.2.1 #

  • Fix color dots displaced to the right on last slide

2.2.0 #

  • Add more dots animation

2.1.1 #

  • Add can set background color for all slides
  • Add can hide DONE button

2.1.0 #

  • Add animation when dot indicator is moving

2.0.3 #

  • Fix error when onTabChangeCompleted not defined

2.0.2 #

  • Add callback onTabChangeCompleted

2.0.1 #

  • Add custom boxfit to foreground image

2.0.0 #

  • Add custom your own tabs

1.2.3 #

  • Update

1.2.2 #

  • Remove MaterialApp and replacing it by a Scaffold since should only be one MaterialApp() per application
  • Remove locale since it should handle by primary application (and it is configured by MaterialApp), not by the plugin.

1.2.1 #

  • Add optional onSkipPress

1.2.0 #

  • Add PREV button and optimize code

1.1.9 #

  • Add default go to last page at onSkipPress

1.1.8 #

  • Add configuration able to scroll

1.1.7 #

  • Fix content scroll overlain bottom view
  • Add set width of done, next button

1.1.6 #

  • Add option show or hide the status bar
  • Adding locale feature, adjust bottom navigation

1.1.5 #

  • Fix margin not a type of double

1.1.4 #

  • Format code

1.1.3 #

  • Add background image

1.1.2 #

  • Add custom center widget

1.1.1 #

  • Update docs and remove redundant attributes at slide

1.1.0 #

  • Add set max number of lines at title

1.0.9 #

  • Fix navigate example

1.0.8 #

  • Change color options to be instances of Color instead int

1.0.7 #

  • Add onCLickImage and maxLines text description

1.0.6 #

  • Add gradient background color

1.0.5 #

  • Add more attribute

1.0.4 #

  • Update info

1.0.3 #

  • Update info

1.0.2 #

  • Update info

1.0.1 #

  • Update

1.0.0 #

  • Update

0.0.1 #

  • Initial Release

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  intro_slider: ^2.2.8

2. Install it

You can install packages from the command line:

with Flutter:


$ flutter pub get

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:intro_slider/intro_slider.dart';
  
Popularity:
Describes how popular the package is relative to other packages. [more]
97
Health:
Code health derived from static analysis. [more]
100
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
100
Overall:
Weighted score of the above. [more]
99
Learn more about scoring.

We analyzed this package on Sep 17, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.5.0
  • pana: 0.12.21
  • Flutter: 1.9.1+hotfix.2

Platforms

Detected platforms: Flutter

References Flutter, and has no conflicting libraries.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.0.0-dev.28.0 <3.0.0
flutter 0.0.0
Transitive dependencies
collection 1.14.11 1.14.12
meta 1.1.7
sky_engine 0.0.99
typed_data 1.1.6
vector_math 2.0.8