Skip to content

Flutter plugin that allows you to showcase your features on iOS and Android. πŸ‘ŒπŸ”πŸŽ‰

License

Notifications You must be signed in to change notification settings

CronometerSoftware/flutter_showcaseview

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Showcaes View - Simform LLC.

ShowCaseView

Build showcaseview

A Flutter package allows you to Showcase/Highlight your widgets step by step.

Preview

The example app running in Android

Migration guide for release 2.0.0

Renamed properties/fields of widgets mentioned below in the table.

Before After
autoPlayLockEnable enableAutoPlayLock
shapeBorder targetShapeBorder
showcaseBackgroundColor tooltipBackgroundColor
contentPadding tooltipPadding
overlayPadding targetPadding
radius targetBorderRadius
tipBorderRadius tooltipBorderRadius
disableAnimation disableMovingAnimation
animationDuration movingAnimationDuration

Removed unused parameter of Showcase.withWidget() mentioned below:

  • title
  • titleAlignment
  • titleTextStyle
  • description
  • descriptionAlignment
  • descTextStyle
  • textColor
  • tooltipBackgroundColor
  • tooltipBorderRadius
  • tooltipPadding

Installing

  1. Add dependency to pubspec.yaml

    Get the latest version in the 'Installing' tab on pub.dev

dependencies:
    showcaseview: <latest-version>
  1. Import the package
import 'package:showcaseview/showcaseview.dart';
  1. Adding a ShowCaseWidget widget.
ShowCaseWidget(
  builder: Builder(
    builder : (context)=> Somewidget()
  ),
),
  1. Adding a Showcase widget.
GlobalKey _one = GlobalKey();
GlobalKey _two = GlobalKey();
GlobalKey _three = GlobalKey();

...

Showcase(
  key: _one,
  title: 'Menu',
  description: 'Click here to see menu options',
  child: Icon(
    Icons.menu,
    color: Colors.black45,
  ),
),

Showcase.withWidget(
  key: _three,
  height: 80,
  width: 140,
  targetShapeBorder: CircleBorder(),
  container: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: <Widget>[
      ...
    ],
  ),
  child: ...,
),
  1. Starting the ShowCase
someEvent(){
    ShowCaseWidget.of(context).startShowCase([_one, _two, _three]);
}

If you want to start the ShowCaseView as soon as your UI built up then use below code.

WidgetsBinding.instance.addPostFrameCallback((_) =>
  ShowCaseWidget.of(context).startShowCase([_one, _two, _three])
);

Functions of ShowCaseWidget.of(context):

Function Name Description
startShowCase(List widgetIds) Starting the showcase
next() Starts next showcase
previous() Starts previous showcase
dismiss() Dismisses all showcases

Properties of ShowCaseWidget:

Name Type Default Behaviour Description
blurValue double 0 Provides blur effect on overlay
autoPlay bool false Automatically display Next showcase
autoPlayDelay Duration Duration(milliseconds: 2000) Visibility time of showcase when autoplay is enabled
enableAutoPlayLock bool false Block the user interaction on overlay when autoPlay is enabled.
enableAutoScroll bool false Allows to auto scroll to next showcase so as to make the given target visible.
scrollDuration Duration Duration(milliseconds: 300) Time duration for auto scrolling
disableBarrierInteraction bool false Disable barrier interaction
disableScaleAnimation bool false Disable scale transition for all showcases
disableMovingAnimation bool false Disable bouncing/moving transition for all showcases
onStart Function(int?, GlobalKey)? Triggered on start of each showcase.
onComplete Function(int?, GlobalKey)? Triggered on completion of each showcase.
onFinish VoidCallback? Triggered when all the showcases are completed
enableShowcase bool true Enable or disable showcase globally.

Properties of Showcase and Showcase.withWidget:

Name Type Default Behaviour Description Showcase ShowCaseWidget
key GlobalKey Unique Global key for each showcase. βœ… βœ…
child Widget The Target widget that you want to be showcased βœ… βœ…
title String? Title of default tooltip βœ…
description String? Description of default tooltip βœ…
container Widget? Allows to create custom tooltip widget. βœ…
height double? Height of custom tooltip widget βœ…
width double? Width of custom tooltip widget βœ…
titleTextStyle TextStyle? Text Style of title βœ…
descTextStyle TextStyle? Text Style of description βœ…
titleAlignment TextAlign TextAlign.start Alignment of title βœ…
descriptionAlignment TextAlign TextAlign.start Alignment of description βœ…
targetShapeBorder ShapeBorder If targetBorderRadius param is not provided then it applies shape border to target widget βœ… βœ…
targetBorderRadius BorderRadius? Border radius of target widget βœ… βœ…
tooltipBorderRadius BorderRadius? BorderRadius.circular(8.0) Border radius of tooltip βœ…
blurValue double? ShowCaseWidget.blurValue Gaussian blur effect on overlay βœ… βœ…
tooltipPadding EdgeInsets EdgeInsets.symmetric(vertical: 8, horizontal: 8) Padding to tooltip content βœ…
targetPadding EdgeInsets EdgeInsets.zero Padding to target widget βœ… βœ…
overlayOpacity double 0.75 Opacity of overlay layer βœ… βœ…
overlayColor Color Colors.black45 Color of overlay layer βœ… βœ…
tooltipBackgroundColor Color Colors.white Background Color of default tooltip βœ…
textColor Color Colors.black Color of tooltip text βœ…
scrollLoadingWidget Widget Loading widget on overlay until active showcase is visible to viewport when autoScroll is enable βœ… βœ…
movingAnimationDuration Duration Duration(milliseconds: 2000) Duration of time this moving animation should last. βœ… βœ…
showArrow bool true Shows tooltip with arrow βœ…
disableDefaultTargetGestures bool false disable default gestures of target widget βœ… βœ…
disposeOnTap bool? false Dismiss all showcases on target/tooltip tap βœ… βœ…
disableMovingAnimation bool? ShowCaseWidget.disableMovingAnimation Disable bouncing/moving transition βœ… βœ…
disableScaleAnimation bool? ShowCaseWidget.disableScaleAnimation Disable initial scale transition when showcase is being started and completed βœ…
scaleAnimationDuration Duration Duration(milliseconds: 300) Duration of time scale animation should last. βœ…
scaleAnimationCurve Curve Curves.easeIn Curve to use in scale animation. βœ…
scaleAnimationAlignment Alignment? Origin of the coordinate in which the scale takes place, relative to the size of the box. βœ…
onToolTipClick VoidCallback? Triggers when tooltip is being clicked. βœ…
onTargetClick VoidCallback? Triggers when target widget is being clicked βœ… βœ…
onTargetDoubleTap VoidCallback? Triggers when target widget is being double clicked βœ… βœ…
onTargetLongPress VoidCallback? Triggers when target widget is being long pressed βœ… βœ…
onBarrierClick VoidCallback? Triggers when barrier is clicked βœ… βœ…
tooltipPosition TooltipPosition? Defines vertical position of tooltip respective to Target widget βœ… βœ…
titlePadding EdgeInsets? EdgeInsets.zero Padding to title βœ…
descriptionPadding EdgeInsets? EdgeInsets.zero Padding to description βœ…
titleTextDirection TextDirection? Give textDirection to title βœ…
descriptionTextDirection TextDirection? Give textDirection to description βœ…

How to use

Check out the example app in the example directory or the 'Example' tab on pub.dartlang.org for a more complete example.

Scrolling to active showcase

Auto Scrolling to active showcase feature will not work properly in scroll views that renders widgets on demand(ex, ListView, GridView).

In order to scroll to a widget it needs to be attached with widget tree. So, If you are using a scrollview that renders widgets on demand, it is possible that the widget on which showcase is applied is not attached in widget tree. So, flutter won't be able to scroll to that widget.

So, If you want to make a scroll view that contains less number of children widget then prefer to use SingleChildScrollView.

If using SingleChildScrollView is not an option, then you can assign a ScrollController to that scrollview and manually scroll to the position where showcase widget gets rendered. You can add that code in onStart method of ShowCaseWidget.

Example,

// This controller will be assigned to respected sctollview.
final _controller = ScrollController();

ShowCaseWidget(
  onStart: (index, key) {
    if(index == 0) {
      WidgetsBinding.instance.addPostFrameCallback((_) {
       // If showcase widget is at offset 1000 in the listview.
       // If you don't know the exact position of the showcase widget,
       // You can provide nearest possible location.
       // 
       // In this case providing 990 instead of 1000 will work as well.
        _controller.jumpTo(1000);
      });
    }
  },
);

Main Contributors


Birju Vachhani

Devarsh Ranpara

Ankit Panchal

Kashifa Laliwala

Vatsal Tanna

Sanket Kachhela

Parth Baraiya

Shweta Chauhan

Mehul Kabaria

Dhaval Kansara

Happy Makadiya

Ujas Majithiya

License

MIT License

Copyright (c) 2021 Simform Solutions

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

About

Flutter plugin that allows you to showcase your features on iOS and Android. πŸ‘ŒπŸ”πŸŽ‰

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Dart 67.0%
  • C++ 17.6%
  • CMake 10.5%
  • HTML 2.7%
  • Shell 0.8%
  • Swift 0.7%
  • Other 0.7%