首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让额外的widgets和MarkDown一起在Scaffold body中颤动?

要让额外的widgets和MarkDown一起在Scaffold body中颤动,可以使用Flutter中的动画效果来实现。以下是一个示例代码,展示了如何使用Flutter的动画库来实现这个效果:

代码语言:txt
复制
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Shaking Widgets'),
        ),
        body: ShakeAnimation(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                'Hello, World!',
                style: TextStyle(fontSize: 24),
              ),
              SizedBox(height: 20),
              Text(
                'This is a Markdown text.',
                style: TextStyle(fontSize: 18),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class ShakeAnimation extends StatefulWidget {
  final Widget child;

  ShakeAnimation({required this.child});

  @override
  _ShakeAnimationState createState() => _ShakeAnimationState();
}

class _ShakeAnimationState extends State<ShakeAnimation>
    with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late Animation<double> _animation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      duration: Duration(milliseconds: 500),
      vsync: this,
    );
    _animation = Tween<double>(begin: -10, end: 10).animate(
      CurvedAnimation(
        parent: _controller,
        curve: Curves.easeInOut,
      ),
    )..addStatusListener((status) {
        if (status == AnimationStatus.completed) {
          _controller.reverse();
        } else if (status == AnimationStatus.dismissed) {
          _controller.forward();
        }
      });
    _controller.forward();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(
      animation: _animation,
      child: widget.child,
      builder: (BuildContext context, Widget? child) {
        return Transform.translate(
          offset: Offset(_animation.value, 0),
          child: child,
        );
      },
    );
  }
}

在上述代码中,我们创建了一个ShakeAnimation小部件,它接受一个child小部件作为参数。ShakeAnimation小部件使用AnimationControllerAnimation来创建一个水平方向的抖动动画效果。在build方法中,我们使用AnimatedBuilder来构建动画,并通过Transform.translate将抖动效果应用于child小部件。

你可以将需要颤动的widgets和Markdown文本放置在ShakeAnimation小部件中,然后将ShakeAnimation小部件放置在Scaffold的body中,即可实现额外的widgets和Markdown一起在Scaffold body中颤动的效果。

请注意,这只是一个示例代码,你可以根据实际需求进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券