Skip to content

Commit 93f75e4

Browse files
committed
fix: 🔨Fixed PR issue
1 parent 67879cf commit 93f75e4

12 files changed

+250
-229
lines changed

lib/src/constants.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:flutter/material.dart';
2+
13
class Constants {
24
Constants._();
35

@@ -25,4 +27,16 @@ class Constants {
2527
/// i.e if it is bottom position then centerBottom + [extraAlignmentOffset]
2628
/// in bottom
2729
static const double extraAlignmentOffset = 5;
30+
31+
static const defaultTargetRadius = Radius.circular(3.0);
32+
33+
static const ShapeBorder defaultTargetShapeBorder = RoundedRectangleBorder(
34+
borderRadius: BorderRadius.all(Radius.circular(8)),
35+
);
36+
37+
static const Widget defaultProgressIndicator = CircularProgressIndicator(
38+
valueColor: AlwaysStoppedAnimation(Colors.white),
39+
);
40+
41+
static const Duration defaultAnimationDuration = Duration(milliseconds: 2000);
2842
}

lib/src/enum.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ enum TooltipDefaultActionType {
9494
void onTap(ShowCaseWidgetState showCaseState) {
9595
switch (this) {
9696
case TooltipDefaultActionType.next:
97-
showCaseState.next(true);
97+
showCaseState.next(fromAutoPlayOrAction: true);
9898
break;
9999
case TooltipDefaultActionType.previous:
100100
showCaseState.previous();

lib/src/get_position.dart

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class GetPosition {
3232
this.padding = EdgeInsets.zero,
3333
this.rootRenderObject,
3434
}) {
35-
getRenderBox();
35+
_getRenderBox();
3636
}
3737

3838
final BuildContext context;
@@ -41,18 +41,13 @@ class GetPosition {
4141
final double screenHeight;
4242
final RenderObject? rootRenderObject;
4343

44-
late final RenderBox? _box;
45-
late final Offset? _boxOffset;
46-
late final Offset? overlayOffset;
44+
RenderBox? _box;
45+
Offset? _boxOffset;
4746

4847
RenderBox? get box => _box;
4948

50-
void getRenderBox() {
51-
var renderBox = context.findRenderObject() as RenderBox?;
52-
53-
overlayOffset =
54-
(rootRenderObject?.parent as RenderBox?)?.localToGlobal(Offset.zero);
55-
49+
void _getRenderBox() {
50+
final renderBox = context.findRenderObject() as RenderBox?;
5651
if (renderBox == null) return;
5752

5853
_box = renderBox;
@@ -77,9 +72,7 @@ class GetPosition {
7772
final bottomRight = _box!.size.bottomRight(_boxOffset!);
7873
final leftDx = topLeft.dx - padding.left;
7974
var leftDy = topLeft.dy - padding.top;
80-
if (leftDy < 0) {
81-
leftDy = 0;
82-
}
75+
if (leftDy < 0) leftDy = 0;
8376
final rect = Rect.fromLTRB(
8477
leftDx.clamp(0, leftDx),
8578
leftDy.clamp(0, leftDy),
@@ -131,14 +124,17 @@ class GetPosition {
131124

132125
double getCenter() => (getLeft() + getRight()) * 0.5;
133126

134-
Offset topLeft() =>
135-
_box?.size.topLeft(
136-
_box!.localToGlobal(
137-
Offset.zero,
138-
ancestor: rootRenderObject,
139-
),
140-
) ??
141-
Offset.zero;
127+
Offset topLeft() {
128+
final box = _box;
129+
if (box == null) return Offset.zero;
130+
131+
return box.size.topLeft(
132+
box.localToGlobal(
133+
Offset.zero,
134+
ancestor: rootRenderObject,
135+
),
136+
);
137+
}
142138

143139
Offset getOffSet() => _box?.size.center(topLeft()) ?? Offset.zero;
144140
}

lib/src/layout_overlays.dart

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ import 'package:flutter/material.dart';
2424

2525
import 'showcase_widget.dart';
2626

27-
typedef OverlayUpdateCallback = void Function(VoidCallback updateOverlay);
28-
2927
/// Displays an overlay Widget as constructed by the given [overlayBuilder].
3028
///
3129
/// The overlay built by the [overlayBuilder] can be conditionally shown and
@@ -39,19 +37,19 @@ typedef OverlayUpdateCallback = void Function(VoidCallback updateOverlay);
3937
/// exist in [OverlayEntry]s which are inaccessible to outside Widgets. But if
4038
/// a better approach is found then feel free to use it.
4139
class OverlayBuilder extends StatefulWidget {
42-
final bool showOverlay;
43-
final WidgetBuilder? overlayBuilder;
44-
final Widget? child;
45-
final OverlayUpdateCallback updateOverlay;
46-
4740
const OverlayBuilder({
4841
super.key,
42+
required this.child,
4943
required this.updateOverlay,
5044
this.showOverlay = false,
5145
this.overlayBuilder,
52-
this.child,
5346
});
5447

48+
final bool showOverlay;
49+
final WidgetBuilder? overlayBuilder;
50+
final Widget child;
51+
final ValueSetter<VoidCallback> updateOverlay;
52+
5553
@override
5654
State<OverlayBuilder> createState() => _OverlayBuilderState();
5755
}
@@ -66,10 +64,10 @@ class _OverlayBuilderState extends State<OverlayBuilder> {
6664
if (widget.showOverlay) {
6765
WidgetsBinding.instance.addPostFrameCallback((_) => showOverlay());
6866
}
69-
widget.updateOverlay.call(updateOverlay);
67+
widget.updateOverlay.call(_updateOverlay);
7068
}
7169

72-
void updateOverlay() {
70+
void _updateOverlay() {
7371
buildOverlay();
7472
WidgetsBinding.instance.addPostFrameCallback((_) => syncWidgetAndOverlay());
7573
}
@@ -145,6 +143,6 @@ class _OverlayBuilderState extends State<OverlayBuilder> {
145143

146144
@override
147145
Widget build(BuildContext context) {
148-
return widget.child!;
146+
return widget.child;
149147
}
150148
}

lib/src/models/linked_showcase_data.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import 'package:flutter/widgets.dart';
33
/// This model is used to move linked showcase overlay data to parent
44
/// showcase to crop linked showcase rect
55
class LinkedShowcaseDataModel {
6-
final Rect rect;
7-
final EdgeInsets overlayPadding;
8-
final BorderRadius? radius;
9-
final bool isCircle;
10-
116
const LinkedShowcaseDataModel({
127
required this.rect,
138
required this.radius,
149
required this.overlayPadding,
1510
required this.isCircle,
1611
});
12+
13+
final Rect rect;
14+
final EdgeInsets overlayPadding;
15+
final BorderRadius? radius;
16+
final bool isCircle;
1717
}

lib/src/shape_clipper.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import 'dart:ui' as ui;
2424

2525
import 'package:flutter/material.dart';
2626

27+
import 'constants.dart';
2728
import 'models/linked_showcase_data.dart';
2829

2930
class RRectClipper extends CustomClipper<ui.Path> {
@@ -44,7 +45,7 @@ class RRectClipper extends CustomClipper<ui.Path> {
4445
@override
4546
ui.Path getClip(ui.Size size) {
4647
final customRadius =
47-
isCircle ? Radius.circular(area.height) : const Radius.circular(3.0);
48+
isCircle ? Radius.circular(area.height) : Constants.defaultTargetRadius;
4849

4950
final rect = Rect.fromLTRB(
5051
area.left - overlayPadding.left,
@@ -69,7 +70,7 @@ class RRectClipper extends CustomClipper<ui.Path> {
6970
for (final widgetRect in linkedObjectData) {
7071
final customRadius = widgetRect.isCircle
7172
? Radius.circular(widgetRect.rect.height)
72-
: const Radius.circular(3.0);
73+
: Constants.defaultTargetRadius;
7374

7475
final rect = Rect.fromLTRB(
7576
widgetRect.rect.left - widgetRect.overlayPadding.left,

lib/src/showcase/showcase.dart

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import 'dart:async';
2525
import 'package:flutter/foundation.dart';
2626
import 'package:flutter/material.dart';
2727

28+
import '../constants.dart';
2829
import '../enum.dart';
2930
import '../get_position.dart';
3031
import '../models/linked_showcase_data.dart';
@@ -66,6 +67,11 @@ class Showcase extends StatefulWidget {
6667
final ShapeBorder targetShapeBorder;
6768

6869
/// Radius of rectangle box while target widget is being showcased.
70+
///
71+
/// Default value is:
72+
/// ```dart
73+
/// const Radius.circular(3.0),
74+
/// ```
6975
final BorderRadius? targetBorderRadius;
7076

7177
/// TextStyle for default tooltip title
@@ -425,7 +431,7 @@ class Showcase extends StatefulWidget {
425431
showcaseKey = key,
426432
assert(
427433
overlayOpacity >= 0.0 && overlayOpacity <= 1.0,
428-
"overlay opacity must be between 0 and 1.",
434+
'overlay opacity must be between 0 and 1.',
429435
),
430436
assert(
431437
onTargetClick == null || disposeOnTap != null,
@@ -499,20 +505,14 @@ class Showcase extends StatefulWidget {
499505
required this.container,
500506
required this.child,
501507
this.floatingActionWidget,
502-
this.targetShapeBorder = const RoundedRectangleBorder(
503-
borderRadius: BorderRadius.all(
504-
Radius.circular(8),
505-
),
506-
),
508+
this.targetShapeBorder = Constants.defaultTargetShapeBorder,
507509
this.overlayColor = Colors.black45,
508510
this.targetBorderRadius,
509511
this.overlayOpacity = 0.75,
510-
this.scrollLoadingWidget = const CircularProgressIndicator(
511-
valueColor: AlwaysStoppedAnimation(Colors.white),
512-
),
512+
this.scrollLoadingWidget = Constants.defaultProgressIndicator,
513513
this.onTargetClick,
514514
this.disposeOnTap,
515-
this.movingAnimationDuration = const Duration(milliseconds: 2000),
515+
this.movingAnimationDuration = Constants.defaultAnimationDuration,
516516
this.disableMovingAnimation,
517517
this.targetPadding = EdgeInsets.zero,
518518
this.blurValue,
@@ -532,7 +532,7 @@ class Showcase extends StatefulWidget {
532532
scaleAnimationDuration = const Duration(milliseconds: 300),
533533
scaleAnimationCurve = Curves.decelerate,
534534
scaleAnimationAlignment = null,
535-
disableScaleAnimation = true,
535+
disableScaleAnimation = null,
536536
title = null,
537537
description = null,
538538
titleTextAlign = TextAlign.start,
@@ -553,7 +553,7 @@ class Showcase extends StatefulWidget {
553553
showcaseKey = key,
554554
assert(
555555
overlayOpacity >= 0.0 && overlayOpacity <= 1.0,
556-
"overlay opacity must be between 0 and 1.",
556+
'overlay opacity must be between 0 and 1.',
557557
),
558558
assert(
559559
onBarrierClick == null || disableBarrierInteraction == false,
@@ -573,10 +573,6 @@ class _ShowcaseState extends State<Showcase> {
573573
late final showCaseWidgetState = ShowCaseWidget.of(context);
574574
FloatingActionWidget? _globalFloatingActionWidget;
575575

576-
/// This variable will be true if some other showcase is linked with
577-
/// this showcase and starts this widget showcase
578-
// bool _isLinkedShowCaseStarted = false;
579-
580576
bool get _isCircle => widget.targetShapeBorder is CircleBorder;
581577

582578
BorderRadius? get _targetBorderRadius => widget.targetBorderRadius;
@@ -588,7 +584,7 @@ class _ShowcaseState extends State<Showcase> {
588584
super.initState();
589585
initRootWidget();
590586
final connectedShowcase =
591-
showCaseWidgetState.showcaseController[widget.showcaseKey];
587+
showCaseWidgetState.showcaseControllers[widget.showcaseKey];
592588
showcaseController = ShowcaseController(
593589
showcaseId: connectedShowcase?.length ?? 0,
594590
showcaseKey: widget.showcaseKey,
@@ -597,10 +593,10 @@ class _ShowcaseState extends State<Showcase> {
597593
)..startShowcase = startShowcase;
598594

599595
if (connectedShowcase != null) {
600-
showCaseWidgetState.showcaseController[widget.showcaseKey]
596+
showCaseWidgetState.showcaseControllers[widget.showcaseKey]
601597
?.add(showcaseController);
602598
} else {
603-
showCaseWidgetState.showcaseController[widget.showcaseKey] = [
599+
showCaseWidgetState.showcaseControllers[widget.showcaseKey] = [
604600
showcaseController,
605601
];
606602
}
@@ -614,7 +610,7 @@ class _ShowcaseState extends State<Showcase> {
614610

615611
@override
616612
void dispose() {
617-
showCaseWidgetState.showcaseController[widget.showcaseKey]
613+
showCaseWidgetState.showcaseControllers[widget.showcaseKey]
618614
?.remove(showcaseController);
619615
super.dispose();
620616
}

0 commit comments

Comments
 (0)