Skip to content

Commit aa7ee70

Browse files
committed
Fix #77
1 parent 5862b3c commit aa7ee70

File tree

6 files changed

+57
-30
lines changed

6 files changed

+57
-30
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
- Add SmartMaskTriggerType ([#71](https://github.com/fluttercandies/flutter_smart_dialog/issues/71))
99
- Fix [#72](https://github.com/fluttercandies/flutter_smart_dialog/issues/72)
1010
- Complete [#75](https://github.com/fluttercandies/flutter_smart_dialog/issues/75): add animationBuilder(Support highly custom animation)
11+
- Fix [#77](https://github.com/fluttercandies/flutter_smart_dialog/issues/77)
1112

1213

1314
# [4.3.x]

lib/flutter_smart_dialog.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ export 'src/config/smart_config_attach.dart';
66
export 'src/config/smart_config_custom.dart';
77
export 'src/config/smart_config_loading.dart';
88
export 'src/config/smart_config_toast.dart';
9+
export 'src/data/animation_param.dart' show AnimationParam;
910

1011
/// dialog
1112
export 'src/init_dialog.dart';
1213
export 'src/smart_dialog.dart';
1314
export 'src/widget/helper/dialog_scope.dart' show SmartDialogController;
14-
export 'src/data/animation_param.dart' show AnimationParam;

lib/src/widget/attach_dialog_widget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import 'package:flutter_smart_dialog/src/data/base_controller.dart';
33
import 'package:flutter_smart_dialog/src/util/view_utils.dart';
44
import 'package:flutter_smart_dialog/src/widget/animation/highlight_mask_animation.dart';
55
import 'package:flutter_smart_dialog/src/widget/animation/scale_animation.dart';
6-
import 'package:flutter_smart_dialog/src/widget/helper/dialog_scope.dart';
76
import 'package:flutter_smart_dialog/src/widget/helper/attach_widget.dart';
7+
import 'package:flutter_smart_dialog/src/widget/helper/dialog_scope.dart';
88
import 'package:flutter_smart_dialog/src/widget/helper/mask_event.dart';
99

1010
import '../config/enum_config.dart';

lib/src/widget/helper/attach_widget.dart

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ import '../attach_dialog_widget.dart';
66
typedef AttachBuilder = Widget Function(Widget child);
77

88
typedef BeforeBuilder = void Function(
9-
Offset targetOffset,
10-
Size targetSize,
11-
Offset selfOffset,
12-
Size selfSize,
13-
);
9+
Offset targetOffset,
10+
Size targetSize,
11+
Offset selfOffset,
12+
Size selfSize,
13+
);
1414

1515
typedef CoverBuilder = List<Widget> Function(
16-
Offset targetOffset,
17-
Size targetSize,
18-
);
16+
Offset targetOffset,
17+
Size targetSize,
18+
);
1919

2020
class AttachWidget extends StatefulWidget {
2121
const AttachWidget({
@@ -115,9 +115,9 @@ class _AttachWidgetState extends State<AttachWidget> {
115115
if (widget.targetBuilder != null) {
116116
targetOffset = widget.targetContext != null
117117
? widget.targetBuilder!(
118-
targetOffset,
119-
Size(targetSize.width, targetSize.height),
120-
)
118+
targetOffset,
119+
Size(targetSize.width, targetSize.height),
120+
)
121121
: widget.targetBuilder!(Offset.zero, Size.zero);
122122
targetSize = widget.targetContext != null ? targetSize : Size.zero;
123123
}
@@ -130,9 +130,7 @@ class _AttachWidgetState extends State<AttachWidget> {
130130
/// 处理: 方向及其位置
131131
void _handleLocation() {
132132
final selfSize = (_childContext!.findRenderObject() as RenderBox).size;
133-
final screen = MediaQuery
134-
.of(context)
135-
.size;
133+
final screen = MediaQuery.of(context).size;
136134

137135
//动画方向及其位置
138136
final alignment = widget.alignment;
@@ -221,9 +219,7 @@ class _AttachWidgetState extends State<AttachWidget> {
221219
bool fixedVertical = false,
222220
}) {
223221
final childSize = (_childContext!.findRenderObject() as RenderBox).size;
224-
final screen = MediaQuery
225-
.of(context)
226-
.size;
222+
final screen = MediaQuery.of(context).size;
227223
var rectInfo = RectInfo(left: left, right: right, top: top, bottom: bottom);
228224

229225
//处理左右边界问题
@@ -268,9 +264,7 @@ class AdaptBuilder extends StatelessWidget {
268264

269265
@override
270266
Widget build(BuildContext context) {
271-
final size = MediaQuery
272-
.of(context)
273-
.size;
267+
final size = MediaQuery.of(context).size;
274268
return Row(mainAxisSize: MainAxisSize.min, children: [
275269
Column(mainAxisSize: MainAxisSize.min, children: [
276270
Container(

lib/src/widget/helper/toast_helper.dart

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,41 @@ class ToastHelper extends StatefulWidget {
1919
class _ToastHelperState extends State<ToastHelper> with WidgetsBindingObserver {
2020
//solve problem of keyboard shelter toast
2121
double _keyboardHeight = 0;
22+
late double _postFrameOpacity;
23+
BuildContext? _childContext;
24+
25+
//offset size
26+
Offset? selfOffset;
27+
Size? selfSize;
2228

2329
@override
2430
void initState() {
25-
super.initState();
2631
widgetsBinding.addObserver(this);
2732
_dealKeyboard();
33+
34+
_postFrameOpacity = 0;
35+
ViewUtils.addSafeUse(() {
36+
if (!mounted) return;
37+
38+
final renderBox = _childContext!.findRenderObject() as RenderBox;
39+
selfOffset = renderBox.localToGlobal(Offset.zero);
40+
selfSize = renderBox.size;
41+
_postFrameOpacity = 1;
42+
setState(() {});
43+
});
44+
super.initState();
2845
}
2946

3047
@override
3148
Widget build(BuildContext context) {
49+
var child = Builder(builder: (context) {
50+
_childContext = context;
51+
return Opacity(opacity: _postFrameOpacity, child: widget.child);
52+
});
53+
3254
return Container(
3355
margin: EdgeInsets.only(bottom: _keyboardHeight),
34-
child: widget.consumeEvent
35-
? widget.child
36-
: IgnorePointer(child: widget.child),
56+
child: widget.consumeEvent ? child : IgnorePointer(child: child),
3757
);
3858
}
3959

@@ -50,9 +70,21 @@ class _ToastHelperState extends State<ToastHelper> with WidgetsBindingObserver {
5070
}
5171

5272
void _dealKeyboard() {
53-
ViewUtils.addSafeUse((){
54-
if (!mounted) return;
55-
_keyboardHeight = MediaQuery.of(context).viewInsets.bottom;
73+
ViewUtils.addSafeUse(() {
74+
if (!mounted || selfOffset == null || selfSize == null) return;
75+
76+
var screen = MediaQuery.of(context).size;
77+
var childToBottom = screen.height - (selfOffset!.dy + selfSize!.height);
78+
var keyboardHeight = MediaQuery.of(context).viewInsets.bottom;
79+
if (childToBottom < 0) {
80+
_keyboardHeight = keyboardHeight;
81+
setState(() {});
82+
return;
83+
}
84+
if (childToBottom - keyboardHeight > -30) {
85+
return;
86+
}
87+
_keyboardHeight = keyboardHeight - childToBottom;
5688
setState(() {});
5789
});
5890
}

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description:
33
An elegant Flutter Dialog solution,
44
Easily implement Toast, Loading and custom Dialog,
55
Make the use of the dialog easier!
6-
version: 4.5.5
6+
version: 4.5.5+1
77
homepage: https://github.com/fluttercandies/flutter_smart_dialog
88
# flutter pub publish --server=https://pub.dartlang.org
99

0 commit comments

Comments
 (0)