Skip to content

Commit d8f33fb

Browse files
committed
optimize the internal parameter
1 parent a7a36a9 commit d8f33fb

12 files changed

Lines changed: 974 additions & 599 deletions

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# [5.1.0]
2+
* Refactor: optimize the internal `show` parameter passing pipeline (`show`/`showAttach`/`showNotify`/`showLoading`/`showToast`) by introducing internal parameter models and passing them through the full chain
3+
* Keep external API usage unchanged (no public method signature changes)
4+
* Improve maintainability for future parameter additions (avoid multi-layer manual parameter forwarding)
5+
16
# [5.0.1]
27
* Fix [#291](https://github.com/fluttercandies/flutter_smart_dialog/issues/291): `showAttach`/`bindWidget` now hides when pushing custom page routes (non-`PopupRoute`) and reappears after popping back, matching `MaterialPageRoute` behavior
38

lib/src/custom/custom_dialog.dart

Lines changed: 92 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@ import 'dart:math';
33

44
import 'package:flutter/material.dart';
55
import 'package:flutter_smart_dialog/src/data/dialog_info.dart';
6+
import 'package:flutter_smart_dialog/src/data/show_param.dart';
67
import 'package:flutter_smart_dialog/src/data/smart_tag.dart';
78
import 'package:flutter_smart_dialog/src/helper/dialog_proxy.dart';
89
import 'package:flutter_smart_dialog/src/helper/monitor_widget_helper.dart';
910
import 'package:flutter_smart_dialog/src/helper/route_record.dart';
1011
import 'package:flutter_smart_dialog/src/kit/view_utils.dart';
11-
import 'package:flutter_smart_dialog/src/widget/attach_dialog_widget.dart';
1212

1313
import '../config/enum_config.dart';
14-
import '../data/animation_param.dart';
1514
import '../data/base_dialog.dart';
1615
import '../data/notify_info.dart';
1716
import '../kit/debounce_utils.dart';
@@ -24,159 +23,117 @@ class CustomDialog extends BaseDialog {
2423
CustomDialog({required SmartOverlayEntry overlayEntry}) : super(overlayEntry);
2524

2625
Future<T?> show<T>({
27-
required Widget widget,
28-
required Alignment alignment,
29-
required bool usePenetrate,
30-
required bool useAnimation,
31-
required Duration animationTime,
32-
required SmartAnimationType animationType,
33-
required List<SmartNonAnimationType> nonAnimationTypes,
34-
required AnimationBuilder? animationBuilder,
35-
required Color maskColor,
36-
required bool clickMaskDismiss,
37-
required bool debounce,
38-
required Widget? maskWidget,
39-
required VoidCallback? onDismiss,
40-
required VoidCallback? onMask,
41-
required Duration? displayTime,
42-
required String? tag,
43-
required bool keepSingle,
44-
required bool permanent,
45-
required bool useSystem,
46-
required bool bindPage,
47-
required BuildContext? bindWidget,
48-
required Rect? ignoreArea,
49-
required SmartBackType? backType,
50-
required SmartOnBack? onBack,
26+
required SmartShowCustomParam param,
5127
}) {
52-
if (DebounceUtils.instance.banContinue(DebounceType.custom, debounce)) {
28+
if (DebounceUtils.instance
29+
.banContinue(DebounceType.custom, param.debounce)) {
5330
return Future.value(null);
5431
}
5532

5633
final dialogInfo = _handleMustOperate(
57-
tag: tag,
58-
keepSingle: keepSingle,
59-
debounce: debounce,
34+
tag: param.tag,
35+
keepSingle: param.keepSingle,
36+
debounce: param.debounce,
6037
type: DialogType.custom,
61-
permanent: permanent,
62-
useSystem: useSystem,
63-
bindPage: bindPage,
64-
bindWidget: bindWidget,
65-
displayTime: displayTime,
66-
backType: backType,
67-
onBack: onBack,
38+
permanent: param.permanent,
39+
useSystem: param.useSystem,
40+
bindPage: param.bindPage,
41+
bindWidget: param.bindWidget,
42+
displayTime: param.displayTime,
43+
backType: param.backType,
44+
onBack: param.onBack,
6845
);
6946
return mainDialog.show<T>(
70-
widget: widget,
71-
alignment: alignment,
72-
usePenetrate: usePenetrate,
73-
useAnimation: useAnimation,
74-
animationTime: animationTime,
75-
animationType: animationType,
76-
nonAnimationTypes: nonAnimationTypes,
77-
animationBuilder: animationBuilder,
78-
maskColor: maskColor,
79-
maskWidget: maskWidget,
80-
onDismiss: _handleDismiss(onDismiss, displayTime, dialogInfo),
81-
useSystem: useSystem,
82-
reuse: true,
83-
awaitOverType: SmartDialog.config.custom.awaitOverType,
84-
maskTriggerType: SmartDialog.config.custom.maskTriggerType,
85-
ignoreArea: ignoreArea,
86-
keepSingle: keepSingle,
87-
onMask: () {
88-
onMask?.call();
89-
if (!clickMaskDismiss ||
90-
DebounceUtils.instance.banContinue(DebounceType.mask, true) ||
91-
permanent) {
92-
return;
93-
}
94-
dismiss(closeType: CloseType.mask, tag: dialogInfo.tag);
95-
},
47+
param: SmartMainDialogParam(
48+
widget: param.widget,
49+
alignment: param.alignment,
50+
clickMaskDismiss: param.clickMaskDismiss,
51+
animationType: param.animationType,
52+
nonAnimationTypes: param.nonAnimationTypes,
53+
animationBuilder: param.animationBuilder,
54+
usePenetrate: param.usePenetrate,
55+
useAnimation: param.useAnimation,
56+
animationTime: param.animationTime,
57+
maskColor: param.maskColor,
58+
maskWidget: param.maskWidget,
59+
onDismiss:
60+
_handleDismiss(param.onDismiss, param.displayTime, dialogInfo),
61+
useSystem: param.useSystem,
62+
reuse: true,
63+
awaitOverType: SmartDialog.config.custom.awaitOverType,
64+
maskTriggerType: SmartDialog.config.custom.maskTriggerType,
65+
ignoreArea: param.ignoreArea,
66+
keepSingle: param.keepSingle,
67+
onMask: () {
68+
param.onMask?.call();
69+
if (!param.clickMaskDismiss ||
70+
DebounceUtils.instance.banContinue(DebounceType.mask, true) ||
71+
param.permanent) {
72+
return;
73+
}
74+
dismiss(closeType: CloseType.mask, tag: dialogInfo.tag);
75+
},
76+
),
9677
);
9778
}
9879

9980
Future<T?> showAttach<T>({
100-
required BuildContext? targetContext,
101-
required Widget widget,
102-
required TargetBuilder? targetBuilder,
103-
required ReplaceBuilder? replaceBuilder,
104-
required AdjustBuilder? adjustBuilder,
105-
required Alignment alignment,
106-
required bool usePenetrate,
107-
required bool useAnimation,
108-
required Duration animationTime,
109-
required SmartAnimationType animationType,
110-
required List<SmartNonAnimationType> nonAnimationTypes,
111-
required AnimationBuilder? animationBuilder,
112-
required ScalePointBuilder? scalePointBuilder,
113-
required Color maskColor,
114-
required bool clickMaskDismiss,
115-
required Widget? maskWidget,
116-
required Rect? maskIgnoreArea,
117-
required VoidCallback? onMask,
118-
required bool debounce,
119-
required HighlightBuilder? highlightBuilder,
120-
required VoidCallback? onDismiss,
121-
required Duration? displayTime,
122-
required String? tag,
123-
required bool keepSingle,
124-
required bool permanent,
125-
required bool useSystem,
126-
required bool bindPage,
127-
required BuildContext? bindWidget,
128-
required SmartBackType? backType,
129-
required SmartOnBack? onBack,
81+
required SmartShowAttachParam param,
13082
}) {
131-
if (DebounceUtils.instance.banContinue(DebounceType.attach, debounce)) {
83+
if (DebounceUtils.instance
84+
.banContinue(DebounceType.attach, param.debounce)) {
13285
return Future.value(null);
13386
}
13487

13588
final dialogInfo = _handleMustOperate(
136-
tag: tag,
137-
keepSingle: keepSingle,
138-
debounce: debounce,
89+
tag: param.tag,
90+
keepSingle: param.keepSingle,
91+
debounce: param.debounce,
13992
type: DialogType.attach,
140-
permanent: permanent,
141-
useSystem: useSystem,
142-
bindPage: bindPage,
143-
bindWidget: bindWidget,
144-
displayTime: displayTime,
145-
backType: backType,
146-
onBack: onBack,
93+
permanent: param.permanent,
94+
useSystem: param.useSystem,
95+
bindPage: param.bindPage,
96+
bindWidget: param.bindWidget,
97+
displayTime: param.displayTime,
98+
backType: param.backType,
99+
onBack: param.onBack,
147100
);
148101
return mainDialog.showAttach<T>(
149-
targetContext: targetContext,
150-
widget: widget,
151-
targetBuilder: targetBuilder,
152-
replaceBuilder: replaceBuilder,
153-
adjustBuilder: adjustBuilder,
154-
alignment: alignment,
155-
usePenetrate: usePenetrate,
156-
useAnimation: useAnimation,
157-
animationTime: animationTime,
158-
animationType: animationType,
159-
nonAnimationTypes: nonAnimationTypes,
160-
animationBuilder: animationBuilder,
161-
scalePointBuilder: scalePointBuilder,
162-
highlightBuilder: highlightBuilder,
163-
maskColor: maskColor,
164-
maskWidget: maskWidget,
165-
maskIgnoreArea: maskIgnoreArea,
166-
onDismiss: _handleDismiss(onDismiss, displayTime, dialogInfo),
167-
useSystem: useSystem,
168-
awaitOverType: SmartDialog.config.attach.awaitOverType,
169-
maskTriggerType: SmartDialog.config.attach.maskTriggerType,
170-
keepSingle: keepSingle,
171-
onMask: () {
172-
onMask?.call();
173-
if (!clickMaskDismiss ||
174-
DebounceUtils.instance.banContinue(DebounceType.mask, true) ||
175-
permanent) {
176-
return;
177-
}
178-
dismiss(closeType: CloseType.mask, tag: dialogInfo.tag);
179-
},
102+
param: SmartMainAttachParam(
103+
targetContext: param.targetContext,
104+
widget: param.widget,
105+
targetBuilder: param.targetBuilder,
106+
replaceBuilder: param.replaceBuilder,
107+
adjustBuilder: param.adjustBuilder,
108+
alignment: param.alignment,
109+
clickMaskDismiss: param.clickMaskDismiss,
110+
animationType: param.animationType,
111+
nonAnimationTypes: param.nonAnimationTypes,
112+
animationBuilder: param.animationBuilder,
113+
scalePointBuilder: param.scalePointBuilder,
114+
usePenetrate: param.usePenetrate,
115+
useAnimation: param.useAnimation,
116+
animationTime: param.animationTime,
117+
maskColor: param.maskColor,
118+
maskWidget: param.maskWidget,
119+
maskIgnoreArea: param.maskIgnoreArea,
120+
onMask: () {
121+
param.onMask?.call();
122+
if (!param.clickMaskDismiss ||
123+
DebounceUtils.instance.banContinue(DebounceType.mask, true) ||
124+
param.permanent) {
125+
return;
126+
}
127+
dismiss(closeType: CloseType.mask, tag: dialogInfo.tag);
128+
},
129+
highlightBuilder: param.highlightBuilder,
130+
onDismiss:
131+
_handleDismiss(param.onDismiss, param.displayTime, dialogInfo),
132+
maskTriggerType: SmartDialog.config.attach.maskTriggerType,
133+
useSystem: param.useSystem,
134+
awaitOverType: SmartDialog.config.attach.awaitOverType,
135+
keepSingle: param.keepSingle,
136+
),
180137
);
181138
}
182139

lib/src/custom/custom_loading.dart

Lines changed: 28 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import 'dart:async';
22

33
import 'package:flutter/material.dart';
44
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
5+
import 'package:flutter_smart_dialog/src/data/show_param.dart';
56
import 'package:flutter_smart_dialog/src/helper/dialog_proxy.dart';
67

7-
import '../data/animation_param.dart';
88
import '../data/base_dialog.dart';
99
import '../widget/helper/smart_overlay_entry.dart';
1010

@@ -18,22 +18,9 @@ class CustomLoading extends BaseDialog {
1818
Future Function()? _canDismissCallback;
1919

2020
Future<T?> showLoading<T>({
21-
required Widget widget,
22-
required Alignment alignment,
23-
required bool clickMaskDismiss,
24-
required SmartAnimationType animationType,
25-
required List<SmartNonAnimationType> nonAnimationTypes,
26-
required AnimationBuilder? animationBuilder,
27-
required bool usePenetrate,
28-
required bool useAnimation,
29-
required Duration animationTime,
30-
required Color maskColor,
31-
required Widget? maskWidget,
32-
required VoidCallback? onDismiss,
33-
required VoidCallback? onMask,
34-
required Duration? displayTime,
21+
required SmartShowLoadingParam param,
3522
}) {
36-
List<SmartNonAnimationType> nonAnimations = [...nonAnimationTypes];
23+
List<SmartNonAnimationType> nonAnimations = [...param.nonAnimationTypes];
3724
var continueLoading = SmartNonAnimationType.continueLoading_nonAnimation;
3825
if (SmartDialog.config.loading.isExist &&
3926
nonAnimations.contains(continueLoading)) {
@@ -51,28 +38,31 @@ class CustomLoading extends BaseDialog {
5138
});
5239

5340
return mainDialog.show<T>(
54-
widget: widget,
55-
animationType: animationType,
56-
nonAnimationTypes: nonAnimations,
57-
animationBuilder: animationBuilder,
58-
alignment: alignment,
59-
maskColor: maskColor,
60-
maskWidget: maskWidget,
61-
usePenetrate: usePenetrate,
62-
useAnimation: useAnimation,
63-
animationTime: animationTime,
64-
onDismiss: _handleDismiss(onDismiss, displayTime),
65-
useSystem: false,
66-
reuse: false,
67-
awaitOverType: SmartDialog.config.loading.awaitOverType,
68-
maskTriggerType: SmartDialog.config.loading.maskTriggerType,
69-
ignoreArea: null,
70-
keepSingle: false,
71-
onMask: () {
72-
onMask?.call();
73-
if (!clickMaskDismiss) return;
74-
_realDismiss();
75-
},
41+
param: SmartMainDialogParam(
42+
widget: param.widget,
43+
alignment: param.alignment,
44+
clickMaskDismiss: param.clickMaskDismiss,
45+
animationType: param.animationType,
46+
nonAnimationTypes: nonAnimations,
47+
animationBuilder: param.animationBuilder,
48+
usePenetrate: param.usePenetrate,
49+
useAnimation: param.useAnimation,
50+
animationTime: param.animationTime,
51+
maskColor: param.maskColor,
52+
maskWidget: param.maskWidget,
53+
onDismiss: _handleDismiss(param.onDismiss, param.displayTime),
54+
useSystem: false,
55+
reuse: false,
56+
awaitOverType: SmartDialog.config.loading.awaitOverType,
57+
maskTriggerType: SmartDialog.config.loading.maskTriggerType,
58+
ignoreArea: null,
59+
keepSingle: false,
60+
onMask: () {
61+
param.onMask?.call();
62+
if (!param.clickMaskDismiss) return;
63+
_realDismiss();
64+
},
65+
),
7666
);
7767
}
7868

0 commit comments

Comments
 (0)