dev
dart 57 lines 1.41 KB
Raw
1 import 'dart:async';
2 import 'dart:collection';
3 import 'package:cake_wallet/src/screens/wallet_connect/models/bottom_sheet_queue_item_model.dart';
4 import 'package:flutter/material.dart';
5
6 enum WCBottomSheetResult { reject, one, all }
7
8 abstract class BottomSheetService {
9 abstract final ValueNotifier<BottomSheetQueueItemModel?> currentSheet;
10
11 Future<dynamic> queueBottomSheet({
12 required Widget widget,
13 bool isModalDismissible = false,
14 int closeAfter = 0,
15 });
16
17 void showNext();
18 }
19
20 class BottomSheetServiceImpl implements BottomSheetService {
21 Queue<BottomSheetQueueItemModel> queue = Queue<BottomSheetQueueItemModel>();
22
23 @override
24 final ValueNotifier<BottomSheetQueueItemModel?> currentSheet = ValueNotifier(null);
25
26 @override
27 Future<dynamic> queueBottomSheet({
28 required Widget widget,
29 int closeAfter = 0,
30 bool isModalDismissible = false,
31 }) async {
32 final completer = Completer<dynamic>();
33 final queueItem = BottomSheetQueueItemModel(
34 widget: widget,
35 completer: completer,
36 closeAfter: closeAfter,
37 isModalDismissible: isModalDismissible,
38 );
39
40 if (currentSheet.value == null) {
41 currentSheet.value = queueItem;
42 } else {
43 queue.add(queueItem);
44 }
45
46 return await completer.future;
47 }
48
49 @override
50 void showNext() {
51 if (queue.isEmpty) {
52 currentSheet.value = null;
53 } else {
54 currentSheet.value = queue.removeFirst();
55 }
56 }
57 }