Skip to content

Commit 7626f8f

Browse files
author
darkhan.nausharipov
committed
pop progress dialog with navigatorKey (apache#25255)
1 parent 12882fb commit 7626f8f

6 files changed

Lines changed: 52 additions & 45 deletions

File tree

learning/tour-of-beam/frontend/lib/components/profile/user_menu.dart

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,13 @@ class _Info extends StatelessWidget {
8989
}
9090
}
9191

92-
class _Buttons extends StatefulWidget {
92+
class _Buttons extends StatelessWidget {
9393
final VoidCallback closeOverlayCallback;
9494

9595
const _Buttons({
9696
required this.closeOverlayCallback,
9797
});
9898

99-
@override
100-
State<_Buttons> createState() => _ButtonsState();
101-
}
102-
103-
class _ButtonsState extends State<_Buttons> {
10499
@override
105100
Widget build(BuildContext context) {
106101
final authNotifier = GetIt.instance.get<AuthNotifier>();
@@ -123,25 +118,26 @@ class _ButtonsState extends State<_Buttons> {
123118
_IconLabel(
124119
onTap: () async {
125120
await authNotifier.logOut();
126-
widget.closeOverlayCallback();
121+
closeOverlayCallback();
127122
},
128123
iconPath: Assets.svg.profileLogout,
129124
label: 'ui.signOut'.tr(),
130125
),
131126
const BeamDivider(),
132127
_IconLabel(
133128
onTap: () async {
134-
widget.closeOverlayCallback();
129+
closeOverlayCallback();
135130
final confirmed = await ConfirmDialog.show(
136131
context: context,
137132
confirmButtonText: 'ui.deleteMyAccount'.tr(),
138133
subtitle: 'dialogs.deleteAccountWarning'.tr(),
139134
title: 'ui.deleteTobAccount'.tr(),
140135
);
141-
if (confirmed && mounted) {
142-
await BeamOverlays.showProgressOverlay(
143-
this.context,
144-
authNotifier.deleteAccount(),
136+
if (confirmed) {
137+
ProgressDialog.show(
138+
future: authNotifier.deleteAccount(),
139+
navigatorKey:
140+
GetIt.instance.get<BeamRouterDelegate>().navigatorKey!,
145141
);
146142
}
147143
},

learning/tour-of-beam/frontend/lib/locator.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import 'package:app_state/app_state.dart';
2020
import 'package:get_it/get_it.dart';
21+
import 'package:playground_components/playground_components.dart';
2122

2223
import 'auth/notifier.dart';
2324
import 'cache/content_tree.dart';
@@ -52,12 +53,12 @@ void _initializeCaches() {
5253
}
5354

5455
void _initializeState() {
55-
GetIt.instance.registerSingleton(AppNotifier());
56-
GetIt.instance.registerSingleton(
57-
PageStack(
58-
bottomPage: WelcomePage(),
59-
createPage: PageFactory.createPage,
60-
routeInformationParser: TobRouteInformationParser(),
61-
),
56+
final pageStack = PageStack(
57+
bottomPage: WelcomePage(),
58+
createPage: PageFactory.createPage,
59+
routeInformationParser: TobRouteInformationParser(),
6260
);
61+
GetIt.instance.registerSingleton(AppNotifier());
62+
GetIt.instance.registerSingleton(pageStack);
63+
GetIt.instance.registerSingleton(BeamRouterDelegate(pageStack));
6364
}

learning/tour-of-beam/frontend/lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void main() async {
4242
const englishLocale = Locale('en');
4343

4444
final pageStack = GetIt.instance.get<PageStack>();
45-
final routerDelegate = BeamRouterDelegate(pageStack);
45+
final routerDelegate = GetIt.instance.get<BeamRouterDelegate>();
4646
final routeInformationParser = TobRouteInformationParser();
4747
final backButtonDispatcher = PageStackBackButtonDispatcher(pageStack);
4848

learning/tour-of-beam/frontend/lib/pages/tour/state.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,11 @@ class TourNotifier extends ChangeNotifier with PageStateMixin<void> {
214214
}
215215

216216
@override
217-
void dispose() {
217+
Future<void> dispose() async {
218218
_unitContentCache.removeListener(_onUnitChanged);
219219
contentTreeController.removeListener(_onUnitChanged);
220220
_appNotifier.removeListener(_onAppNotifierChanged);
221221
_authNotifier.removeListener(_onUnitProgressChanged);
222-
super.dispose();
222+
await super.dispose();
223223
}
224224
}

playground/frontend/playground_components/lib/playground_components.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export 'src/widgets/bubble.dart';
6161
export 'src/widgets/clickable.dart';
6262
export 'src/widgets/complexity.dart';
6363
export 'src/widgets/dialogs/confirm.dart';
64+
export 'src/widgets/dialogs/progress.dart';
6465
export 'src/widgets/divider.dart';
6566
export 'src/widgets/header_icon_button.dart';
6667
export 'src/widgets/loading_error.dart';
@@ -72,7 +73,6 @@ export 'src/widgets/output/output_tab.dart';
7273
export 'src/widgets/output/output_tabs.dart';
7374
export 'src/widgets/overlay/body.dart';
7475
export 'src/widgets/overlay/opener.dart';
75-
export 'src/widgets/overlay/overlays.dart';
7676
export 'src/widgets/overlay/widget.dart';
7777
export 'src/widgets/reset_button.dart';
7878
export 'src/widgets/run_or_cancel_button.dart';

playground/frontend/playground_components/lib/src/widgets/overlay/overlays.dart renamed to playground/frontend/playground_components/lib/src/widgets/dialogs/progress.dart

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,42 @@
1616
* limitations under the License.
1717
*/
1818

19+
import 'dart:async';
20+
1921
import 'package:flutter/material.dart';
2022

21-
import '../../../playground_components.dart';
23+
class ProgressDialog extends StatelessWidget {
24+
const ProgressDialog();
25+
26+
static void show({
27+
required Future future,
28+
required GlobalKey<NavigatorState> navigatorKey,
29+
}) {
30+
var shown = true;
31+
unawaited(
32+
showDialog(
33+
context: navigatorKey.currentContext!,
34+
builder: (_) => const ProgressDialog(),
35+
).whenComplete(() {
36+
shown = false;
37+
}),
38+
);
39+
unawaited(
40+
future.whenComplete(() {
41+
if (shown) {
42+
navigatorKey.currentState!.pop();
43+
}
44+
}),
45+
);
46+
}
2247

23-
/// Groups common overlays.
24-
class BeamOverlays {
25-
/// Shows an overlay with [CircularProgressIndicator]
26-
/// until [future] completes.
27-
static Future<void> showProgressOverlay(
28-
BuildContext context,
29-
Future future,
30-
) async {
31-
final closeNotifier = PublicNotifier();
32-
showOverlay(
33-
context: context,
34-
closeNotifier: closeNotifier,
35-
barrierDismissible: false,
36-
positioned: Positioned.fill(
37-
child: Container(
38-
alignment: Alignment.center,
39-
color: Theme.of(context).dialogBackgroundColor.withOpacity(0.2),
40-
child: const CircularProgressIndicator(),
41-
),
48+
@override
49+
Widget build(BuildContext context) {
50+
return const Dialog(
51+
backgroundColor: Colors.transparent,
52+
child: Center(
53+
child: CircularProgressIndicator(),
4254
),
4355
);
44-
await future;
45-
closeNotifier.notifyPublic();
4656
}
4757
}

0 commit comments

Comments
 (0)