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 ๐ช!
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 ๐ช!