@@ -24,6 +24,7 @@ import 'dart:async';
2424import 'dart:math' ;
2525
2626import 'package:flutter/material.dart' ;
27+ import 'package:back_button_interceptor/back_button_interceptor.dart' ;
2728
2829import './widgets/container.dart' ;
2930import './widgets/progress.dart' ;
@@ -253,6 +254,13 @@ class EasyLoading {
253254 bool ? dismissOnTap,
254255 }) {
255256 Widget w = indicator ?? (_instance.indicatorWidget ?? LoadingIndicator ());
257+
258+ final isIgnoringBackButton = ! EasyLoadingTheme .ignoring (maskType);
259+
260+ if (isIgnoringBackButton) {
261+ BackButtonInterceptor .add (_backButtonInterceptor);
262+ }
263+
256264 return _instance._show (
257265 status: status,
258266 maskType: maskType,
@@ -287,6 +295,12 @@ class EasyLoading {
287295 key: _progressKey,
288296 value: value,
289297 );
298+ final isIgnoringBackButton = ! EasyLoadingTheme .ignoring (maskType);
299+
300+ if (isIgnoringBackButton) {
301+ BackButtonInterceptor .add (_backButtonInterceptor);
302+ }
303+
290304 _instance._show (
291305 status: status,
292306 maskType: maskType,
@@ -390,7 +404,15 @@ class EasyLoading {
390404 }) {
391405 // cancel timer
392406 _instance._cancelTimer ();
393- return _instance._dismiss (animation);
407+ return _instance._dismiss (animation).whenComplete (
408+ () {
409+ final isIgnoringBackButton = ! EasyLoadingTheme .ignoring (null );
410+
411+ if (! isIgnoringBackButton) return ;
412+
413+ BackButtonInterceptor .remove (_backButtonInterceptor);
414+ },
415+ );
394416 }
395417
396418 /// add loading status callback
@@ -520,4 +542,10 @@ class EasyLoading {
520542 _timer? .cancel ();
521543 _timer = null ;
522544 }
545+
546+ static bool _backButtonInterceptor (
547+ bool stopDefaultButtonEvent,
548+ RouteInfo routeInfo,
549+ ) =>
550+ true ;
523551}
0 commit comments