Thank you, I was looking for something like this. I ended up using a Riverpod variation of your overlay: import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; final showLoadingOverlayProvider = StateProvider<bool>((ref) => false); class LoadingOverlay extends ConsumerWidget { final Widget child; LoadingOverlay({ Key? key, required this.child, }) : super(key: key); @override Widget build(BuildContext context, WidgetRef ref) { final showLoadingOverlay = ref.watch(showLoadingOverlayProvider); return Stack( children: [ child, if (showLoadingOverlay) BackdropFilter( filter: ImageFilter.blur(sigmaX: 4.0, sigmaY: 4.0), child: const Opacity( opacity: 0.8, child: ModalBarrier(dismissible: false, color: Colors.black), ), ), if (showLoadingOverlay) Center(child: CircularProgressIndicator()), ], ); } } Great article 💪!