【问题标题】:Slide Widget Under Another Animated Builder Flutter另一个动画生成器 Flutter 下的幻灯片小部件
【发布时间】:2020-12-03 13:49:14
【问题描述】:

我有一个带有两个小部件的页面,我正在寻找动画。我目前已经创建了我正在寻找的粗略动画,我唯一遇到的问题是我希望两个小部件中较大的一个在另一个下方而不是顶部滑动。我已包含以下代码:

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Row(
        children: <Widget>[
          AnimatedBuilder(
            animation: transitionAnimation,
            builder: (context, child) {
              return SlideTransition(
                  position: Tween<Offset>(
                    begin: Offset(-1, 0),
                    end: Offset(0, 0),
                  ).animate(CurvedAnimation(
                      curve: Interval(.01, 0.25, curve: Curves.easeInExpo),
                      parent: transitionAnimation)),
                  child: child);
            },
            child: Container(
              width: MediaQuery.of(context).size.width * 0.15,
              color: Colors.black,
            ),
          ),
          AnimatedBuilder(
            animation: transitionAnimation,
            builder: (context, child) {
              return SlideTransition(
                  position: Tween<Offset>(
                    begin: Offset(-2, 0),
                    end: Offset(0, 0),
                  ).animate(CurvedAnimation(
                      curve: Interval(0, 1, curve: Curves.easeIn),
                      parent: transitionAnimation)),
                  child: child);
            },
            child: Container(
              width: MediaQuery.of(context).size.width * 0.85,
              color: Colors.orange,
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.of(context).push(MaterialPageRoute(
            builder: (context) => FirstPage(),
          ));
        },
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
    );

我对动画的速度和方向感到满意,唯一的问题是,正如我所说,我希望橙色小部件在黑色下方而不是上方滑动。我曾尝试使用堆栈,但未能成功获取页面右侧的橙色小部件。

任何想法将不胜感激!

【问题讨论】:

    标签: flutter dart flutter-animation


    【解决方案1】:

    要从黑色小部件下方滑动橙色小部件,您可以尝试执行以下操作:

    1. 用堆栈替换行
    2. 交换 AnimatedBuilder 的位置

    请看下面的代码。你也可以试试DartPadhttps://dartPad.dev/790dd8c7ef8119d0b560419fdca1727b上的代码

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          debugShowCheckedModeBanner: false,
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: const MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      const MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage>
        with SingleTickerProviderStateMixin {
      AnimationController transitionAnimation;
      @override
      void initState() {
        super.initState();
        transitionAnimation = AnimationController(
          duration: const Duration(seconds: 5),
          vsync: this,
        );
        transitionAnimation.forward();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Stack(
            children: <Widget>[
              Positioned(
                left: MediaQuery.of(context).size.width * 0.15,
                child: AnimatedBuilder(
                  animation: transitionAnimation,
                  builder: (context, child) {
                    return SlideTransition(
                        position: Tween<Offset>(
                          begin: const Offset(-2, 0),
                          end: const Offset(0, 0),
                        ).animate(CurvedAnimation(
                            curve: const Interval(0, 1, curve: Curves.easeIn),
                            parent: transitionAnimation)),
                        child: child);
                  },
                  child: Container(
                    height: MediaQuery.of(context).size.height,
                    width: MediaQuery.of(context).size.width * 0.85,
                    color: Colors.orange,
                  ),
                ),
              ),
              Positioned(
                left: 0,
                child: AnimatedBuilder(
                  animation: transitionAnimation,
                  builder: (context, child) {
                    return SlideTransition(
                        position: Tween<Offset>(
                          begin: const Offset(-1, 0),
                          end: const Offset(0, 0),
                        ).animate(CurvedAnimation(
                            curve:
                                const Interval(.01, 0.25, curve: Curves.easeInExpo),
                            parent: transitionAnimation)),
                        child: child);
                  },
                  child: Container(
                    height: MediaQuery.of(context).size.height,
                    width: MediaQuery.of(context).size.width * 0.15,
                    color: Colors.black,
                  ),
                ),
              ),
            ],
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: () {
              transitionAnimation.repeat();
    //           Navigator.of(context).push(MaterialPageRoute(
    //             builder: (context) => FirstPage(),
    //           ));
            },
          ),
          floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多