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

ShakeTune

example/lib/main.dart

import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:shake_tune/shake_tune.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool animationFlag = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const Text('YOU WON:', style: TextStyle(fontSize: 21.0),),
               ShakeTune(
                  probabilities: const [0.2, 0.2, 0.2, 0.2, 0.2],
                  alwaysChooseDifferentElement: true,
                  firstElementShownOnlyOnce: true,
                  callback: () {
                    setState(() {
                      animationFlag = !animationFlag;
                    });
                  },
                  children: [
                    prizeItem('Shake your phone', Icons.edgesensor_high_rounded),
                    prizeItem('Car', Icons.directions_car_rounded),
                    prizeItem('House', Icons.house_rounded),
                    prizeItem('100 ₽ balance top up', Icons.currency_ruble),
                    prizeItem('Console', Icons.games_rounded),
                    prizeItem('- 7000 ₽ fire alarm penalty', Icons.fire_extinguisher_rounded),
                  ]),

            ],
          ),
        )),
    );
  }

  Widget prizeItem(String text, IconData icon) {
    return AnimatedSwitcher(
        duration: const Duration(milliseconds: 1000),
        transitionBuilder: (Widget child, Animation<double> animation) {
          return ShakeAnimation(child: child);
        },
        layoutBuilder: (Widget? currentChild, List<Widget> previousChildren) {
          if (currentChild != null) {
            return currentChild;
          }
          return const Text('Error');
        },
        child:Column(key: ValueKey<bool>(animationFlag), children: [
          Icon(icon, color: Color((Random().nextDouble() * 0xFFFFFF).toInt()).withOpacity(1.0), size: 250.0),
          Text(text)
        ]));
  }
}

class ShakeAnimation extends StatelessWidget {
  final Widget child;
  final Duration duration;

  const ShakeAnimation({super.key, required this.child, this.duration = const Duration(milliseconds: 500)});

  @override
  Widget build(BuildContext context) {
    return TweenAnimationBuilder<double>(
      tween: Tween(begin: 0.0, end: 1.0),
      duration: duration,
      builder: (context, value, child) {
        return Transform.translate(
          offset: Offset(sin(value * pi * 10) * 10, 0.0),
          child: child,
        );
      },
      child: child,
    );
  }
}
2
likes
125
points
27
downloads

Publisher

unverified uploader

Weekly Downloads

ShakeTune

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_web_plugins, plugin_platform_interface, sensors_plus

More

Packages that depend on shake_tune