heart_overlay 1.4.1 copy "heart_overlay: ^1.4.1" to clipboard
heart_overlay: ^1.4.1 copied to clipboard

The HeartOverlay widget can be used to create a fun and interactive overlay that displays a heart animation when the user taps on the screen.

example/lib/main.dart

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:heart_overlay/heart_overlay.dart';

void main() {
  runApp(const MainApp());
}

class MainApp extends StatelessWidget {
  const MainApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData.dark(useMaterial3: true),
      home: const HeartOverlayTestWidget(),
    );
  }
}

class HeartOverlayTestWidget extends StatefulWidget {
  const HeartOverlayTestWidget({
    super.key,
  });

  @override
  State<HeartOverlayTestWidget> createState() => _HeartOverlayTestWidgetState();
}

class _HeartOverlayTestWidgetState extends State<HeartOverlayTestWidget> {
  late HeartOverlayController heartOverlayController;

  @override
  void initState() {
    super.initState();
    heartOverlayController = HeartOverlayController();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black45,
      appBar: AppBar(
        title: const Text('Heart Overlay'),
        centerTitle: true,
        backgroundColor: Colors.cyan,
      ),
      body: Column(
        children: [
          Expanded(
            child: HeartOverlay(
              controller: heartOverlayController,
              duration: const Duration(seconds: 5),
              backgroundColor: Colors.black,
              tapDownType: TapDownType.single,
              // verticalOffset: 20,
              // horizontalOffset: -100,
              enableGestures: true,
              cacheExtent: 30,
              splashAnimationDetails: const SplashAnimationDetails(
                enableSplash: true,
                animationDuration: Duration(seconds: 3),
              ),
              icon: const Icon(
                Icons.favorite,
                color: Colors.redAccent,
                size: 100,
              ),
              onPressed: (numberOfHearts) {
                // Do something with the number of hearts or do something whenever the icon appears
              },
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(50.0),
            child: ElevatedButton(
              onPressed: () {
                // Get the center offset
                // Offset centerOffset =
                //     heartOverlayController.getCenterScreenOffset(context);

                double iconSize = heartOverlayController.getSize() * 2;
                double height = heartOverlayController.getHeight() ??
                    MediaQuery.of(context).size.height;
                double width = heartOverlayController.getWidth() ??
                    MediaQuery.of(context).size.width;

                Offset offset = Offset(
                  // DX
                  (Random().nextDouble() * width).clamp(
                    iconSize,
                    width - iconSize,
                  ),
                  // DY
                  (Random().nextDouble() * height).clamp(
                    iconSize,
                    height - iconSize - 100,
                  ), // - 100 is for the button padding
                );

                // offset += centerOffset; // You can add offsets

                // Show the icon at the provided offset
                heartOverlayController.showIcon(
                  offset: offset,
                );

                // Changes to the emoji on the second click
                heartOverlayController.changeIcon(
                  icon: const Text('👀'), // Required
                  size: 200, // Not required
                  horizontalOffset: 10, // Not required
                  verticalOffset: 30, // Not required
                );
              },
              child: const Text('Show Icon'),
            ),
          )
          // Expanded(
          //   child: HeartOverlay(
          //     duration: const Duration(seconds: 2),
          //     backgroundColor: Colors.white10,
          //     tapDownType: TapDownType.single,
          //     icon: const Text('✌️'),
          //     // Splash would not work because the [icon] provided is not of type [Icon]
          //     splashAnimationDetails: const SplashAnimationDetails(
          //       enableSplash: true,
          //     ),
          //     size: 60,
          //     // Sometimes it might be nesessary to add vertical and horizontal offset
          //     verticalOffset: 20,
          //     horizontalOffset: -10,
          //     onPressed: (numberOfHearts) {
          //       // Do something with the number of hearts or do something whenever the icon appears
          //     },
          //     child: Center(
          //       child: ElevatedButton(
          //         onPressed: () {},
          //         child: const Text('Tap here'),
          //       ),
          //     ),
          //   ),
          // ),
        ],
      ),
    );
  }
}
8
likes
160
pub points
72%
popularity
screenshot

Publisher

unverified uploader

The HeartOverlay widget can be used to create a fun and interactive overlay that displays a heart animation when the user taps on the screen.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

flutter

More

Packages that depend on heart_overlay