text: Q:
  
  Flutter floating action button with speed dial
  
  Is there any ready made widget or where to get started floating action button with speed dial actions in Flutter.
  
  A:
  
  Here's a sketch of how to implement a Speed dial using FloatingActionButton.
  
  import 'package:flutter/material.dart';
  import 'dart:math' as math;
  
  void main() {
    runApp(new MyApp());
  }
  
  class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
      return new MaterialApp(
        home: new MyHomePage(),
      );
    }
  }
  
  class MyHomePage extends StatefulWidget {
    @override
    State createState() => new MyHomePageState();
  }
  
  class MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
    AnimationController _controller;
  
    static const List<IconData> icons = const [ Icons.sms, Icons.mail, Icons.phone ];
  
    @override
    void initState() {
      _controller = new AnimationController(
        vsync: this,
        duration: const Duration(milliseconds: 500),
      );
    }
  
    Widget build(BuildContext context) {
      Color backgroundColor = Theme.of(context).cardColor;
      Color foregroundColor = Theme.of(context).accentColor;
      return new Scaffold(
        appBar: new AppBar(title: new Text('Speed Dial Example')),
        floatingActionButton: new Column(
          mainAxisSize: MainAxisSize.min,
          children: new List.generate(icons.length, (int index) {
            Widget child = new Container(
              height: 70.0,
              width: 56.0,
              alignment: FractionalOffset.topCenter,
              child: new ScaleTransition(
                scale: new CurvedAnimation(
                  parent: _controller,
                  curve: new Interval(
                    0.0,
                    1.0 - index / icons.length / 2.0,
                    curve: Curves.easeOut
                  ),
                ),
                child: new FloatingActionButton(
                  heroTag: null,
                  backgroundColor: backgroundColor,
                  mini: true,
                  child: new Icon(icons[index], color: foregroundColor),
                  onPressed: () {},
                ),
              ),
            );
            return child;
          }).toList()..add(
            new FloatingActionButton(
              heroTag: null,
              child: new AnimatedBuilder(
                animation: _controller,
                builder: (BuildContext context, Widget child) {
                  return new Transform(
                    transform: new Matrix4.rotationZ(_controller.value * 0.5 * math.pi),
                    alignment: FractionalOffset.center,
                    child: new Icon(_controller.isDismissed ? Icons.share : Icons.close),
                  );
                },
              ),
              onPressed: () {
                if (_controller.isDismissed) {
                  _controller.forward();
                } else {
                  _controller.reverse();
                }
              },
            ),
          ),
        ),
      );
    }
  }
  
  A:
  
  This plugin could serve you: 
  https://pub.dartlang.org/packages/flutter_speed_dial
  You need declare the dependency in the pubspect.yaml file
  dependencies:
    flutter:
      sdk: flutter
    flutter_speed_dial: ^1.0.9
  
  Here is an example:
  Widget build(BuildContext context) {
  return Scaffold(
      floatingActionButton: SpeedDial(
        animatedIcon: AnimatedIcons.menu_close,
        animatedIconTheme: IconThemeData(size: 22.0),
        // this is ignored if animatedIcon is non null
        // child: Icon(Icons.add),
        visible: _dialVisible,
        curve: Curves.bounceIn,
        overlayColor: Colors.black,
        overlayOpacity: 0.5,
        onOpen: () => print('OPENING DIAL'),
        onClose: () => print('DIAL CLOSED'),
        tooltip: 'Speed Dial',
        heroTag: 'speed-dial-hero-tag',
        backgroundColor: Colors.white,
        foregroundColor: Colors.black,
        elevation: 8.0,
        shape: CircleBorder(),
        children: [
          SpeedDialChild(
            child: Icon(Icons.accessibility),
            backgroundColor: Colors.red,
            label: 'First',
            labelStyle: TextTheme(fontSize: 18.0),
            onTap: () => print('FIRST CHILD')
          ),
          SpeedDialChild(
            child: Icon(Icons.brush),
            backgroundColor: Colors.blue,
            label: 'Second',
            labelStyle: TextTheme(fontSize: 18.0),
            onTap: () => print('SECOND CHILD'),
          ),
          SpeedDialChild(
            child: Icon(Icons.keyboard_voice),
            backgroundColor: Colors.green,
            label: 'Third',
            labelStyle: TextTheme(fontSize: 18.0),
            onTap: () => print('THIRD CHILD'),
          ),
        ],
      ),
  );
  }
  
  