battle_search_overlay 0.0.2 copy "battle_search_overlay: ^0.0.2" to clipboard
battle_search_overlay: ^0.0.2 copied to clipboard

A Flutter package that helps you build beautiful animated Searching Opponent overlays for battle-style apps.

Battle Search Overlay πŸ”₯

A Flutter package that helps you build beautiful animated "Searching Opponent" overlays for battle-style apps and games. Ideal for VS matchups, profile reveals, and real-time opponent searching UIs!

✨ Features #

  • πŸŒ€ Smooth opponent search loop with timer

  • πŸ” Automatically cycles through opponents

  • ⏳ Timeout fallback with callback

  • πŸ’₯ Fade-in animated VS icons

  • πŸ‘€ Customizable avatar image and name

  • ❌ Cancel button to stop search early

  • 🧩 Built with Material, clean and reusable


# Installation
  1. Add the latest version of package to your pubspec.yaml:
dart
  dependencies:
    flutter:
      sdk: flutter
    battle_search_overlay: latest
  1. Then run:
flutter pub get

πŸš€ Usage #

  1. Import the package and use it in your App.
import 'package:battle_search_overlay/battle_search_overlay.dart';

  1. Show Overlay
showDialog(
  context: context,
  barrierDismissible: false,
  builder: (context) => SearchingOpponent(
    me: {
      'name': 'You',
      'image': 'https://yourserver.com/your-image.png',
    },
    users: [
      {'name': 'Opponent 1', 'image': 'https://...'},
      {'name': 'Opponent 2', 'image': 'https://...'},
      // more users...
    ],
    onCancel: () {
      // Dismiss overlay
      Navigator.of(context).pop();
    },
    onTimeout: () {
      // Show "No match found" dialog
    },
    durationInSeconds: 10,
  ),
);

  1. Example of VS Overlay
import 'package:flutter/material.dart';
import 'package:battle_search_overlay/battle_search_overlay.dart';

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

  @override
  State<Battle> createState() => _BattleState();
}

class _BattleState extends State<Battle> {
  bool _showSearching = false;

  final me = {
    'name': 'You',
    'image': 'https://media.tenor.com/zt-PcMT2y3kAAAAe/war-hrithik-roshan.png',
  };

  final users = List.generate(20, (index) {
    return {
      'name': 'User ${index + 1}',
      'image': 'https://images.hindustantimes.com/rf/image_size_640x362/HT/p1/2015/04/03/Incoming/Pictures/1333507_Wallpaper2.jpg',
    };
  });

  void _toggleSearching() {
    setState(() {
      _showSearching = !_showSearching;
    });
  }

  void _handleTimeout() async {
    // Step 1: Hide the overlay
    setState(() => _showSearching = false);
    if (!mounted) return;
    // Below mounted you can use your methods or Functionality
    // if data gets you call this
    VsOverlayUtils.show(
      context: context,
      me: me,
      opponent: {'name': 'Nitish Nanda','image': 'https://images.hindustantimes.com/rf/image_size_640x362/HT/p1/2015/04/03/Incoming/Pictures/1333507_Wallpaper2.jpg',},
    );

  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Scaffold(
          appBar: AppBar(title: const Text("Battle")),
          body: Center(
            child: ElevatedButton(
              onPressed: _toggleSearching,
              child: const Text("Search Opponent"),
            ),
          ),
        ),
        if (_showSearching)
          Positioned.fill(
            child: SearchingOpponent(
              me: me,
              users: users,
              durationInSeconds: 10, //Basically this time duration use for Backend Response if Your API take 1 min set 60 sec(Add Time according to API response)
              onCancel: _toggleSearching, //In this method you can do cancel searching functionality
              onTimeout: _handleTimeout, // In this method you can use your Logic If API Data retrieve do whatever you want
            ),
          ),
      ],
    );
  }
}

πŸ“Έ UI Preview #

πŸ” Searching Overlay βš”οΈ Animated VS

πŸ”§ Customization #

  • me: Current user’s data with name and image.

  • users: List of potential opponents.

  • onCancel: Callback when "Cancel Search" is tapped.

  • onTimeout: Callback after timeout.

  • durationInSeconds: Duration before timeout triggers.

🧠 Developed By #

Jatin Sharma

Feel free to contribute or fork the project!

πŸ“„ License #

MIT License

Contributing #

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

10
likes
160
points
29
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package that helps you build beautiful animated Searching Opponent overlays for battle-style apps.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

cached_network_image, flutter

More

Packages that depend on battle_search_overlay