Skip to content

Commit 5e490de

Browse files
committed
feat: Make overlay full screen always
1 parent 7824de6 commit 5e490de

File tree

1 file changed

+66
-12
lines changed

1 file changed

+66
-12
lines changed

ui/lib/src/loading_barrier.dart

Lines changed: 66 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import 'package:flutter/material.dart';
12
import 'package:flutter/widgets.dart';
23
import 'package:flutter_spinkit/flutter_spinkit.dart';
34
import 'package:mxc_ui/mxc_ui.dart';
45

5-
class LoadingBarrier extends StatelessWidget {
6+
class LoadingBarrier extends StatefulWidget {
67
const LoadingBarrier({
78
super.key,
89
required this.isLoading,
@@ -13,15 +14,49 @@ class LoadingBarrier extends StatelessWidget {
1314
final Widget child;
1415

1516
@override
16-
Widget build(BuildContext context) {
17-
return Stack(
18-
children: [
19-
IgnorePointer(
20-
ignoring: isLoading,
21-
child: child,
22-
),
23-
if (isLoading)
24-
Align(
17+
State<LoadingBarrier> createState() => _LoadingBarrierState();
18+
}
19+
20+
class _LoadingBarrierState extends State<LoadingBarrier> {
21+
OverlayEntry? _overlayEntry;
22+
23+
@override
24+
void initState() {
25+
super.initState();
26+
// Show overlay immediately if isLoading is true initially
27+
if (widget.isLoading) {
28+
WidgetsBinding.instance.addPostFrameCallback((_) {
29+
_showOverlay();
30+
});
31+
}
32+
}
33+
34+
@override
35+
void didUpdateWidget(LoadingBarrier oldWidget) {
36+
super.didUpdateWidget(oldWidget);
37+
38+
// Use post-frame callback to avoid build phase issues
39+
WidgetsBinding.instance.addPostFrameCallback((_) {
40+
// Show overlay when isLoading becomes true
41+
if (widget.isLoading && _overlayEntry == null) {
42+
_showOverlay();
43+
}
44+
// Hide overlay when isLoading becomes false
45+
else if (!widget.isLoading && _overlayEntry != null) {
46+
_hideOverlay();
47+
}
48+
});
49+
}
50+
51+
void _showOverlay() {
52+
// Safety check to avoid duplicate overlays
53+
if (_overlayEntry != null) return;
54+
55+
_overlayEntry = OverlayEntry(
56+
builder: (context) => Positioned.fill(
57+
child: ColoredBox(
58+
color: Colors.transparent,
59+
child: Center(
2560
child: SizedBox(
2661
width: 50,
2762
height: 50,
@@ -31,7 +66,26 @@ class LoadingBarrier extends StatelessWidget {
3166
),
3267
),
3368
),
34-
],
69+
),
70+
),
3571
);
72+
73+
Overlay.of(context).insert(_overlayEntry!);
3674
}
37-
}
75+
76+
void _hideOverlay() {
77+
_overlayEntry?.remove();
78+
_overlayEntry = null;
79+
}
80+
81+
@override
82+
void dispose() {
83+
_hideOverlay();
84+
super.dispose();
85+
}
86+
87+
@override
88+
Widget build(BuildContext context) {
89+
return widget.child;
90+
}
91+
}

0 commit comments

Comments
 (0)