@@ -564,10 +564,11 @@ class Showcase extends StatefulWidget {
564564}
565565
566566class _ShowcaseState extends State <Showcase > {
567- bool enableShowcase = true ;
568- GetPosition ? position;
569-
570- late ShowcaseController showcaseController;
567+ ShowcaseController get _controller =>
568+ showCaseWidgetState.getControllerForShowcase (
569+ widget.showcaseKey,
570+ _uniqueId,
571+ );
571572
572573 late final showCaseWidgetState = ShowCaseWidget .of (context);
573574 FloatingActionWidget ? _globalFloatingActionWidget;
@@ -578,12 +579,14 @@ class _ShowcaseState extends State<Showcase> {
578579
579580 EdgeInsets get _targetPadding => widget.targetPadding;
580581
582+ final int _uniqueId = UniqueKey ().hashCode;
583+
581584 @override
582585 void initState () {
583586 super .initState ();
584587 initRootWidget ();
585- showcaseController = ShowcaseController (
586- showcaseId: widget.hashCode ,
588+ final showcaseController = ShowcaseController (
589+ showcaseId: _uniqueId ,
587590 showcaseKey: widget.showcaseKey,
588591 showcaseConfig: widget,
589592 scrollIntoView: _scrollIntoView,
@@ -592,21 +595,20 @@ class _ShowcaseState extends State<Showcase> {
592595 showCaseWidgetState.registerShowcaseController (
593596 controller: showcaseController,
594597 key: widget.showcaseKey,
598+ showcaseId: _uniqueId,
595599 );
596600 }
597601
598- @override
599- void didChangeDependencies () {
600- super .didChangeDependencies ();
601- showcaseController.showcaseConfig = widget;
602- }
603-
604602 @override
605603 void didUpdateWidget (covariant Showcase oldWidget) {
606604 super .didUpdateWidget (oldWidget);
607- if (oldWidget != widget) {
608- showcaseController.showcaseConfig = widget;
609- }
605+ if (oldWidget == widget) return ;
606+ showCaseWidgetState
607+ .getControllerForShowcase (
608+ widget.showcaseKey,
609+ _uniqueId,
610+ )
611+ .showcaseConfig = widget;
610612 }
611613
612614 @override
@@ -619,7 +621,7 @@ class _ShowcaseState extends State<Showcase> {
619621 void dispose () {
620622 showCaseWidgetState.removeShowcaseController (
621623 key: widget.showcaseKey,
622- controller : showcaseController ,
624+ uniqueShowcaseKey : _uniqueId ,
623625 );
624626
625627 super .dispose ();
@@ -628,36 +630,35 @@ class _ShowcaseState extends State<Showcase> {
628630 void initRootWidget () {
629631 WidgetsBinding .instance.addPostFrameCallback ((_) {
630632 if (! mounted) return ;
631- showcaseController
633+ _controller
632634 ..rootWidgetSize = showCaseWidgetState.rootWidgetSize
633635 ..rootRenderObject = showCaseWidgetState.rootRenderObject;
634636 });
635637 }
636638
637639 void startShowcase () {
638- enableShowcase = showCaseWidgetState.enableShowcase;
640+ if ( ! showCaseWidgetState.enableShowcase) return ;
639641
640642 recalculateRootWidgetSize ();
641643
642- if (enableShowcase) {
643- _globalFloatingActionWidget = showCaseWidgetState
644- .globalFloatingActionWidget (widget.showcaseKey)
645- ? .call (context);
646- final size = MediaQuery .of (context).size;
647- position ?? = GetPosition (
648- rootRenderObject: showcaseController.rootRenderObject,
649- renderBox: context.findRenderObject () as RenderBox ? ,
650- padding: widget.targetPadding,
651- screenWidth: showcaseController.rootWidgetSize? .width ?? size.width,
652- screenHeight: showcaseController.rootWidgetSize? .height ?? size.height,
653- );
654- }
644+ _globalFloatingActionWidget = showCaseWidgetState
645+ .globalFloatingActionWidget (widget.showcaseKey)
646+ ? .call (context);
647+ final size = _controller.rootWidgetSize ?? MediaQuery .sizeOf (context);
648+ _controller.position ?? = GetPosition (
649+ rootRenderObject: _controller.rootRenderObject,
650+ renderBox: context.findRenderObject () as RenderBox ? ,
651+ padding: widget.targetPadding,
652+ screenWidth: size.width,
653+ screenHeight: size.height,
654+ );
655655 }
656656
657657 Future <void > _scrollIntoView () async {
658658 if (! mounted) return ;
659- showcaseController.isScrollRunning = true ;
660- _updateControllerData (context);
659+ _controller.isScrollRunning = true ;
660+ _updateControllerData (
661+ context.findRenderObject () as RenderBox ? , MediaQuery .sizeOf (context));
661662 startShowcase ();
662663 showCaseWidgetState.updateOverlay? .call (
663664 showCaseWidgetState.isShowcaseRunning,
@@ -668,8 +669,9 @@ class _ShowcaseState extends State<Showcase> {
668669 alignment: widget.scrollAlignment,
669670 );
670671 if (! mounted) return ;
671- showcaseController.isScrollRunning = false ;
672- _updateControllerData (context);
672+ _controller.isScrollRunning = false ;
673+ _updateControllerData (
674+ context.findRenderObject () as RenderBox ? , MediaQuery .sizeOf (context));
673675 startShowcase ();
674676 showCaseWidgetState.updateOverlay? .call (
675677 showCaseWidgetState.isShowcaseRunning,
@@ -680,14 +682,15 @@ class _ShowcaseState extends State<Showcase> {
680682 WidgetsBinding .instance.addPostFrameCallback ((_) {
681683 if (! mounted) return ;
682684 final rootWidget = context.findRootAncestorStateOfType <State <Overlay >>();
683- showcaseController
685+ _controller
684686 ..rootRenderObject =
685687 rootWidget? .context.findRenderObject () as RenderBox ?
686688 ..rootWidgetSize = rootWidget == null
687689 ? MediaQuery .of (context).size
688- : showcaseController.rootRenderObject? .size;
689- if (! enableShowcase) return ;
690- _updateControllerData (context);
690+ : _controller.rootRenderObject? .size;
691+ if (! showCaseWidgetState.enableShowcase) return ;
692+ _updateControllerData (
693+ context.findRenderObject () as RenderBox ? , MediaQuery .sizeOf (context));
691694 showCaseWidgetState.updateOverlay? .call (
692695 showCaseWidgetState.isShowcaseRunning,
693696 );
@@ -725,10 +728,9 @@ class _ShowcaseState extends State<Showcase> {
725728 ? 0.0
726729 : max (0.0 , widget.blurValue ?? showCaseWidgetState.blurValue);
727730
728- showcaseController
729- ..position = position!
731+ _controller
730732 ..blur = blur
731- ..getToolTipWidget = showcaseController .isScrollRunning
733+ ..getToolTipWidget = _controller .isScrollRunning
732734 ? [
733735 Center (child: widget.scrollLoadingWidget),
734736 ]
@@ -746,8 +748,7 @@ class _ShowcaseState extends State<Showcase> {
746748 targetPadding: widget.targetPadding,
747749 ),
748750 ToolTipWidget (
749- key: ValueKey (showcaseController.showcaseId),
750- position: position,
751+ key: ValueKey (_controller.showcaseId),
751752 title: widget.title,
752753 titleTextAlign: widget.titleTextAlign,
753754 description: widget.description,
@@ -785,7 +786,7 @@ class _ShowcaseState extends State<Showcase> {
785786 tooltipActionConfig: _getTooltipActionConfig (),
786787 tooltipActions: _getTooltipActions (),
787788 targetPadding: widget.targetPadding,
788- showcaseController: showcaseController ,
789+ showcaseController: _controller ,
789790 ),
790791 if (_getFloatingActionWidget != null ) _getFloatingActionWidget! ,
791792 ];
@@ -837,33 +838,32 @@ class _ShowcaseState extends State<Showcase> {
837838 const TooltipActionConfig ();
838839 }
839840
840- void _updateControllerData (BuildContext context) {
841- final size =
842- showcaseController.rootWidgetSize ?? MediaQuery .of (context).size;
843- position = GetPosition (
844- rootRenderObject: showcaseController.rootRenderObject,
845- renderBox: context.findRenderObject () as RenderBox ? ,
841+ void _updateControllerData (
842+ RenderBox ? renderBox,
843+ Size screenSize,
844+ ) {
845+ final size = _controller.rootWidgetSize ?? screenSize;
846+ final position = GetPosition (
847+ rootRenderObject: _controller.rootRenderObject,
848+ renderBox: renderBox,
846849 padding: widget.targetPadding,
847850 screenWidth: size.width,
848851 screenHeight: size.height,
849852 );
850- showcaseController
851- ..position = position!
853+ _controller
854+ ..position = position
852855 ..linkedShowcaseDataModel = LinkedShowcaseDataModel (
853- rect: showcaseController.isScrollRunning
854- ? Rect .zero
855- : position! .getRect (),
856+ rect: _controller.isScrollRunning ? Rect .zero : position.getRect (),
856857 radius: _targetBorderRadius,
857- overlayPadding: showcaseController.isScrollRunning
858- ? EdgeInsets .zero
859- : _targetPadding,
858+ overlayPadding:
859+ _controller.isScrollRunning ? EdgeInsets .zero : _targetPadding,
860860 isCircle: _isCircle,
861861 );
862862
863863 buildOverlayOnTarget (
864- position! .getOffset (),
865- position! .getRect ().size,
866- position! .getRect (),
864+ position.getOffset (),
865+ position.getRect ().size,
866+ position.getRect (),
867867 size,
868868 );
869869 }
0 commit comments