Skip to content

Commit 6bbbe9c

Browse files
authored
Merge pull request #336 from Tilakraj-B/main
Added Overlay Widget for saving state
2 parents 9b40763 + 0c5a7d1 commit 6bbbe9c

File tree

9 files changed

+146
-6
lines changed

9 files changed

+146
-6
lines changed

assets/completed.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"v":"5.1.16","fr":29.9700012207031,"ip":0,"op":30.0000012219251,"w":500,"h":500,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-158,21],[-63,116],[162,-109]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.129411764706,0.8,0.223529411765,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":36,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[100]},{"t":20.0000008146167}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":-149.000006068894,"op":40.0000016292334,"st":-149.000006068894,"bm":0}],"markers":[]}

assets/saving.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":25,"ip":0,"op":31,"w":200,"h":200,"nm":"save","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Layer 4","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[101.689,94.053,0],"ix":2},"a":{"a":0,"k":[101.689,94.053,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.25,0.25,0.25],"y":[1,1,1]},"o":{"x":[0.33,0.33,0.33],"y":[0,0,0]},"t":13,"s":[100,0,100]},{"i":{"x":[0.67,0.67,0.67],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":23,"s":[100,100,100]},{"i":{"x":[0.67,0.67,0.67],"y":[1,1,1]},"o":{"x":[0.75,0.75,0.75],"y":[0,0,0]},"t":60,"s":[100,100,100]},{"t":68,"s":[100,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.5,0.985],[-0.5,0.985],[-0.5,-0.985],[0.5,-0.985]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.20000000298,0.192156866193,0.196078434587,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[101.689,95.038],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":75,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Layer 3","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100.213,92.217,0],"ix":2},"a":{"a":0,"k":[100.213,92.217,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.25,0.25,0.25],"y":[1,1,1]},"o":{"x":[0.33,0.33,0.33],"y":[0,0,0]},"t":7,"s":[0,0,100]},{"i":{"x":[0.67,0.67,0.67],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":21,"s":[100,100,100]},{"i":{"x":[0.67,0.67,0.67],"y":[1,1,1]},"o":{"x":[0.75,0.75,0.75],"y":[0,0,0]},"t":61,"s":[100,100,100]},{"t":70,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.276,0],[0,0],[0,0.276],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.276,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.276]],"v":[[3.623,3.021],[-3.623,3.021],[-4.123,2.521],[-4.123,-3.021],[-3.123,-3.021],[-3.123,2.021],[3.123,2.021],[3.123,-2.943],[4.123,-2.943],[4.123,2.521]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.20000000298,0.192156866193,0.196078434587,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[100.213,95.238],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":75,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Layer 2","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100.213,109.234,0],"ix":2},"a":{"a":0,"k":[100.213,109.234,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.25,0.25,0.25],"y":[1,1,1]},"o":{"x":[0.33,0.33,0.33],"y":[0,0,0]},"t":4,"s":[0,0,100]},{"i":{"x":[0.67,0.67,0.67],"y":[1,1,1]},"o":{"x":[0.33,0.33,0.33],"y":[0,0,0]},"t":20,"s":[100,100,100]},{"i":{"x":[0.67,0.67,0.67],"y":[1,1,1]},"o":{"x":[0.75,0.75,0.75],"y":[0,0,0]},"t":62,"s":[100,100,100]},{"t":72,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.37,0],[0,0],[0,-0.37],[0,0],[0,0],[0,0],[-0.921,0],[0,0],[0,-0.921]],"o":[[0,0],[0,0],[0,-0.37],[0,0],[-0.37,0],[0,0],[0,0],[0,0],[0,-0.921],[0,0],[0.921,0],[0,0]],"v":[[5.744,3.929],[4.744,3.929],[4.744,-2.259],[4.074,-2.929],[-4.074,-2.929],[-4.744,-2.259],[-4.744,3.929],[-5.744,3.929],[-5.744,-2.259],[-4.074,-3.929],[4.074,-3.929],[5.744,-2.259]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.20000000298,0.192156866193,0.196078434587,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[100.213,105.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":75,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100.739,174.33,0],"ix":2},"a":{"a":0,"k":[100.213,109.734,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.25,0.25,0.25],"y":[1,1,1]},"o":{"x":[0.33,0.33,0.33],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.25,0.25,0.25],"y":[1,1,1]},"o":{"x":[0.33,0.33,0.33],"y":[0,0,0]},"t":12,"s":[830,830,100]},{"i":{"x":[0.67,0.67,0.67],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":19,"s":[815,815,100]},{"i":{"x":[0.67,0.67,0.67],"y":[1,1,1]},"o":{"x":[0.75,0.75,0.75],"y":[0,0,0]},"t":63,"s":[815,815,100]},{"t":74,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.522,8.036],[8.522,8.036],[8.522,-4.465],[5.185,-7.882],[-8.522,-8.03]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.276,0],[0,0],[0,0.276],[0,0],[-0.095,0.094],[-0.117,0.009],[0,0],[-0.093,-0.095],[0,0],[0,-0.13],[0,0]],"o":[[0,0],[-0.276,0],[0,0],[0,-0.134],[0.095,-0.094],[0,0],[0.133,0.001],[0,0],[0.091,0.093],[0,0],[0,0.276]],"v":[[9.022,9.036],[-9.022,9.036],[-9.522,8.536],[-9.522,-8.536],[-9.374,-8.891],[-9.017,-9.036],[5.403,-8.879],[5.756,-8.729],[9.38,-5.018],[9.522,-4.668],[9.522,8.536]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.20000000298,0.192156866193,0.196078434587,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[100.213,100.698],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":75,"st":0,"bm":0}],"markers":[]}

lib/consts.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ const kGitUrl = "https://github.com/foss42/apidash";
1010
const kIssueUrl = "$kGitUrl/issues";
1111
const kDefaultUri = "api.apidash.dev";
1212

13+
const kAssetIntroMd = "assets/intro.md";
14+
const kAssetSendingLottie = "assets/sending.json";
15+
const kAssetSavingLottie = "assets/saving.json";
16+
const kAssetSavedLottie = "assets/completed.json";
17+
1318
final kIsMacOS = !kIsWeb && Platform.isMacOS;
1419
final kIsWindows = !kIsWeb && Platform.isWindows;
1520
final kIsLinux = !kIsWeb && Platform.isLinux;
@@ -25,6 +30,7 @@ final kColorTransparentState =
2530
MaterialStateProperty.all<Color>(Colors.transparent);
2631
const kColorTransparent = Colors.transparent;
2732
const kColorWhite = Colors.white;
33+
const kColorBlack = Colors.black;
2834
const kColorRed = Colors.red;
2935
final kColorLightDanger = Colors.red.withOpacity(0.9);
3036
const kColorDarkDanger = Color(0xffcf6679);
@@ -47,6 +53,7 @@ final kCodeStyle = TextStyle(
4753

4854
const kHintOpacity = 0.6;
4955
const kForegroundOpacity = 0.05;
56+
const kOverlayBackgroundOpacity = 0.5;
5057

5158
const kTextStyleButton = TextStyle(fontWeight: FontWeight.bold);
5259
const kTextStyleButtonSmall = TextStyle(fontSize: 12);
@@ -79,6 +86,7 @@ const kPh20t40 = EdgeInsets.only(
7986
top: 40,
8087
);
8188
const kPh60 = EdgeInsets.symmetric(horizontal: 60);
89+
const kPh60v60 = EdgeInsets.symmetric(vertical: 60, horizontal: 60);
8290
const kP24CollectionPane = EdgeInsets.only(
8391
top: 24,
8492
left: 4.0,
@@ -522,3 +530,5 @@ const kLabelBusy = "Busy";
522530
const kLabelCopy = "Copy";
523531
const kLabelSave = "Save";
524532
const kLabelDownload = "Download";
533+
const kLabelSaving = "Saving";
534+
const kLabelSaved = "Saved";

lib/screens/home_page/collection_pane.dart

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class CollectionPane extends ConsumerWidget {
1212

1313
@override
1414
Widget build(BuildContext context, WidgetRef ref) {
15-
var sm = ScaffoldMessenger.of(context);
15+
final overlayWidget = OverlayWidgetTemplate(context: context);
1616
final collection = ref.watch(collectionStateNotifierProvider);
1717
final savingData = ref.watch(saveDataStateProvider);
1818
if (collection == null) {
@@ -34,12 +34,18 @@ class CollectionPane extends ConsumerWidget {
3434
onPressed: savingData
3535
? null
3636
: () async {
37+
overlayWidget.show(
38+
widget:
39+
const SavingOverlay(saveCompleted: false));
40+
3741
await ref
3842
.read(collectionStateNotifierProvider.notifier)
3943
.saveData();
40-
41-
sm.hideCurrentSnackBar();
42-
sm.showSnackBar(getSnackBar("Saved"));
44+
overlayWidget.hide();
45+
overlayWidget.show(
46+
widget: const SavingOverlay(saveCompleted: true));
47+
await Future.delayed(const Duration(seconds: 1));
48+
overlayWidget.hide();
4349
},
4450
icon: const Icon(
4551
Icons.save,

lib/widgets/intro_message.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class IntroMessage extends StatelessWidget {
1616
late final String version;
1717

1818
Future<void> introData() async {
19-
text = await rootBundle.loadString('assets/intro.md');
19+
text = await rootBundle.loadString(kAssetIntroMd);
2020
version = (await PackageInfo.fromPlatform()).version;
2121
}
2222

lib/widgets/overlay_widget.dart

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:lottie/lottie.dart';
3+
import '../consts.dart';
4+
5+
class OverlayWidgetTemplate {
6+
OverlayEntry? _overlay;
7+
BuildContext context;
8+
OverlayState? _overlayState;
9+
OverlayWidgetTemplate({required this.context}) {
10+
_overlayState = Overlay.of(context);
11+
}
12+
13+
void show({required Widget widget}) {
14+
if (_overlay == null) {
15+
_overlay = OverlayEntry(
16+
// replace with your own layout
17+
builder: (context) => ColoredBox(
18+
color: kColorBlack.withOpacity(kOverlayBackgroundOpacity),
19+
child: widget),
20+
);
21+
_overlayState!.insert(_overlay!);
22+
}
23+
}
24+
25+
void hide() {
26+
if (_overlay != null) {
27+
_overlay?.remove();
28+
_overlay = null;
29+
}
30+
}
31+
}
32+
33+
class SavingOverlay extends StatelessWidget {
34+
final bool saveCompleted;
35+
const SavingOverlay({super.key, required this.saveCompleted});
36+
37+
@override
38+
Widget build(BuildContext context) {
39+
return Center(
40+
child: Card(
41+
child: Padding(
42+
padding: kPh60v60,
43+
child: Column(
44+
mainAxisSize: MainAxisSize.min,
45+
children: [
46+
Lottie.asset(
47+
saveCompleted ? kAssetSavedLottie : kAssetSavingLottie,
48+
width: 100,
49+
height: 100),
50+
kHSpacer20,
51+
Text(
52+
saveCompleted ? kLabelSaved : kLabelSaving,
53+
style: const TextStyle(
54+
fontSize: kDefaultFontSize,
55+
),
56+
)
57+
],
58+
),
59+
),
60+
),
61+
);
62+
}
63+
}

lib/widgets/response_widgets.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class SendingWidget extends StatelessWidget {
4242
child: Column(
4343
mainAxisAlignment: MainAxisAlignment.center,
4444
children: [
45-
Lottie.asset("assets/sending.json"),
45+
Lottie.asset(kAssetSendingLottie),
4646
],
4747
),
4848
);

lib/widgets/widgets.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export 'intro_message.dart';
1313
export 'json_previewer.dart';
1414
export 'markdown.dart';
1515
export 'menus.dart';
16+
export 'overlay_widget.dart';
1617
export 'previewer.dart';
1718
export 'request_widgets.dart';
1819
export 'response_widgets.dart';
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import 'package:apidash/consts.dart';
2+
import 'package:apidash/widgets/overlay_widget.dart';
3+
import 'package:flutter/material.dart';
4+
import 'package:flutter_test/flutter_test.dart';
5+
import 'package:lottie/lottie.dart';
6+
7+
void main() {
8+
testWidgets('OverlayWidgetTemplate Test', (WidgetTester tester) async {
9+
late OverlayWidgetTemplate overlayWidget;
10+
11+
await tester.pumpWidget(
12+
MaterialApp(
13+
home: Builder(
14+
builder: (BuildContext context) {
15+
overlayWidget = OverlayWidgetTemplate(context: context);
16+
return Container(); // Return any widget here, as OverlayWidgetTemplate doesn't return a widget
17+
},
18+
),
19+
),
20+
);
21+
22+
overlayWidget.show(widget: const Text('Test'));
23+
await tester.pump();
24+
expect(find.text('Test'), findsOneWidget);
25+
26+
overlayWidget.hide();
27+
await tester.pump();
28+
expect(find.text('Test'), findsNothing);
29+
});
30+
31+
testWidgets('SavingOverlay Test', (WidgetTester tester) async {
32+
await tester.pumpWidget(
33+
const MaterialApp(
34+
home: Scaffold(
35+
body: SavingOverlay(
36+
saveCompleted: false,
37+
),
38+
),
39+
),
40+
);
41+
expect(find.byType(Card), findsOneWidget);
42+
expect(find.byType(Lottie), findsOneWidget);
43+
expect(find.text(kLabelSaving), findsOneWidget);
44+
45+
await tester.pumpWidget(
46+
const MaterialApp(
47+
home: Scaffold(
48+
body: SavingOverlay(
49+
saveCompleted: true,
50+
),
51+
),
52+
),
53+
);
54+
expect(find.byType(Card), findsOneWidget);
55+
expect(find.byType(Lottie), findsOneWidget);
56+
expect(find.text(kLabelSaved), findsOneWidget);
57+
});
58+
}

0 commit comments

Comments
 (0)