首页
学习
活动
专区
工具
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中颤动的效果。

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

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

相关·内容

Flutter Dojo设计之道——如何打造一个通用的Playground

Dojo的设计之初,是为了能够演示Flutter中,多如牛毛的Widget,所以,一个通用的Demo演示界面,就显得非常有必要了,一是可以节省很多通用的代码,二是可以让Demo的演示,专注于Demo本身...return Scaffold( appBar: appbar, body: Container( color: Color(0xFFE6EBEB), padding: const...这里算是一个国际惯例,Flutter中一般采用kXXXX来表示常量 代码预览 在官方的Demo,Flutter Gallery中,有类似的实现,这里实际上是借助Markdown的解析,将代码展示出来...参考Gallery中的实现,我们需要借助两个开源库: flutter_markdown syntax_highlighter 一个用于渲染MD,一个用于将代码中的关键词进行高亮,具体的使用,大家可以参考...分享 Dojo在设计之初就考虑了代码的开箱即用功能,所以分享功能,可以让学习者快速将Dojo中的代码,Copy出来使用,所以这里使用了一个插件来实现分享功能, url_launcher 借助这个插件,

1.1K10

使用 fl_chart 实现 Flutter 图表魔法🪄

我们将从简单的事情开始,比如线性图表和饼状图表,然后我们深入其他高级特性,使用图表探索炫酷的事物。 为什么使用 fl_chart? fl_chart 就像一个魔法棒一样在 Flutter 中绘图。...它让我们创造各种炫酷类型图表,并以令人兴奋的方式展示我们的数据。 折线图表 Flutter 中线性/折线图表在贯穿我们整个数据故事的一次视觉之旅。它们将点关联起来,来展示数据如何变化或增长。...我们可以想象是我们数据的冒险,非常适合展示趋势或者起伏。最好的部分是什么?我们可以让这些图表看起来很棒,并和我们应用风格相搭。 步骤一 添加下面的依赖到 pubspec.yaml 文件中。...在 home_page.dart 文件中,让我们创建三个按钮来演示我们的案例。在 routes.dart 文件中,我们已经设定了导航到我们的案例,你们可以查看源码来获取更详细的内容。...在 lib 文件夹中的 views 下创建 first_line_chart.dart 文件。

77810
  • 给Android开发者Flutter上手指南

    ScrollView在Flutter中等价于什么? 谁是Flutter的列表组件? 如何知道点击了列表中哪个item? 如何动态更新ListView?...在Flutter中,有几种方法可以实现相同的结果 您可以通过使用Column、Row和Stack的组合来实现RelativeLayout的效果。...您可以为widget构造函数指定相对于父组件的布局规则。 推荐参考在StackOverflow上的一个在Flutter中构建RelativeLayout的例子。 如何使用widget定义布局属性?...在Flutter中,布局主要由专门设计用于提供布局的小部件定义,并结合控件widget及其样式属性。 例如, 列 和 行 widgets 控制一个数组中的条目 并且 分别垂直和水平对齐它们。...例如, Padding, Align, 和 Stack。 更多布局widget可参考 Layout Widgets。 ? ? 如何分层布局?

    2K20

    带你快速掌握Flutter的视图(Widgets)

    在这篇文章中,将向大家分享Flutter开发中的一些视图(Widgets)相关的一些知识和经验,主要包含: 谁是Flutter中View? 如何更新Widgets? 如何布局?...如何在布局中添加或删除组件? 如何对 Widget 做动画? 如何绘图(Canvas draw/paint)? 如何构建自定义Widgets? 如何设置Widget的透明度?...那么,在Flutter中我们可以将Widget当做是Android、iOS、RN中的View,但他们并不完全等价,但当我们试图去理解 Flutter 是如何工作的时候,我们可以认为它是“声明和构建 UI...在Flutter中,您可以使用Widgets库中的核心布局小部件 如 Container, Column, Row, 和 Center,关于Widget的更多内容可参考:Layout Widgets目录...如何更新Widgets? 在Android/iOS中要更新视图,我们可以直接通过对应的方法来操作更改。 在Flutter中,Widget是不可变的,不会直接更新。

    11K10

    「快速上手Flutter开发系列教程」之线程和异步UI

    怎么编写异步的代码? Dart有一个单线程执行模型,支持Isolate(一种在另一个线程上运行Dart代码的方法),一个事件循环和异步编程。...Flutter 的 event loop 和 iOS 中的 main loop 相似:Looper 是附加在主线程上的。...如何进行网络请求? 在 Flutter 中,使用流行的 http package 做网络请求非常简单。它把你可能需要自己做的网络请求操作抽象了出来,让发起请求变得简单。...= json.decode(response.body); }); } } 以上代码片段的完整部分可以在课程源码中查找。...关于网络请求的更多内容和实战技巧可学习《基于Http实现网络操作》部分的课程。 如何为长时间运行的任务添加一个进度指示器?

    2.2K20

    flutter中的响应式布局

    在flutter中,我们可以根据UI设计的效果,通过使用不同的技术、widgets和第三方包,轻松的实现响应式 In this article, we'll focus on one very specific...,并介绍如何在大屏幕和手机上使用如下的布局方式: 大屏幕 手机屏幕使用drawer 就像我们看到的,在不同屏幕尺寸,我们需要不同的布局方式...在web开发中我们可以使用css很容易实现这种效果。下面我们就来看看在flutter中是如何实现的吧! 我们将实现如下的简单功能: 点击左上角icon打开(点击返回按钮关闭)....我们看看我们的widget tree 在 SplitView 中添加了Scaffold但是没有 AppBar ....虽然在FirstPage有 Scaffold 和 AppBar 但是没有 Drawer. 先有鸡还是先有蛋呢?

    2.8K10

    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程

    中,Scaffold 是一个非常重要的容器组件,它为应用程序提供了一个基本的结构和布局。...这相当于一个框架,方便你在应用中创建常见的 UI 元素和布局,如应用栏、抽屉、底部导航栏等。...Scaffold 组件的关键属性appBar: 一个位于顶部的应用栏(AppBar),通常包含标题、导航按钮和其他操作项。body: 主体内容区域,用于放置应用的主要内容。...扩展知识在 Flutter 和 Dart 中,const 和非 const(或 final 和普通变量)有着重要的区别,它们主要用于优化性能和管理不可变数据。...为了更好地用户体验,您可以将 Checkbox 和 Text 组件组合在一起,创建一个带有同意协议的行(Row)。

    8110

    Flutter 构建完整应用手册-处理手势

    处理点击 我们不仅希望向用户展示信息,还希望我们的用户与我们的应用进行互动! 那么,我们如何回应基本操作,如点击和拖动? 我们将使用GestureDetector部件!...实现划动消除 “划动消除”模式在很多移动应用中很常见。 例如,如果我们正在编写一个电子邮件应用程序,我们可能希望允许我们的用户在列表中划离邮件消息。...有关如何创建列表的更多详细说明,请按照使用长列表配方进行操作。 创建一个数据源 在我们的例子中,我们需要20个样品条目。 为了简单起见,我们将生成一个字符串列表。...用户将该项目删除后,我们需要运行一些代码以从列表中删除该项目并显示Snackbar。 在真实的应用程序中,您可能需要执行更复杂的逻辑,例如从Web服务或数据库中删除项目。...这是Dismissible部件发挥作用的地方! 在我们的例子中,我们将更新我们的itemBuilder函数以返回一个Dismissible部件。

    1.8K20

    『Flutter』有无状态组件

    那么了解了这些背景内容之后,那么官方是如何解决这个问题的呢?...在Flutter中,组件(Widgets)是构建用户界面的基本元素。组件分为两种类型:有状态组件(Stateful Widgets)和无状态组件(Stateless Widgets)。...通过我的观察 MaterialApp 中的 home 属性是一个 Scaffold 组件,所以我们将 Scaffold 组件也抽离出来,然后在 MaterialApp 中引用。...中的内容是一个 Center 组件,所以我们将 Center 组件也抽离出来,然后在 Scaffold 中引用, 这里我就不浪费时间了因为本次还有一个有状态组件还要介绍无状态组件的使用就到这里了。...这里需要强调无状态组件中的一个关键注意事项, 在无状态组件中,组件被创建之后会将组件中的变量变成 final 的,所以无法管理状态。 那么我们该如何解决这个问题呢?这里就需要用到有状态组件了。

    6110

    flutter中key的作用

    翻译过来: 控制一个小部件如何替换树中的另一个小部件。...当找到新的widget(其键和类型与相同位置的先前widget不匹配),但是在前一帧的树中其他位置有一个具有相同全局键的widget时,该widget的element将移至新位置。...(0, widgets.removeAt(1)); setState(() {}); } } 有状态组件 有状态组件的状态信息(如颜色)通常是存储在state中的,而state是存储在element...用途1 允许widget在应用程序中的任何位置更改其parent而不丢失其状态。应用场景:在两个不同的屏幕上显示相同的widget,并保持状态相同。...参考资料 何时使用密钥 - Flutter小部件 101 第四集 widgets-intro#keys Flutter | 深入浅出Key Flutter中的Key和GlobalKey

    1.6K10

    『Flutter』有无状态组件

    那么了解了这些背景内容之后,那么官方是如何解决这个问题的呢?...在Flutter中,组件(Widgets)是构建用户界面的基本元素。组件分为两种类型:有状态组件(Stateful Widgets)和无状态组件(Stateless Widgets)。...通过我的观察 MaterialApp 中的 home 属性是一个 Scaffold 组件,所以我们将 Scaffold 组件也抽离出来,然后在 MaterialApp 中引用。...中的内容是一个 Center 组件,所以我们将 Center 组件也抽离出来,然后在 Scaffold 中引用, 这里我就不浪费时间了因为本次还有一个有状态组件还要介绍无状态组件的使用就到这里了。...这里需要强调无状态组件中的一个关键注意事项, 在无状态组件中,组件被创建之后会将组件中的变量变成 final 的,所以无法管理状态。那么我们该如何解决这个问题呢?这里就需要用到有状态组件了。

    38540

    Flutter Hero动画开发实用教程

    在这篇文章中,将向大家分享Flutter动画中的重要一员Hero动画,以及一些Hero动画的开发技巧和经验。...在大家Flutter开发环境过程中遇到无法解决的问题可以在课程问答区进行提问,课程老师会对你进行辅导和帮助; 精心设计的动画会让用户界面感觉更直观、流畅,能改善用户体验。...许多widget,特别是Material Design widgets, 都带有在其设计规范中定义的标准动画效果,但也可以自定义这些效果,在开始学习之前呢,我们先来快速过一下本篇文章的目录: 目录 什么是...如何实现标准Hero动画? Hero的函数原型的函数原型是什么? 如何实现径向Hero动画? 什么是Hero动画? 在 Flutter中可以用 Hero widget创建这个动画。...“飞行”过程中该如何变化; child:[必须]定义动画所呈现的widget; 实现径向Hero动画 ...

    1.1K10

    flutter系列之:构建Widget的上下文环境BuildContext详解

    中没有对应的build方法,但是和StatefulWidget对应的State中也有同样的build方法。...这个BuildContext被称为是Widget的上下文构建环境。 那么BuildContext有什么特性呢?我们又该如何使用BuildContext呢?一起来看看吧。...BuildContext的本质 还记得flutter中的三颗树吗? 他们分别是Widgets树,Element树和Render树。其中Widgets树和Element树是一一对应的。...BuildContext和InheritedWidget InheritedWidget是一种widget用来在tree中向下传递变动信息,在tree的子节点中,可以通过调用BuildContext.dependOnInheritedWidgetOfExactType...所以我们在使用BuildContext的时候,一定要注意。 总结 BuildContext是构建Widget的基础,它也提供了一些非常有用的查找和绑定的功能,希望能对大家有所帮助。

    1.1K10

    Flutter 绘制探索 1 | CustomPainter 正确刷新姿势 | 七日打卡

    本文就来分享一下这个非常重要的知识点。 ? ---- 一、Flutter 中自定义绘制的方式 本文的测试案例效果如下,使用 CustomPaint 组件绘制一个圆,让其执行 3 秒红转蓝 的动画。...在 paint 方法中会回调 Canvas 和 Size 对象,以供绘制使用。如下代码,绘制一个颜色为 color 的圆。...---- 三、CustomPainter 在 Flutter 框架中的应用 其实 CustomPainter 在 Flutter 框架源码中的应用并不是非常多,一共也就下面的 20 处。..._GlowingOverscrollIndicatorPainter 当时还有一个疑惑是,repaint 中只是传入一个 Listenable 对象,那么多个属性如何去监听呢,比如多个动画同时执行。...对于非频繁刷新的场景,局部刷新也就够了,这应该就是源码中,在非 动画和滑动 中不使用 repaint 的原因。但对于频繁触发的绘制,如 动画 和 滑动 一定要用。

    1.5K20

    Flutter动画之自定义动画组件-FlutterLayout

    前言: 本文将自定义一个FlutterWidget的动画组件,Flutter有颤动的意思 在此之前会讲一下AnimatedWidget与AnimatedBuilder是什么,如何使用 所以本文是一篇挺重要的文章...---- 2.组件之所为组件 2.1:组件是什么 模块化的思想大家应该都听过,为了让已有代码更好复用,将项目拆成不同模块 组件也是这样,对于一个页面,便是组件的组合,可以拆装,拼凑和批量生成 在代码中我们可以很轻易的将多个控件批量动效...在build方法里生成刚才的带有颤动效果的组件 ?...= Scaffold( body: Center(child: show,) ); 另外还有我们的FlutterLayout,可以包含任意组件,那Image来测试 ?...= Scaffold( body: Center(child: show,) ); 好了,到这也差不多了,你以为结束了,稍安勿躁,还有一点 ---- 3.增加运动曲线 可以用曲线补间来让动画的执行不那么古板

    2K20

    flutter系列之:构建Widget的上下文环境BuildContext详解

    StatefulWidget中没有对应的build方法,但是和StatefulWidget对应的State中也有同样的build方法。...这个BuildContext被称为是Widget的上下文构建环境。 那么BuildContext有什么特性呢?我们又该如何使用BuildContext呢?一起来看看吧。...BuildContext的本质 还记得flutter中的三颗树吗? 他们分别是Widgets树,Element树和Render树。其中Widgets树和Element树是一一对应的。...BuildContext和InheritedWidget InheritedWidget是一种widget用来在tree中向下传递变动信息,在tree的子节点中,可以通过调用BuildContext.dependOnInheritedWidgetOfExactType...所以我们在使用BuildContext的时候,一定要注意。 总结 BuildContext是构建Widget的基础,它也提供了一些非常有用的查找和绑定的功能,希望能对大家有所帮助。

    52010

    Flutter之旅:认识Widget(源码级)

    其次它继承自DiagnosticableTree 下图可见Widget类在Flutter的框架层中是比较顶尖的类。 ? ?...你之后就会知道,Widget是Flutter界面的中心,可显示在页面上的一切,都和Widget相关。...---- 2.Widget的状态 2.1:Widget的状态概述 在Widget源码中明显指出了关于Widget状态的问题: /// Widgets themselves have no mutable...State类中的widget属性到底是什么,这里通过debug可以看出,就是传入的泛型类, 至于如何widget属性何时赋值以及渲染的,先别急,还有一段很长的路要走。...---- 3.从Icon源码看StatelessWidget组件 趁人打铁,为了让大家对Widget有更好的理解,这里挑选了两个Widget。 通过源码赏析一下:一个Widget是如何构成的。

    1.3K20
    领券