Sliding animation to bottom in flutter

后端 未结 1 598
后悔当初
后悔当初 2021-02-05 16:10

I have a dot indicator in bottom of the page. I need to hide this after 5 seconds sliding to bottom. When user move to other page show dots sliding to top and finally after 5 se

相关标签:
1条回答
  • 2021-02-05 16:15

    To create a sliding animation for your indicator (if I've understood your requirement right), I would simply suggest using the SlideTransition widget. It should not require much work to integrate it in your existing code.

    The code belows shows a minimal example of the SlideTransition. If you'd like to keep displaying it during the navigation from one screen to another, you'd have to draw it in a layer above your Navigator.

    If you do not like to use a Stack, you can instead use the Overlay functionality of flutter, as given in this answer. This would also solve the struggle, with keeping the animation displayed during the navigation transition.

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Home(),
        );
      }
    }
    
    class Home extends StatefulWidget {
      @override
      State<StatefulWidget> createState() => HomeState();
    }
    
    class HomeState extends State<Home> with SingleTickerProviderStateMixin {
      AnimationController controller;
      Animation<Offset> offset;
    
      @override
      void initState() {
        super.initState();
    
        controller =
            AnimationController(vsync: this, duration: Duration(seconds: 1));
    
        offset = Tween<Offset>(begin: Offset.zero, end: Offset(0.0, 1.0))
            .animate(controller);
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Stack(
            children: <Widget>[
              Center(
                child: RaisedButton(
                  child: Text('Show / Hide'),
                  onPressed: () {
                    switch (controller.status) {
                      case AnimationStatus.completed:
                        controller.reverse();
                        break;
                      case AnimationStatus.dismissed:
                        controller.forward();
                        break;
                      default:
                    }
                  },
                ),
              ),
              Align(
                alignment: Alignment.bottomCenter,
                child: SlideTransition(
                  position: offset,
                  child: Padding(
                    padding: EdgeInsets.all(50.0),
                    child: CircularProgressIndicator(),
                  ),
                ),
              )
            ],
          ),
        );
      }
    }
    
    0 讨论(0)
提交回复
热议问题