@@ -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,34 @@ 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 (context. findRenderObject () as RenderBox ? );
661661 startShowcase ();
662662 showCaseWidgetState.updateOverlay? .call (
663663 showCaseWidgetState.isShowcaseRunning,
@@ -668,8 +668,8 @@ class _ShowcaseState extends State<Showcase> {
668668 alignment: widget.scrollAlignment,
669669 );
670670 if (! mounted) return ;
671- showcaseController .isScrollRunning = false ;
672- _updateControllerData (context);
671+ _controller .isScrollRunning = false ;
672+ _updateControllerData (context. findRenderObject () as RenderBox ? );
673673 startShowcase ();
674674 showCaseWidgetState.updateOverlay? .call (
675675 showCaseWidgetState.isShowcaseRunning,
@@ -680,14 +680,14 @@ class _ShowcaseState extends State<Showcase> {
680680 WidgetsBinding .instance.addPostFrameCallback ((_) {
681681 if (! mounted) return ;
682682 final rootWidget = context.findRootAncestorStateOfType <State <Overlay >>();
683- showcaseController
683+ _controller
684684 ..rootRenderObject =
685685 rootWidget? .context.findRenderObject () as RenderBox ?
686686 ..rootWidgetSize = rootWidget == null
687687 ? MediaQuery .of (context).size
688- : showcaseController .rootRenderObject? .size;
689- if (! enableShowcase) return ;
690- _updateControllerData (context);
688+ : _controller .rootRenderObject? .size;
689+ if (! showCaseWidgetState. enableShowcase) return ;
690+ _updateControllerData (context. findRenderObject () as RenderBox ? );
691691 showCaseWidgetState.updateOverlay? .call (
692692 showCaseWidgetState.isShowcaseRunning,
693693 );
@@ -725,10 +725,9 @@ class _ShowcaseState extends State<Showcase> {
725725 ? 0.0
726726 : max (0.0 , widget.blurValue ?? showCaseWidgetState.blurValue);
727727
728- showcaseController
729- ..position = position!
728+ _controller
730729 ..blur = blur
731- ..getToolTipWidget = showcaseController .isScrollRunning
730+ ..getToolTipWidget = _controller .isScrollRunning
732731 ? [
733732 Center (child: widget.scrollLoadingWidget),
734733 ]
@@ -746,8 +745,7 @@ class _ShowcaseState extends State<Showcase> {
746745 targetPadding: widget.targetPadding,
747746 ),
748747 ToolTipWidget (
749- key: ValueKey (showcaseController.showcaseId),
750- position: position,
748+ key: ValueKey (_controller.showcaseId),
751749 title: widget.title,
752750 titleTextAlign: widget.titleTextAlign,
753751 description: widget.description,
@@ -785,7 +783,7 @@ class _ShowcaseState extends State<Showcase> {
785783 tooltipActionConfig: _getTooltipActionConfig (),
786784 tooltipActions: _getTooltipActions (),
787785 targetPadding: widget.targetPadding,
788- showcaseController: showcaseController ,
786+ showcaseController: _controller ,
789787 ),
790788 if (_getFloatingActionWidget != null ) _getFloatingActionWidget! ,
791789 ];
@@ -837,33 +835,31 @@ class _ShowcaseState extends State<Showcase> {
837835 const TooltipActionConfig ();
838836 }
839837
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 ? ,
838+ void _updateControllerData (
839+ RenderBox ? renderBox,
840+ ) {
841+ final size = _controller.rootWidgetSize ?? MediaQuery .sizeOf (context);
842+ final position = GetPosition (
843+ rootRenderObject: _controller.rootRenderObject,
844+ renderBox: renderBox,
846845 padding: widget.targetPadding,
847846 screenWidth: size.width,
848847 screenHeight: size.height,
849848 );
850- showcaseController
851- ..position = position!
849+ _controller
850+ ..position = position
852851 ..linkedShowcaseDataModel = LinkedShowcaseDataModel (
853- rect: showcaseController.isScrollRunning
854- ? Rect .zero
855- : position! .getRect (),
852+ rect: _controller.isScrollRunning ? Rect .zero : position.getRect (),
856853 radius: _targetBorderRadius,
857- overlayPadding: showcaseController.isScrollRunning
858- ? EdgeInsets .zero
859- : _targetPadding,
854+ overlayPadding:
855+ _controller.isScrollRunning ? EdgeInsets .zero : _targetPadding,
860856 isCircle: _isCircle,
861857 );
862858
863859 buildOverlayOnTarget (
864- position! .getOffset (),
865- position! .getRect ().size,
866- position! .getRect (),
860+ position.getOffset (),
861+ position.getRect ().size,
862+ position.getRect (),
867863 size,
868864 );
869865 }
0 commit comments