confetti_layer.dart 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import 'package:confetti/confetti.dart';
  2. import 'package:flutter/material.dart';
  3. class ConfettiLayer {
  4. OverlayEntry? _overlayEntry;
  5. final TickerProvider tickerProvider;
  6. final int numberOfParticles;
  7. late ConfettiController controller;
  8. ConfettiLayer(this.tickerProvider, {this.numberOfParticles = 20}) : controller = ConfettiController(duration: const Duration(milliseconds: 200));
  9. play() {
  10. controller.play();
  11. }
  12. setup(BuildContext context) {
  13. if (_overlayEntry != null) return;
  14. _overlayEntry = OverlayEntry(
  15. builder: (context) {
  16. return IgnorePointer(
  17. child: Align(
  18. alignment: Alignment.center,
  19. child: ConfettiWidget(
  20. confettiController: controller,
  21. blastDirectionality: BlastDirectionality.explosive,
  22. numberOfParticles: numberOfParticles,
  23. gravity: 1,
  24. shouldLoop: false,
  25. maxBlastForce: 400,
  26. emissionFrequency: 1,
  27. ),
  28. ),
  29. );
  30. },
  31. );
  32. Overlay.of(context).insert(_overlayEntry!);
  33. }
  34. dispose() {
  35. _overlayEntry?.remove();
  36. }
  37. }