A Flutter widget that shoots confetti all over the screen.

Overview

Blast some confetti all over the screen and celebrate user achievements!

Demo

Video showing the Confetti in Action: https://youtu.be/dGMVyUY4-6M

Live WEB Demo

An old video walkthrough is available here.

Getting Started

To use this plugin, add confetti as a dependency in your pubspec.yaml file.

See the example to get started quickly. To generate the platform folders run:

flutter create .

in the example folder.

To begin you need to instantiate a ConfettiController variable and pass in a Duration argument. The ConfettiController can be instantiated in the initState method and disposed in the dispose method.

In the build method return a ConfettiWidget. The only attribute that is required is the ConfettiController.

Other attributes that can be set are:

  • blastDirectionality -> an enum value to state if the particles shoot in random directions or a specific direction. BlastDirectionality.explosive will shoot in random directions and don't require a blastDirection to be set. BlastDirectionality.directional requires a blastDirection to specify the direction of the confetti.
  • blastDirection -> a radial value to determine the direction of the particle emission. The default is set to PI (180 degrees). A value of PI will emit to the left of the canvas/screen.
  • emissionFrequency -> should be a value between 0 and 1. The higher the value the higher the likelihood that particles will be emitted on a single frame. Default is set to 0.02 (2% chance)
  • numberOfParticles -> the number of particles to be emitted per emission. Default is set to 10
  • shouldLoop -> determines if the emission will reset after the duration is completed, which will result in continues particles being emitted, and the animation looping
  • maxBlastForce -> will determine the maximum blast force applied to a particle within it's first 5 frames of life. The default maxBlastForce is set to 20
  • minBlastForce -> will determine the minimum blast force applied to a particle within it's first 5 frames of life. The default minBlastForce is set to 5
  • displayTarget -> if true a crosshair will be displayed to show the location of the particle emitter
  • colors -> a list of colors can be provided to manually set the confetti colors. If omitted then random colors will be used. A single color, for example [Colors.blue], or multiple colors [Colors.blue, Colors.red, Colors.green] can be provided as an argument in the `ConfettiWidget
  • minimumSize -> a Size controlling the minimum possible size of the confetti. To be used in conjuction with maximumSize. For example, setting a minimumSize equal to Size(10,10) will ensure that the confetti will never be smaller than the specified size. Must be positive and smaller than the maximumSize. Can not be null.
  • maximumSize -> a Size controlling the maximum possible size of the confetti. To be used in conjuction with minimumSize. For example, setting a maximumSize equal to Size(100,100) will create confetti with a size somewhere between the minimum and maximum size of (100, 100) [widht, height]. Must be positive and bigger than the minimumSize, Can not be null.
  • gravity -> change the speed at which the confetti falls. A value between 0 and 1. The higher the value the faster it will fall. Default is set to 0.1
  • particleDrag -> configure the drag force to apply to the confetti. A value between 0 and 1. A value of 1 will be no drag at all, while 0.1, for example, will be a lot of drag. Default is set to 0.05
  • canvas -> set the size of the area where the confetti will be shown, by default this is set to full screen size.
  • createParticlePath -> An optional function that retuns a custom Path to generate unique particles. Default returns a rectangular path.

Example of a custom createParticlePath

Path drawStar(Size size) {
    // Method to convert degree to radians
    double degToRad(double deg) => deg * (pi / 180.0);

    const numberOfPoints = 5;
    final halfWidth = size.width / 2;
    final externalRadius = halfWidth;
    final internalRadius = halfWidth / 2.5;
    final degreesPerStep = degToRad(360 / numberOfPoints);
    final halfDegreesPerStep = degreesPerStep / 2;
    final path = Path();
    final fullAngle = degToRad(360);
    path.moveTo(size.width, halfWidth);

    for (double step = 0; step < fullAngle; step += degreesPerStep) {
      path.lineTo(halfWidth + externalRadius * cos(step),
          halfWidth + externalRadius * sin(step));
      path.lineTo(halfWidth + internalRadius * cos(step + halfDegreesPerStep),
          halfWidth + internalRadius * sin(step + halfDegreesPerStep));
    }
    path.close();
    return path;
  }

Enjoy the confetti.

NOTE: Don't be greedy with the number of particles. The more particles that are on screen the more calculations need to be performed. Performance improvements have been made, however this is still ongoing work. Too many particles will result in performance issues. Use wisely and carefully.

Comments
  • [Can be reproduiced] Lib didn't work inside PageView

    [Can be reproduiced] Lib didn't work inside PageView

    Hi,

    Your confetti library didn't work inside PageView().

    Here is the sample code to test :

    import 'dart:math';
    
    import 'package:confetti/confetti.dart';
    import 'package:flutter/material.dart';
    
    void main() => runApp(const ConfettiSample());
    
    class ConfettiSample extends StatelessWidget {
      const ConfettiSample({Key key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            title: 'Confetti',
            home: Scaffold(
              backgroundColor: Colors.grey[900],
              body: MyApp(),
            ));
      }
    }
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      ConfettiController _controllerLeft;
      ConfettiController _controllerRight;
    
      @override
      void initState() {
        _controllerLeft = ConfettiController(duration: const Duration(seconds: 2));
        _controllerRight = ConfettiController(duration: const Duration(seconds: 2));
    
        super.initState();
      }
    
      @override
      void dispose() {
        _controllerLeft.dispose();
        _controllerRight.dispose();
        super.dispose();
      }
    
      Widget confettis() {
        return Positioned(
          bottom: 0,
          left: 0,
          right: 0,
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ConfettiWidget(
                minBlastForce: 70,
                maxBlastForce: 100,
                numberOfParticles: 30,
                blastDirection: -1,
                confettiController: _controllerLeft,
              ),
              FloatingActionButton(
                backgroundColor: Colors.transparent,
                child: FlutterLogo(),
                onPressed: () {
                  _controllerLeft.play();
                },
              ),
              Padding(padding: EdgeInsets.only(left: 40, right: 40)),
              ConfettiWidget(
                minBlastForce: 70,
                maxBlastForce: 100,
                numberOfParticles: 30,
                blastDirection: -2,
                confettiController: _controllerRight,
              ),
              FloatingActionButton(
                backgroundColor: Colors.transparent,
                child: Transform(
                  alignment: Alignment.center,
                  transform: Matrix4.rotationY(pi),
                  child: FlutterLogo(),
                ),
                onPressed: () {
                  _controllerRight.play();
                },
              )
            ],
          ),
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            backgroundColor: Colors.transparent,
            body: PageView(
              controller: PageController(initialPage: 1),
              children: <Widget>[
                Container(
                  color: Colors.blueGrey,
                  child: Stack(
                    children: [
                      confettis(),
                    ],
                  ),
                ),
                Container(
                  color: Colors.pinkAccent,
                ),
              ],
            ),
          ),
        );
      }
    }
    

    With PageView() :

    Screenshot_1594979118

    Without PageView() :

    Screenshot_1594979145

    bug 
    opened by EArminjon 11
  • Support null safety

    Support null safety

    This is a request to add support for null safety to package:confetti. We depend on your awesome package, so would be great to have null safety enabled.

    The Dart/Flutter team already encourages publishing the migrated packages: See this blog post.

    See the migration guide for details about enabling null safety.

    opened by IchordeDionysos 8
  • Sporadic confetti even though random hasn't been chosen

    Sporadic confetti even though random hasn't been chosen

    We're noticing in our dev builds using the Confetti package that the number of confetti as well as the number of times it bursts is sporadic. Sometimes it bursts fine with confetti, other times it jitters when it bursts, and sometimes there isn't any confetti at all. Here's how we're using the confetti:

    Align(
                alignment: Alignment.center,
                child: ConfettiWidget(
                  confettiController: _controllerCenter,
                  blastDirectionality: BlastDirectionality.explosive,
                  emissionFrequency: 0.05, // how often it should emit
                  numberOfParticles: 10, // number of particles to emit
                  gravity: 0.05, // gravity - or fall speed
                  shouldLoop: false,
                ),
              ),
    
    opened by alimhaq 8
  • Is there a way to control the speed and amount of confetti based on seconds instead of framerate?

    Is there a way to control the speed and amount of confetti based on seconds instead of framerate?

    I recently changed my phone display settings from 60hz to 120hz. I noticed that this caused more confetti to be produced and caused them to fall faster.

    This is an issue because different users with different devices will have a different user experience.

    Is there an easy way to base the speeds on actual time (seconds) instead on the device's framerate?

    bug enhancement 
    opened by edwardcahyadi 4
  • Added customization particles path and fix typo

    Added customization particles path and fix typo

    Regarding the issue Custom particles #18 I added a variable that is holding a function that returns a custom Path and takes a Size type parameter.

    Gif 2021-01-26 16 38 42

    opened by Artur-Wisniewski 4
  • Does it put out of screen?

    Does it put out of screen?

    I can't put it out of screen. I don't want to show the the particle emitter.

        return Align(
          alignment: Alignment.bottomCenter,
          child: ConfettiWidget(
              child: SizedBox(
                  width: 0, height: SCREEN_SIZE + 10),
              confettiController: _confettiController,
              shouldLoop: true,
              blastDirection: pi / 2,
              maxBlastForce: 5,
              minBlastForce: 2,
              emissionFrequency: 0.05,
              numberOfParticles: 10,
              displayTarget: true,
          ),
        );
    

    or

        return Align(
          alignment: Alignment.bottomCenter,
          child: Column(
            verticalDirection: VerticalDirection.up,
            children: [
              SizedBox(SCREEN_SIZE + 10),
              ConfettiWidget(
                confettiController: _confettiController,
                shouldLoop: true,
                blastDirection: pi / 2,
                maxBlastForce: 5,
                minBlastForce: 2,
                emissionFrequency: 0.05,
                numberOfParticles: 10,
                displayTarget: true,
              ),
            ],
          ),
        );
    
    opened by aimsugita 4
  • The library 'package:confetti/confetti.dart' is legacy, and should not be imported into a null safe library.

    The library 'package:confetti/confetti.dart' is legacy, and should not be imported into a null safe library.

    Error: Cannot run with sound null safety, because the following dependencies don't support null safety:

    • package:confetti

    • package:random_color

    For solutions, see https://dart.dev/go/unsound-null-safety

    opened by crytodevkj 3
  • Confetti not appearing in Version ^0.6.0-nullsafety

    Confetti not appearing in Version ^0.6.0-nullsafety

    Hi, I implemented Confetti before NullSafety and it was working fine. But when I upgraded it to NullSafety version, it stopped working. No error coming.

    opened by aseemahuja 3
  • perf!: enhancements

    perf!: enhancements

    • Confetti is now conditionally reused instead of recreated, big improvement
    • pauseEmissionOnLowFrameRate boolean added to Confetti widget to ensure smooth 60 FPS. This may however result in no confetti appearing if other complex operations are taking up resources. Set to false to disable.
    • Temporary fix for issue [#66] with severe perf issues on Chrome macOS.
    • Conditionally rotate on z-axis

    Also added:

    • clearAllParticles added to stop method on controller: _confettiController.stop(clearAllParticles: true); default is false. If true particles will immediately be cleared/removed on stop. Calling dispose will also clear all particles immediately.
    • particleStatsCallback added to Confetti widget to retrieve the ParticleStats. This provides info on the particle system, such as number of active and number of total particles in memory.
    • pauseEmissionOnLowFrameRate to Confetti widget. Default is true. This will pause additional confetti emission if the frame rate is below 60fps, and will continue when resources are available. This can be disabled by setting it to false, to force particle creation regardless of frame rate.
    opened by HayesGordon 2
  • Stop animation and hide confetti without to be off screen?

    Stop animation and hide confetti without to be off screen?

    When I perform a single shot, I have to wait for all the particles to leave the screen for the animation to end. I wish I could hide the particles before they leave the screen. How to stop the animation and hide the particles without having to wait for all of them to be off screen?

    opened by Gilianp 2
  • Exception in Android builds

    Exception in Android builds

    I was trying this awesome widget. It works fine in chrome for me but errors out in Android builds. Following is the error I see and everything in the screen goes black. Not sure if this is enough for you to debug the issue.

    /home/the100rabh/.pub-cache/hosted/pub.dartlang.org/confetti-0.6.0/lib/src/confetti.dart:229:20: Warning: Operand of null-aware operation '!' has type 'WidgetsBinding' which excludes null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('/home/the100rabh/snap/flutter/common/flutter/packages/flutter/lib/src/widgets/binding.dart').
        WidgetsBinding.instance!.addPostFrameCallback((_) {
    
    opened by the100rabh 2
  • Alignment does not work

    Alignment does not work

    I tried to wrap it around Align-Widgets - the children, the parent, everything. It never works consistently. I also tried to put the ConfettiWidget in a Stack with a fixed size (Container wrapped around it) -> It does not align correctly. Sometimes the ConfettiWidget only emits from a singular point and every single confetti is displayed in its untransformed (and untranslated) form. Is there some tricky behaviour underlying?

    opened by Eerey 2
  • Example project is crashing 500ms into the blast

    Example project is crashing 500ms into the blast

    Hi,

    My project started to crash when blasting confetti so I made a new clean project and ran the example and it also crashes 500ms into the blast. Ive tried on an iPhone 11 and ipad 12.9-inch simulator. This is from "flutter run -v": [ +1 ms] DevFS: Deleting filesystem on the device (file:///Users/------------/Library/Developer/CoreSimulator/Devices/D61AB314-2F91-4E3C-B917-0663779B904F/data/Containers/Data/Application/79CD32A1-6125-4002-9609-E0C 2D236C848/tmp/confetti_testKa9sJj/confetti_test/) [ +254 ms] Ignored error while cleaning up DevFS: TimeoutException after 0:00:00.250000: Future not completed [ +7 ms] "flutter run" took 115 946ms. [ +113 ms] ensureAnalyticsSent: 109ms [ ] Running shutdown hooks [ ] Shutdown hooks complete [ ] exiting with code 0

    Im on M1 Max and flutter master channel

    Any idea whats happening? Thanks

    opened by MrHazee 7
  • How to add custom confetti image

    How to add custom confetti image

    i don't want the same stars and particles, i want to add custom png images confetti.

    like i want to add coin png to fall from the top of the screen.

    Please help me if anyone knows how to add custom image in confetti effect

    enhancement 
    opened by flutterPratik 3
  • Severe performance issue on MacOS chrome

    Severe performance issue on MacOS chrome

    This is very likely a bug in chrome, I am not sure where to report it so I am reporting it here

    chrome version

    image

    This issue is only on the macOS version of chrome and works fine on Windows and Linux.

    code sample
    import 'package:confetti/confetti.dart';
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: const MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      const MyHomePage({Key? key, required this.title}) : super(key: key);
      final String title;
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      int _counter = 0;
      void _incrementCounter() {
        setState(() {
          _counter++;
        });
      }
    
      final confettiController = ConfettiController();
    
      @override
      Widget build(BuildContext context) {
        final screenSize = MediaQuery.of(context).size;
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Stack(
            fit: StackFit.expand,
            children: <Widget>[
              SizedBox(
                height: 50,
                width: 100,
                child: ElevatedButton(
                    onPressed: () {
                      confettiController.play();
                    },
                    child: Text('tap me')),
              ),
              Positioned(
                top: -100,
                left: screenSize.width / 2,
                child: ConfettiWidget(
                  confettiController: confettiController,
                  blastDirection: 0,
                  blastDirectionality: BlastDirectionality.explosive,
                  particleDrag: 0.05,
                  emissionFrequency: 0.5,
                  minimumSize: const Size(10, 10),
                  maximumSize: const Size(50, 50),
                  numberOfParticles: 5,
                  gravity: 0.2,
                ),
              ),
            ],
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: const Icon(Icons.add),
          ),
        );
      }
    }
    
    

    Output comparison chrome vs Firefox on a mac m1

    https://user-images.githubusercontent.com/31410839/171102525-95506b14-2a51-48ed-8747-f69caa7727b4.mp4

    flutter doctor -v (mac)
    [✓] Flutter (Channel stable, 3.0.1, on macOS 12.3 21E230 darwin-arm, locale en-IN)
        • Flutter version 3.0.1 at /Users/mahesh/Documents/flutter
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision fb57da5f94 (3 days ago), 2022-05-19 15:50:29 -0700
        • Engine revision caaafc5604
        • Dart version 2.17.1
        • DevTools version 2.12.2
    
    [✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
        • Android SDK at /Users/mahesh/Library/Android/sdk
        • Platform android-32, build-tools 31.0.0
        • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
        • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
        • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
        • All Android licenses accepted.
    
    [!] Xcode - develop for iOS and macOS (Xcode 13.2.1)
        • Xcode at /Applications/Xcode.app/Contents/Developer
        ! CocoaPods 1.10.2 out of date (1.11.0 is recommended).
            CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin
            usage on the Dart side.
            Without CocoaPods, plugins will not work on iOS or macOS.
            For more info, see https://flutter.dev/platform-plugins
          To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.
    
    [✓] Chrome - develop for the web
        • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [✓] Android Studio (version 2021.1)
        • Android Studio at /Applications/Android Studio.app/Contents
        • Flutter plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/6351-dart
        • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    
    [✓] IntelliJ IDEA Community Edition (version 2021.2.1)
        • IntelliJ at /Applications/IntelliJ IDEA CE.app
        • Flutter plugin version 61.2.4
        • Dart plugin version 212.5080.8
    
    [✓] VS Code (version 1.66.2)
        • VS Code at /Applications/Visual Studio Code.app/Contents
        • Flutter extension version 3.40.0
    
    [✓] Connected device (4 available)
        • Redmi K20 Pro (mobile) • 192.168.1.2:5555                     • android-arm64  • Android 11 (API 30)
        • iPhone 12 Pro (mobile) • 19FD0231-BFF0-441D-B584-AD94C4084525 • ios            •
          com.apple.CoreSimulator.SimRuntime.iOS-15-2 (simulator)
        • macOS (desktop)        • macos                                • darwin-arm64   • macOS 12.3 21E230 darwin-arm
        • Chrome (web)           • chrome                               • web-javascript • Google Chrome 101.0.4951.64
    
    [✓] HTTP Host Availability
        • All required HTTP hosts are available
    
    ! Doctor found issues in 1 category.
    
    opened by maheshmnj 6
  • Feature request: Add spread option

    Feature request: Add spread option

    A spread option would be nice. E.g. [0, 1], where 0 is no spread, that is particles are shot in a line, where 1 is 360 deg spread.

    You still should be able to randomize the spread, so perhaps a randomize option could also be added, e.g. [0, 1] where 0 is no random, that is always in a line and 1 is full random, e.g. 360 deg spread even when spread is 0. Or you could add a spread range e.g. [0.2, 0.5], so spread in between these values adding a random element in between.

    An option to determine the spread of the starting position between the particles would also be nice.

    Also, a variation of the particle rotation could perhaps be nice, and perhaps disable Z rotation all together.

    enhancement 
    opened by erf 2
Releases(0.6.0-nullsafety)
Android test task master - Create PIN code screen, authentication by PIN code screen and menu screen

Here is described test tasks for a android dev. Need to implement three screens:

null 3 Oct 4, 2022
A flutter plugin to show Truecaller like overlay window, over all other apps along with callback events

A flutter plugin to show Truecaller like overlay window, over all other apps along with callback events. Android Go or Android 11 & above, this plugin shows notification bubble, in other android versions, it shows an overlay window.

Venkata Sai Vamsi Penupothu 85 Dec 29, 2022
A Flutter widget for rendering static html as Flutter widgets (Will render over 80 different html tags!)

flutter_html A Flutter widget for rendering HTML and CSS as Flutter widgets. Screenshot 1 Screenshot 2 Screenshot 3 Table of Contents: Installing Curr

Matthew Whitaker 1.5k Jan 5, 2023
Flutter onboarding screen - An example of onboarding screen on Flutter

Flutter Onboarding Screen IntroViews is inspired by Paper Onboarding. Thanks to Fluttery. Future Development Pull requests and suggestions welcome. Lo

Ümit Duran 198 Aug 3, 2022
A Flutter plugin for changing the Home Screen, Lock Screen (or both) Wallpaper on Android devices.

wallpaper_manager A Flutter plugin for changing the Home Screen, Lock Screen (or both) Wallpaper(s) on Android devices. Usage Installation In the pubs

Aditya Mulgundkar 38 Nov 28, 2022
Flutter screen adaptation, font adaptation, get screen information

flutter_screenutil A flutter plugin for adapting screen and font size.Let your UI display a reasonable layout on different screen sizes! Note: This pl

OpenFlutter 3.4k Jan 6, 2023
An app made using the Flutter framework that allows users to track information for over 1500 cryptocurrencies

Platypus Crypto Platypus Crypto is an ad-free cross-platform robust solution for tracking cryptocurrency assets. Our intuitive interface includes real

null 179 Jan 4, 2023
A new flutter plugin with native wrappers that attempts to prove data transfer over sound by means of Frequency modulation

A new flutter plugin with native wrappers that attempts to prove data transfer over sound by means of Frequency modulation

Chiziaruhoma Ogbonda 36 Aug 31, 2022
OX COI Messenger - a Flutter app for the COI (Chat Over IMAP) standard

Project on hold for now Please note that the OX COI Messenger project is currently not active. In the past this project was hindered by the lack of Ru

null 182 Dec 23, 2022
Codeflow 19 Sep 29, 2022
Socket library for creating real-time multiplayer games. Based on TCP, with the ability to send messages over UDP (planned).

Game socket The library was published in early access and is not stable, as it is being developed in parallel with other solutions. English is not a n

Stanislav 10 Aug 10, 2022
MPV Remote: Remote control for MPV over SSH

MPV Remote Remote control for MPV over SSH. Big work-in-progress. Screenshots

Sam Lakerveld 1 Jun 2, 2022
Pdfium_bindings - This project aims to wrap the complete Pdfium API in dart, over FFI

Pdfium_bindings - This project aims to wrap the complete Pdfium API in dart, over FFI

Isaque Neves 7 Oct 22, 2022
Quotes - a one page app that consume a JSON file of over 1000+ quotes

Quotes a one page app that consume a JSON file of over 1000+ quotes.

Yassin BENNKHAY 4 Jul 6, 2022
Tasawq App — Flutter framework and Firebase An application that objectives to display all nearby stores of all kinds and real estate.

Tasawq App — Flutter framework and Firebase An application that objectives to display all nearby stores of all kinds and real estate. Multi-vendor, standard user login to view nearby products and stores for rating, follow-up, messaging and more

null 1 Nov 10, 2022
Find The Latest trending and upcoming movies and tv shows with MovieDB app. The app contains all info about movies and tv shows. find similar movies or shows, Browse all genres, video trailers, backdrops, logos, and posters.

MovieDB App Features. Dynamic Theming Search Functionality Onboarding-Screen Select favourite movie Home Screen Tranding movie Movies different catego

Ansh rathod 80 Dec 12, 2022
Flutter plugin to manage home screen widget within flutter app.

Flutter App Widget App Widget / Home Screen widget plugin for flutter app Usage Please see app_widget subdirectory for the usage documentation. Plafor

Alexander Dischberg 6 Dec 16, 2022
A flutter package which will help you to create a draggable widget that can be dragged around the screen.

A flutter package which will help you to create a draggable widget that can be dragged around the screen. Demo Features ?? Manually Control the positi

Adar 31 Aug 10, 2022
Widget to count the amount of nested widget tree, useful in the dynamic construction of the interface when it is important to know the depth of widget.

widget_tree_depth_counter Widget Tree Depth Counter WidgetTreeDepthCounter is a simple widget to count the amount of nested widget tree, useful in the

Riccardo Cucia 4 Aug 1, 2022